Smart AI Boxing Band: นับหมัดด้วย Machine Learning บน Nesso N1

ถ้านับหมัดเองไม่ทัน ก็ให้ IMU และ Machine Learning ช่วยดู Motion แทน โปรเจกต์ Smart AI Boxing Band นำ Arduino Nesso N1 มาสวมที่ข้อมือ เก็บข้อมูล Accelerometer, Train โมเดลด้วย Edge Impulse แล้วนำโมเดลกลับมาจำแนก Hook, Jab-Cross และ Uppercut บนอุปกรณ์โดยตรง

Creator ยังเพิ่ม Pulse Sensor เพื่ออ่าน BPM และใช้ค่าที่ได้เปลี่ยนสีพื้นหน้าจอ ตาม Threshold ที่กำหนดไว้ใน Firmware ทำให้ Wearable ชิ้นเดียว แสดงทั้งผลจาก Motion Classification และข้อมูลชีพจรระหว่างการทดลองฝึกได้

ก่อนอ่านต่อ: ตัวเลข Accuracy 100% ที่ปรากฏใน Project เป็นผลที่ Creator รายงาน จาก Training และ Model Testing ของ Dataset ชุดนี้ ไม่ควรตีความว่าอุปกรณ์จะจำแนกหมัด ได้ถูกต้อง 100% กับนักมวยทุกคน ทุกสภาพแวดล้อม หรือทุกการเคลื่อนไหวจริง

Smart AI Boxing Band ต้นแบบที่ใช้ Arduino Nesso N1 สำหรับวิเคราะห์การเคลื่อนไหว
Smart AI Boxing Band: Wearable Prototype ที่ใช้ Arduino Nesso N1, IMU และ Edge Impulse สำหรับจำแนก Boxing Movement พร้อมแสดงข้อมูล BPM บนหน้าจอ

Key Takeaways

  • หัวใจของ Project คือ Motion Classification ด้วย IMU + Edge Impulse
  • Hardware หลักคือ Arduino Nesso N1 และ Pulse Sensor
  • Code เก็บ Dataset ใช้ Accelerometer X, Y, Z จาก BMI270
  • Sampling Target ใน Nesso_IMU.ino คือ 100 Hz
  • Serial Communication ใน Code ใช้ 115200 baud
  • Dataset แบ่งเป็น Idle, Hook, Jab-Cross และ Uppercut
  • Edge Impulse ใช้ Spectral Analysis + Classification
  • Window Size = 1200 ms และ Window Stride = 750 ms
  • Creator ตั้ง Training Cycles = 100 และ Learning Rate = 0.05
  • Creator รายงาน Accuracy 100% ทั้ง Training และ Model Testing ของ Dataset ชุดนี้
  • Final Model ถูกนำกลับมารัน On-device บน Arduino Nesso N1
  • Pulse Sensor ใช้ GPIO5 ใน Final Firmware
  • PulseSensor Threshold ใน Code = 350
  • Hackster Narrative กับ Final GitHub Code ใช้ BPM Color Zone ไม่ตรงกันทั้งหมด
  • Firmware ใช้การเปลี่ยนสีพื้น Display ด้วย fillScreen() ไม่ได้ยืนยันว่าเป็นการเปลี่ยน Physical Backlight
  • Source ไม่ได้ยืนยันว่าระบบวัด Punch Force หรือ Punch Speed จริง
  • BPM Color Zones เป็น Logic ของ Prototype ไม่ใช่ Medical Heart-rate Zone

Smart AI Boxing Band คืออะไร?

Smart AI Boxing Band เป็น Wearable Prototype ที่นำข้อมูล Motion จาก IMU มาใช้กับ Machine Learning เพื่อจำแนก Boxing Movement แบบ On-device

จาก Source Workflow หลักแบ่งออกเป็น 4 ช่วง:

เก็บ Motion Dataset

Train Classification Model ใน Edge Impulse

Deploy Model ลง Arduino Nesso N1

รวม Pulse Sensor + Display Feedback

Class ที่ Creator ใช้สำหรับ Training คือ:

  • Idle
  • Hook
  • Jab-Cross
  • Uppercut

เมื่อ Model จำแนก Movement ได้ Firmware จะนำ Classification Result ไปสะสม Counter สำหรับแต่ละประเภท พร้อมอ่าน BPM จาก Pulse Sensor และแสดงข้อมูลบนหน้าจอ

ทำไม Creator ถึงสร้าง Smart Boxing Band?

Problem Statement ของผู้สร้างเริ่มจากแนวคิดว่า การฝึกมวยจำนวนมาก ยังอาศัยความรู้สึก และการประเมินด้วยสายตา มากกว่าข้อมูลที่เก็บได้ต่อเนื่อง

Creator จึงอยากให้ Wearable ช่วยสร้างข้อมูลจากการฝึก เช่นการจำแนกและสะสม Boxing Movement เพื่อให้ผู้ใช้มี Feedback มากกว่าการจำด้วยตัวเอง

แต่ต้องแยก Problem Statement ออกจาก Implementation: ใน Story มีการพูดถึง Punch Count, Speed และ Intensity แต่ Code และขั้นตอนที่ Verify ได้ใน Project นี้ ยืนยันชัดเรื่อง Motion Classification, Counter, BPM และ Display Feedback ยังไม่ได้แสดงระบบคำนวณ Punch Speed, Punch Force หรือ Punch Power ที่ชัดเจน

Hardware หลักใน Project

Hardware List ของ Project ระบุองค์ประกอบหลักแบบไม่ซับซ้อน:

  • Arduino Nesso
  • Pulse Sensor
  • Hook-and-loop Strap
  • Jumper Wires

Software ที่ใช้ประกอบ Workflow คือ:

  • Arduino IDE
  • Edge Impulse Studio

สิ่งที่ทำให้ Project นี้น่าสนใจ: Arduino Nesso N1 รวม Display, IMU, Battery และ Controller อยู่ใน Form Factor ขนาดเล็ก Creator จึงนำไปยึดกับข้อมือ และใช้เก็บ Motion ในตำแหน่งเดียวกับการใช้งานจริง

ทำไม Creator เลือก Arduino Nesso N1?

ภาพอ้างอิง Arduino Nesso N1 ในโปรเจกต์ Smart AI Boxing Band
ภาพประกอบจาก Project ในส่วนของ Arduino Nesso N1 ซึ่ง Creator เลือกใช้เป็น Wearable Platform สำหรับเก็บ Motion และแสดงผล

Hackster Project ระบุ Specification ของ Nesso N1 ไว้ดังนี้:

หัวข้อ ข้อมูลที่หน้า Project ระบุ
Microcontroller ESP32-C6
Processor Dual 32-bit RISC-V processors ตาม Specification ใน Project
HP Core สูงสุด 160 MHz ตาม Project
LP Core 20 MHz ตาม Project
Wireless Wi-Fi 6 2.4 GHz, Bluetooth 5.3, Thread 1.4, Zigbee 3.0 และ LoRa 850–960 MHz ผ่าน SX1262 ตามหน้า Project
Display 1.14-inch Touch Screen
Built-in Sensor 6-axis IMU
Other Onboard Features IR Transmitter, RGB LED และ Passive Buzzer
Memory 16 MB NOR Flash + 512 KB SRAM
Expansion Grove และ Qwiic Connectors
Power Built-in Lithium Polymer Battery; Project ระบุ nominal 5V input
USB USB-C สำหรับ Power และ Programming
Size 18 × 45 mm

Specification ในตารางนี้ เป็นข้อมูลตาม Hackster Project ที่ผู้สร้างระบุไว้ บทความนี้ไม่ได้เพิ่ม Datasheet Parameter อื่นที่ Source ไม่ได้ให้ และไม่ได้ใช้ข้อมูลเหล่านี้ เพื่อคำนวณ Battery Runtime หรือ Performance เพิ่มเอง

Architecture: Motion และ Pulse ทำงานเป็นสองเส้นทาง แล้วมารวมบน Display

Boxing Motion

BMI270 Accelerometer

Edge Impulse Classification

Punch Label + Counter

Pulse Sensor

BPM Reading

Display Color Logic

ทั้งสองส่วน

แสดงผลบน Arduino Nesso N1

สิ่งสำคัญคือ Machine Learning ไม่ได้ถูกใช้วิเคราะห์ Heart Rate ใน Project นี้

ML ใช้กับ Motion Classification ส่วน BPM มาจาก Pulse Sensor และถูกนำเข้า Conditional Logic เพื่อกำหนดสีหน้าจอ

Step 1 — เก็บ Boxing Movement Dataset จาก Nesso N1

ภาพหน้าจอจากขั้นตอนเก็บข้อมูล Motion สำหรับ Smart AI Boxing Band
ภาพจากขั้นตอน Data Collection ของ Project ต้นฉบับ ก่อนนำ Boxing Movement ไปสร้าง Dataset ใน Edge Impulse

ก่อนจะ Train Model Creator ต้องทำให้ Nesso N1 ส่ง Motion Data ออกมาอย่างต่อเนื่องก่อน

Official Nesso_IMU.ino ใช้:

  • Arduino_Nesso_N1.h
  • Arduino_BMI270_BMM150.h
  • M5GFX.h

ถึงแม้ Nesso จะมี 6-axis IMU แต่ Data Collection Code ใน Project นี้ ส่งเข้า Training Pipeline เป็น Accelerometer 3 แกน:

  • X acceleration
  • Y acceleration
  • Z acceleration

Serial Format ที่ Code ระบุคือ:

X_accel,Y_accel,Z_accel

ตรงนี้สำคัญ: การที่ Hardware มี 6-axis IMU ไม่ได้แปลว่า Model นี้ใช้ข้อมูลครบทั้ง 6 แกน เพราะ Data Collection Code ที่ Verify ได้ส่ง Accelerometer X/Y/Z เข้า Workflow เท่านั้น

Sampling ที่ 100 Hz

Code กำหนด Target Sampling Rate:

100 Hz

และคำนวณช่วงระหว่าง Sample:

10 ms

พร้อมเปิด Serial ที่:

115200 baud

ภาพเพิ่มเติมจากขั้นตอนเตรียมข้อมูล Motion ในโปรเจกต์ Smart AI Boxing Band
ภาพเพิ่มเติมจากขั้นตอน เตรียม Motion Data และเชื่อม Workflow สำหรับ Model Development
ภาพประกอบเพิ่มเติมจากการเก็บ Boxing Movement Dataset
ภาพประกอบเพิ่มเติม จากช่วง Dataset Collection ใน Project ต้นฉบับ

เชื่อม Nesso N1 เข้ากับ Edge Impulse Data Forwarder

หลัง Flash Data-forwarder Firmware แล้ว Source ให้ผู้ใช้เปิด Edge Impulse Account และนำ API Key ของ Project มาใช้กับคำสั่ง:

Edge Impulse Data Forwarder
edge-impulse-data-forwarder --api-key YOUR_API_KEY

YOUR_API_KEY เป็น Placeholder: ต้องแทนด้วย API Key จาก Edge Impulse Account ของผู้ใช้เอง และไม่ควรนำ Secret หรือ Credential จริง ไปเผยแพร่ใน Screenshot, Repository หรือบทความสาธารณะ

ตำแหน่งตอนเก็บ Dataset สำคัญ

Creator ใช้ Hook-and-loop Strap ยึด Nesso N1 ไว้ที่ข้อมือ เพื่อให้ Orientation ตอนเก็บข้อมูล สอดคล้องกับตำแหน่ง Wearable ที่ต้องการใช้จริง

แนวคิดนี้สำคัญกับ Motion Classification เพราะ Sensor Orientation มีผลโดยตรงกับรูปแบบ Accelerometer ที่ Model เห็นใน Dataset

Step 2 — Train Machine Learning Model ใน Edge Impulse

ภาพหน้าจอจากขั้นตอนสร้าง Impulse ใน Edge Impulse
ภาพจากขั้นตอนสร้าง Machine Learning Pipeline ใน Edge Impulse สำหรับ Boxing Movement Classification

Creator แบ่ง Dataset ออกเป็น 4 Target Classes:

  • Idle
  • Hook
  • Jab-Cross
  • Uppercut

ใน Hackster Story บาง Label เขียนเป็น UppeCut ขณะที่ Final Code ใช้ชื่อ: Uppercut

และ Final Code ใช้ชื่อ: Jab_Cross สำหรับ Label ที่บทความเขียนเป็น Jab-Cross

Create Impulse Settings

Setting ค่าที่ Source ระบุ
Preprocessing Block Spectral Analysis
Learning Block Classification
Window Size 1200 ms
Window Stride 750 ms
Training Cycles 100
Learning Rate 0.05
ภาพเพิ่มเติมจากขั้นตอนตั้งค่า Edge Impulse
ภาพเพิ่มเติมจากขั้นตอน ตั้งค่า Machine Learning Workflow ใน Edge Impulse
ภาพหน้าจอเพิ่มเติมจาก Edge Impulse ในโปรเจกต์ Smart AI Boxing Band
ภาพประกอบเพิ่มเติม จาก Edge Impulse Project ของ Creator
ภาพเพิ่มเติมจากการตั้งค่า Boxing Movement Classification
ภาพเพิ่มเติมจากช่วง ตั้งค่าและเตรียม Boxing Movement Classification

Generate Features แล้วดูว่าแต่ละ Movement แยกกันได้แค่ไหน

ภาพจากขั้นตอน Generate Features และ Training ใน Edge Impulse
ภาพจากขั้นตอน Generate Features และตรวจข้อมูล ก่อน Train Classification Model

หลังตั้ง Impulse แล้ว Creator ให้ Generate Features เพื่อดูภาพรวมว่า Signal ของแต่ละ Label มีรูปแบบแตกต่างกันอย่างไร

จากนั้นจึงเข้าสู่ Neural Network Training ด้วยค่าที่ระบุ:

  • Training Cycles = 100
  • Learning Rate = 0.05
ภาพเพิ่มเติมจากขั้นตอน Training ใน Edge Impulse
ภาพเพิ่มเติมจาก Machine Learning Training ใน Project
ภาพผลลัพธ์จากขั้นตอน Machine Learning ของ Smart AI Boxing Band
ภาพผลลัพธ์อีกส่วนหนึ่ง จาก Workflow ที่ใช้พัฒนา Boxing Classifier
ภาพหน้าจอเพิ่มเติมจากการ Train และประเมิน Boxing Model
ภาพประกอบเพิ่มเติม จากการ Train และประเมิน Model ของ Project ต้นฉบับ

Accuracy 100% ที่ Source รายงาน ต้องตีความอย่างไร?

ภาพผลการประเมินโมเดลจากโปรเจกต์ Smart AI Boxing Band
ภาพจากช่วง Training / Model Testing ของ Project ต้นฉบับ ซึ่ง Creator รายงานผล 100% สำหรับ Dataset ที่ใช้ทดสอบ

Hackster Story ระบุว่า Model ได้:

  • Training Accuracy = 100%
  • Model Testing = 100%

โดย Creator อธิบายว่า Model Testing ใช้ข้อมูลใหม่ ที่ไม่ได้รวมอยู่ใน Training Process

100% ใน Project ไม่เท่ากับ 100% ในโลกจริง: Source ที่ให้มาไม่ได้ระบุครบว่า Dataset มีทั้งหมดกี่ Sample, มีผู้ชกกี่คน, Test Set ใหญ่แค่ไหน, มี Cross-person Validation หรือไม่ หรือ Model ทำงานอย่างไร เมื่อเปลี่ยนท่าทาง, ความเร็ว, มือ, ตำแหน่ง Wearable และผู้ใช้งาน

ดังนั้นบทความนี้จะใช้ถ้อยคำว่า:

“Creator รายงานผล 100% ใน Training และ Model Testing ของ Dataset ชุดนี้”

แทนการเขียนว่า:

“Smart Boxing Band แม่นยำ 100%”

ภาพเพิ่มเติมจากขั้นตอนประเมินและ Deploy Machine Learning Model
ภาพเพิ่มเติมจากช่วง Model Evaluation / Deployment ของ Project

Step 3 — Deploy Edge Impulse Model กลับลง Arduino Nesso N1

หลัง Creator พอใจกับ Model Testing Workflow ถัดไปคือ:

Edge Impulse Model

Export เป็น Arduino Library

Import เข้า Arduino IDE

รวม Logic เพิ่มเติม

Flash ลง Nesso N1

Source ระบุว่า Model ไม่ได้ถูก Deploy กลับไปทันทีแบบจบขั้นตอน เพราะ Creator ต้องเพิ่ม Logic สำหรับ Pulse Sensor และ Display Feedback เข้าไปก่อน

จุดเด่นของ Architecture: หลัง Model ถูก Deploy การ Classification ทำบน Nesso N1 แบบ On-device ไม่ต้องส่ง Motion ทุกครั้ง ไปยัง Cloud เพื่อให้ Cloud เป็นผู้จำแนก Punch

Punch Counter ใน Firmware ทำงานอย่างไร?

Final GitHub Code หา Classification ที่มี Confidence สูงสุด แล้วเก็บชื่อ Label ไว้เป็น bestLabel

จากนั้น Counter จะเพิ่มตาม Label เช่น:

  • Idle → idleCount++
  • Hook → hookCount++
  • Jab_Cross → jabCrossCount++
  • Uppercut → uppercutCount++

ตรงนี้ควรเรียกว่า “สะสม Classification Counter” อย่างระวัง: Code ที่ตรวจได้เพิ่ม Counter จากผล Classification แต่ Source ไม่ได้ให้การทดสอบยืนยันว่า หนึ่ง Physical Punch จะถูกนับเป็นหนึ่ง Count เสมอ ในทุกสถานการณ์

Source ยังไม่ยืนยัน Punch Force หรือ Punch Speed: แม้ Problem Statement พูดถึง Speed และ Intensity แต่ Final Implementation ที่ตรวจได้ใน GitHub ไม่ได้แสดงระบบคำนวณ ความเร็วหมัด, แรงหมัด หรือ Power เป็นค่าทางกายภาพที่ผ่านการ Validate

Step 4 — เพิ่ม Pulse Sensor เข้าไปใน Wearable

ภาพจากขั้นตอนเชื่อม Pulse Sensor เข้ากับ Arduino Nesso N1
ภาพจากขั้นตอน Pulse Sensor Integration ใน Smart AI Boxing Band

Source ระบุให้ใช้ PulseSensor Playground ใน Arduino IDE สำหรับส่วนอ่าน Pulse

Creator เลือก:

GPIO5

สำหรับ Analog Sampling ของ Pulse Sensor

Final GitHub Code ยืนยันอีกชั้นด้วย:

const int PulseWire = 5;

Pulse Signal Threshold

Code กำหนด:

Threshold = 350

ซึ่งเป็น Threshold ที่ PulseSensor Playground ใช้กับ Signal เพื่อช่วยตัดสินการตรวจ Beat ตาม Logic ใน Project

อย่าสับสน Threshold 350 กับ BPM Color Zone: ค่า 350 เป็น Signal Threshold ใน PulseSensor Code ไม่ใช่ค่า Heart Rate และไม่ใช่ BPM

การแก้ PulseSensor.cpp ตาม Source

Hackster Story ระบุว่า Creator แก้ค่า ADC Input ในไฟล์ PulseSensor.cpp จาก:

InputPin = 7;

เป็น:

InputPin = 5;

เพื่อให้ Library อ่านจาก GPIO5 ที่ Creator ใช้ใน Hardware Setup นี้

ภาพเพิ่มเติมจากขั้นตอนต่อ Pulse Sensor
ภาพเพิ่มเติมจาก Pulse Sensor Integration ใน Project ต้นฉบับ
ภาพอ้างอิงเพิ่มเติมของ Pulse Sensor ใน Smart AI Boxing Band
ภาพอ้างอิงเพิ่มเติม จากการนำ Pulse Sensor มาใช้ร่วมกับ Wearable

Creator วาง Pulse Sensor ตรงไหน?

Source ระบุว่า Creator ยึด Pulse Sensor ไว้ที่:

ปลายนิ้วชี้

และใช้ Hook-and-loop Strap ช่วยยึด Sensor ให้อยู่ในตำแหน่ง ระหว่างการทดลอง

BPM Color Logic: Hackster Story กับ GitHub Code ไม่ตรงกันทั้งหมด

ภาพอธิบายการทำงานร่วมกันของ Pulse Sensor และ Display ใน Smart AI Boxing Band
ภาพประกอบจาก Project ในส่วนของ Pulse Reading และ Visual Feedback บน Wearable

Story ของ Hackster อธิบาย Zone ดังนี้:

  • Green — Pulse < 100
  • Blue — Pulse 100–140
  • Yellow — Pulse 140–160
  • Red — Pulse > 160
  • Black — ไม่มี Pulse Reading

แต่ Final Code ใน Official GitHub ใช้ Condition ต่างออกไป

Color Hackster Story GitHub Code ปัจจุบัน
Green BPM < 100 myBPM < 100
Blue 100–140 myBPM > 100 && myBPM < 130
Yellow 140–160 myBPM > 130 && myBPM < 160
Red >160 myBPM > 160 && myBPM < 200
Black No Pulse Reading ทุกค่าที่ไม่เข้า Condition ด้านบน

มี Boundary Gap ใน Code ปัจจุบัน: ค่าเท่ากับ 100, 130 หรือ 160 BPM ไม่เข้าเงื่อนไขสีด้านข้าง เพราะ Code ใช้ > และ < โดยไม่รวมค่าเท่ากัน และค่า 200 ขึ้นไป ก็จะเข้าสู่ else เช่นกัน

บทความนี้จึงไม่แก้ Threshold ให้ Creator แต่เปิด Conflict ให้เห็นตาม Source จริง

“Backlight Color” ใน Story กับ Code จริง

Hackster Story ใช้คำว่า Backlight Color แต่ Final Code ที่ Verify ได้ เรียก:

  • display.fillScreen(TFT_GREEN)
  • display.fillScreen(TFT_BLUE)
  • display.fillScreen(TFT_YELLOW)
  • display.fillScreen(TFT_RED)
  • display.fillScreen(TFT_BLACK)

ดังนั้นบทความนี้จะเรียกว่า:

“เปลี่ยนสีพื้นหน้าจอตาม BPM”

มากกว่าการยืนยันว่า Firmware เปลี่ยน Physical Backlight Hardware โดยตรง

BPM Zone เหล่านี้เป็น Logic ของ Prototype: ไม่ใช่ Medical Heart-rate Zone, Medical Diagnosis, Training Prescription หรือ Safe / Unsafe Threshold ที่ใช้ได้กับทุกคน สีแดงใน Project จึงไม่ได้หมายความว่า ผู้ใช้กำลังเกิด Medical Emergency โดยอัตโนมัติ

ภาพเพิ่มเติมจาก Architecture ของ Smart AI Boxing Band
ภาพเพิ่มเติมจาก Architecture / Workflow ของ Smart AI Boxing Band
ภาพผลการแสดงข้อมูลบน Smart AI Boxing Band
ภาพจากช่วง Final Display ของ Wearable Prototype
ภาพเพิ่มเติมจาก Smart AI Boxing Band หลังรวม Machine Learning และ Pulse Sensor
ภาพเพิ่มเติมจาก Project หลังนำ Motion Classification และ Pulse Sensor มารวมใน Wearable Workflow

Code ที่ Verify จาก Official GitHub

Repository ของผู้สร้าง มีทั้ง Data Collection Code และ Final Inferencing Code จึงสามารถยกเฉพาะส่วนที่เกี่ยวข้อง มาอธิบายได้โดยไม่ต้องสร้าง Function เอง

1. IMU Sampling Configuration

Nesso_IMU.ino — Sampling
const int sampleRate = 100;
const unsigned long sampleTime = 1000 / sampleRate;

void setup() {
  Serial.begin(115200);
}

Code นี้ยืนยันว่า Data Collection Sketch ตั้ง Target Sampling ไว้ที่ 100 Hz หรือประมาณ 10 ms ต่อ Sample และใช้ Serial 115200 baud

2. Pulse Sensor Configuration

Final Inferencing Code — Pulse Sensor
const int PulseWire = 5;
int Threshold = 350;

pulseSensor.analogInput(PulseWire);
pulseSensor.setThreshold(Threshold);

3. BPM Color Logic ใน Final Code

Final Inferencing Code — Display Color
if (myBPM < 100) {
  display.fillScreen(TFT_GREEN);
}
else if (myBPM > 100 && myBPM < 130) {
  display.fillScreen(TFT_BLUE);
}
else if (myBPM > 130 && myBPM < 160) {
  display.fillScreen(TFT_YELLOW);
}
else if (myBPM > 160 && myBPM < 200) {
  display.fillScreen(TFT_RED);
}
else {
  display.fillScreen(TFT_BLACK);
}

Code ด้านบนคัดเฉพาะส่วนที่ Verify จาก Repository: บทความนี้ไม่แก้ Boundary, Threshold หรือ Logic ให้ต่างจาก Source หากต้องการนำไปใช้จริง ควรเปิด Full Source Code และตรวจ Version ล่าสุดก่อน Flash

Inference Timing Caveat

Final Code ประกาศ:

INFERENCE_INTERVAL = 500

แต่ Condition ที่ใช้เรียก runInference() ตรวจ:

INFERENCE_INTERVAL + 250

ดังนั้นไม่ควรอ่านชื่อ Constant แล้วสรุปทันทีว่า Final Firmware เรียก Inference ทุก 500 ms แบบตรงตัว

ดู Smart AI Boxing Band ทำงานจริง

Video ของ Creator ช่วยให้เห็นภาพรวม ตั้งแต่ Form Factor ของ Wearable ไปจนถึงการนำ Boxing Movement และ Display Feedback มาใช้งานร่วมกัน

Project นี้พิสูจน์อะไรแล้ว และอะไรยังไม่ควร Claim?

สิ่งที่ Source / Code รองรับ สิ่งที่ไม่ควร Claim เกิน Source
4-class Motion Classification ไม่ควรบอกว่ารู้จัก Punch ทุกประเภท
Accelerometer X/Y/Z เป็น Input ใน Data Collection Code ไม่ควรบอกว่า Model ใช้ Gyroscope โดยอัตโนมัติ
Creator รายงาน Training และ Testing 100% ไม่ควรเรียกว่า Real-world Accuracy 100%
Classification Counter ใน Firmware ไม่ควรรับประกันหนึ่ง Physical Punch = หนึ่ง Count เสมอ
Pulse Sensor อ่าน BPM ไม่ควรนำไปใช้เป็น Medical Diagnosis
สีพื้น Display เปลี่ยนตาม BPM Logic ไม่ควรเรียกสีเหล่านี้ว่า Medical Heart-rate Zone
On-device Edge Impulse Inference Source ไม่ได้ให้ Inference Latency Benchmark แบบครบถ้วน
Problem Statement กล่าวถึง Speed / Intensity Code ที่ตรวจไม่ยืนยัน Punch Speed, Force หรือ Power Measurement

Accelerometer Clip ใน Final Firmware

Final Code กำหนด:

MAX_ACCEPTED_RANGE 2.0f

แล้ว Clip Acceleration Value ที่เกิน ±2g ก่อนนำเข้าสู่ Buffer

อย่าสรุปว่า BMI270 ถูก Config เป็น ±2g จากบรรทัดนี้: ค่านี้เป็น Software Input Clip ใน Final Firmware ไม่ใช่หลักฐานโดยตัวมันเองว่า Hardware Full-scale Range ของ IMU ถูกตั้งเป็น ±2g

Maker เรียนรู้อะไรจาก Smart AI Boxing Band?

1. Machine Learning Project เริ่มที่ Dataset ไม่ใช่ Model

Creator ต้องทำ Data-forwarder Firmware, ยึด Sensor ในตำแหน่งใช้งาน, เก็บ Movement และ Label ข้อมูลก่อน จึงจะเข้าสู่ Training ได้

2. Sensor Orientation สำคัญกับ Motion Classification

ถ้าตำแหน่ง Sensor ตอน Training ต่างจากตำแหน่งใช้งานจริงมาก Pattern ที่ Model เห็น ก็สามารถเปลี่ยนไปได้

3. Edge ML ไม่ได้แปลว่าทุกอย่างต้องส่งขึ้น Cloud

Edge Impulse ถูกใช้สำหรับ Model Development แต่ Final Classification รันบน Arduino Nesso N1 ตาม Workflow ของ Project

4. Accuracy ต้องอ่านพร้อม Dataset Context

ตัวเลข 100% จะมีความหมายมากน้อยแค่ไหน ต้องดู Dataset, Test Set, จำนวนผู้ใช้ และ Condition ที่ใช้ในการประเมิน

5. Narrative กับ Code อาจไม่ตรงกัน

BPM Zone ใน Hackster Story กับ Final GitHub Code เป็นตัวอย่างที่ชัดว่า Documentation และ Implementation ควรถูกตรวจคู่กัน ก่อนนำ Project ไปทำต่อ

กำลังเริ่ม Edge ML หรือ Wearable Prototype? สามารถสอบถามทีม Globalbyte เรื่อง Development Board, IMU, Pulse / Sensor Module, Jumper, Connector และ Maker Accessories ที่เหมาะกับ Project ได้ โดยควรเช็ก Compatibility กับ Board และ Firmware ที่ใช้งานจริงก่อน

Project นี้มีทั้ง Dataset, Edge Impulse และ Firmware แนะนำอ่านต้นฉบับควบคู่กัน

หากต้องการทำตาม Project ควรตรวจ Source หลักโดยตรง โดยเฉพาะ:

  • ตำแหน่ง Wearable ตอนเก็บ Dataset
  • Label ที่ใช้ใน Edge Impulse
  • Create Impulse Settings
  • Neural Network Settings
  • Model Testing
  • Nesso_IMU.ino
  • Final Inferencing Code
  • PulseSensor Library Configuration
  • GPIO5 และ Pulse Sensor Wiring ของ Project
  • BPM Display Logic

FAQ: Smart AI Boxing Band

Smart AI Boxing Band ใช้บอร์ดอะไร?

Project ใช้ Arduino Nesso N1 เป็น Wearable Platform หลัก

Arduino Nesso N1 ใช้ MCU อะไร?

Hackster Project ระบุว่าใช้ ESP32-C6

Model ใช้ Sensor อะไรจำแนกหมัด?

Data Collection Code ใช้ Accelerometer X, Y และ Z จาก BMI270 IMU

ใช้ Gyroscope Train Model ด้วยหรือไม่?

Nesso มี 6-axis IMU แต่ Data Collection Code ที่ Verify ได้ ส่ง Accelerometer X/Y/Z เข้า Serial Dataset ไม่ได้ส่ง Gyroscope Data ใน Sketch ดังกล่าว

Sampling Rate เท่าไร?

Nesso_IMU.ino กำหนด Target Sampling Rate ที่ 100 Hz หรือประมาณ 10 ms ต่อ Sample

Model แยกหมัดอะไรได้บ้าง?

Dataset ของ Project ใช้ Idle, Hook, Jab-Cross และ Uppercut เป็น Target Classes

Edge Impulse ใช้ Preprocessing อะไร?

Source ระบุ Spectral Analysis และใช้ Classification เป็น Learning Block

Window Size เท่าไร?

Source ระบุ 1200 ms และ Window Stride 750 ms

Model แม่นยำ 100% จริงไหม?

Creator รายงาน 100% ใน Training และ Model Testing ของ Dataset ชุดนี้ แต่ Source ไม่ได้ให้ข้อมูลเพียงพอ ที่จะรับประกัน Accuracy 100% กับผู้ใช้และสถานการณ์จริงทั้งหมด

Inference ต้องใช้ Cloud หรือไม่?

หลัง Export Model และ Deploy กลับลง Nesso N1 Source ระบุว่า Classification สามารถทำแบบ On-device ได้โดยไม่ต้องพึ่ง Cloud สำหรับการ Inference ปกติ

ระบบวัดแรงหมัดได้ไหม?

Source ที่ Verify ได้ ไม่ได้แสดงระบบวัด Punch Force เป็นค่าทางกายภาพ ที่ผ่านการ Calibration หรือ Validation

ระบบวัดความเร็วหมัดได้ไหม?

Problem Statement กล่าวถึง Punch Speed แต่ Final Implementation ที่ตรวจได้ ไม่ได้แสดง Algorithm หรือผล Validation สำหรับ Punch Speed Measurement

Pulse Sensor ต่อ GPIO ไหน?

Creator ใช้ GPIO5 และ Final Code กำหนด PulseWire = 5

Threshold 350 หมายถึง 350 BPM หรือไม่?

ไม่ ค่า 350 เป็น Signal Threshold ใน PulseSensor Playground Logic ไม่ใช่ BPM

ทำไมบทความกับ Code ใช้ Heart-rate Zone ไม่ตรงกัน?

Hackster Story ระบุ Blue Zone 100–140 BPM แต่ Final GitHub Code ใช้มากกว่า 100 และน้อยกว่า 130 BPM รวมถึงมี Boundary Condition อื่นต่างกัน จึงควรตรวจ Code Revision ที่ใช้จริง

สีแดงหมายถึง Heart Rate อันตรายหรือไม่?

ไม่ควรตีความเช่นนั้น สีเป็น Threshold Logic ที่ Creator กำหนดใน Prototype ไม่ใช่ Medical Diagnosis หรือมาตรฐาน Safe Heart-rate Zone สำหรับทุกคน

Pulse Sensor วางที่ไหน?

Creator วาง Sensor ที่ปลายนิ้วชี้ และยึดด้วย Hook-and-loop Strap ใน Setup ที่อธิบายไว้

มี Source Code ให้ดาวน์โหลดหรือไม่?

มี Official GitHub Repository มีทั้ง Nesso_IMU.ino, Final Inferencing Code และ Model Library ZIP

สรุป: Project นี้น่าสนใจตรงการเปลี่ยน Motion ให้กลายเป็นข้อมูลที่ Model เข้าใจได้

Smart AI Boxing Band ไม่ได้เริ่มจากการมี AI แล้วค่อยหาว่าจะเอาไปทำอะไร

Workflow ของ Creator เริ่มจาก:

ท่าชกจริง

Accelerometer Dataset

Label Movement

Spectral Analysis

Classification Model

On-device Inference

Punch Counter + BPM Feedback

Project จึงเหมาะมาก สำหรับคนที่อยากเข้าใจ Edge Machine Learning ตั้งแต่ต้นน้ำถึงปลายน้ำ: Sensor Data, Dataset, Feature Processing, Training, Deployment และ Runtime อยู่ใน Workflow เดียว

ขณะเดียวกัน Source ก็มีบทเรียนสำคัญ เรื่องการอ่าน Claim อย่างระวัง: Accuracy 100% ต้องอ่านพร้อม Dataset Context, Punch Count ไม่ควรถูกตีความว่า Exact Count โดยไม่มี Validation และ BPM Color Zone ก็ไม่ควรถูกยกเป็น Medical Guidance

ถ้ามอง Smart AI Boxing Band ในฐานะ Maker Project จุดที่น่าสนใจที่สุด จึงไม่ใช่ว่า “AI ชกมวยได้” แต่คือการนำ Embedded ML + Wearable Sensor + Real-time Feedback มารวมเป็น Prototype ที่จับต้องได้บนข้อมือ

References / แหล่งข้อมูลต้นฉบับ

อยากเริ่ม Edge ML หรือ Wearable Sensor Project ของตัวเอง?

Project แบบ Smart AI Boxing Band แสดงให้เห็นว่า Development Board, IMU, Sensor และ Machine Learning สามารถต่อกันเป็น Workflow ตั้งแต่เก็บ Dataset ไปจนถึง On-device Inference ได้

ถ้ากำลังหา Arduino, ESP32-class Development Board, IMU, Pulse Sensor, Sensor Module, Jumper, Connector หรือ Maker Accessories สำหรับทำ Prototype สามารถสอบถามทีม Globalbyte เพื่อช่วยเช็กตัวเลือก ที่เหมาะกับ Project ได้

บทความนี้ไม่ได้ยืนยันว่า Arduino Nesso N1, Pulse Sensor หรืออุปกรณ์รุ่นเดียวกับต้นฉบับ มี Stock อยู่ที่ Globalbyte กรุณาสอบถามรุ่นและ Availability ก่อนสั่งซื้อ

 

แท็ก


Blog posts