ในโปรเจกต์นี้เราใช้ข้อมูลจากเซ็นเซอร์ตรวจจับการเคลื่อนไหว (motion sensor) บนบอร์ด Arduino Nano 33 BLE Sense ที่ติดตั้งไว้บนช่วงล่าง (suspension) ของจักรยาน และใช้งานในสภาพถนนที่หลากหลาย ข้อมูลที่ได้จะถูกตัดเป็นช่วงๆ ช่วงละ 5 วินาที และติดป้ายกำกับ (label) ตามสภาพผิวถนนและกิจกรรมของผู้ขี่ จากนั้นนำไปประมวลผลใน Edge Impulse Studio ผ่านบล็อกของ Neural Network 2 ส่วนหลักคือ Spectral Analysis (สำหรับข้อมูลความเร่งในแกน x, y, z) และ Classification (ใช้ Keras) ซึ่งจะให้โมเดล Machine Learning (ML) ที่สามารถตรวจจับลักษณะของผิวถนน 5 แบบ และกิจกรรมของผู้ขี่ (idle, medium, rough, smooth, sprint) ได้
โมเดลนี้จะถูกนำไปติดตั้ง (deploy) ลงในโปรแกรมบนบอร์ด Nano 33 BLE Sense ซึ่งมีเซอร์โวมอเตอร์สำหรับปรับมุมติดตั้งอยู่ เพื่อใช้ปรับปุ่มควบคุมช่วงล่างของจักรยาน (suspension knob) โดยอัตโนมัติ
ท้ายที่สุด โปรเจกต์นี้ประสบความสำเร็จในการสร้างระบบ "สมาร์ท" ให้กับช่วงล่างของจักรยาน ซึ่งสามารถปรับระดับการทำงานของช่วงล่าง (lock, medium, open) ได้เองตามสภาพถนนและกิจกรรมของผู้ขี่ ทำให้ได้ความสบายในการขี่ ประสิทธิภาพการใช้พลังงานที่ดีขึ้น และช่วยลดปัญหาการสั่นสะเทือนเกินจำเป็น (bobbing) ลงได้ด้วยความช่วยเหลือของ Embedded ML จาก Edge Impulse โปรเจกต์นี้ยังมีศักยภาพที่จะต่อยอดเพื่อใช้งานในกีฬาปั่นจักรยานสไตล์ต่างๆ เช่น MTB (cross country, trail, downhill) ได้อีกด้วย ทำให้ผู้ขี่สามารถโฟกัสไปที่การควบคุมและการปั่นได้เต็มที่มากขึ้น
ภาพรวมโปรเจกต์
"AI-Ride" นี่คือการเปลี่ยนโฉมเทคโนโลยีของจักรยานเสือภูเขา (MTB) ด้วยแนวคิด การปรับการหน่วงแบบพยากรณ์ (Predictive Damping) ในขณะที่ระบบช่วงล่างระดับไฮเอนด์ทั่วไปใช้เพียงวาล์วธรรมดา AI-Ride ใช้ Arduino Nano 33 BLE Sense ในการรัน Neural Network แบบฝังตัว (embedded) โดยการวิเคราะห์ข้อมูลความเร่งความถี่สูงจากส้อมหน้าจักรยาน (fork) ระบบจะระบุประเภทของภูมิประเทศ (Gravel, Asphalt, Roots) และกิจกรรมของผู้ขี่ (Sprinting, Coasting) ได้แบบเรียลไทม์ และสั่งให้เซอร์โวปรับปุ่มควบคุมการหน่วงเชิงกล (mechanical damping knob) ทันที เพื่อเพิ่มประสิทธิภาพการยึดเกาะและประหยัดพลังงาน
โปรเจกต์นี้ประกอบด้วย 5 ขั้นตอนหลัก:
- เก็บข้อมูล (Collect data)
- นำข้อมูลมาใช้และติดป้ายกำกับ (Data acquisition and labelling)
- เทรนและสร้างโมเดล (Train and build model)
- ติดตั้งโมเดลและทดสอบ (Deploy model and test)
- แก้ไขโค้ด, ติดตั้งอุปกรณ์, และทดสอบ (Modify code, attach, and test)
ขั้นตอนที่ 1: เก็บข้อมูล
ขั้นตอนการเก็บข้อมูลนี้สำคัญมากและต้องเตรียมการ เราต้องทำเคสสำหรับติดตั้งบอร์ด Nano 33 BLE Sense และแบตเตอรี่ไว้บนท่อช่วงล่างของจักรยาน เพื่อให้การบันทึกข้อมูลง่ายขึ้น เราใช้สมาร์ทโฟนกับแอป Arduino Science Journal (Arduino SJ) พร้อมทั้งใช้ที่ยึดสมาร์ทโฟนกับจักรยาน เพื่อให้เห็นกราฟผลลัพธ์ได้ทันทีขณะบันทึกข้อมูล









สิ่งแรกที่ต้องทำกับบอร์ด Nano BLE Sense ก็คืออัปโหลดเฟิร์มแวร์ Arduino Science Journal ผ่าน Arduino IDE ไปเลยจ้า หาและติดตั้งไลบรารี่โดยใช้ Library Manager (ไปที่ Tools > Manage Libraries…) พิมพ์หา arduino science journal เลือกเวอร์ชันล่าสุดแล้วดาวน์โหลดเลย หลังจากนั้นไปที่ File > Examples > INCOMPATIBLE > Arduino_ScienceJournal > Nano33BLESenseFirmware แล้วกดปุ่ม Upload ได้เลย ตอนนี้ Nano BLE Sense ของเราพร้อมจะเอาไปติดตั้งกับระบบกันสะเทือนจักรยานแล้ววว
เมื่อติดตั้งทุกอย่างเรียบร้อยแล้ว ก็เปิดไฟและเชื่อมต่อ Nano BLE Sense กับแอป Science Journal ผ่านบลูทูธได้เลย ไปที่ Add button แล้วเลือก sensor input, เพิ่ม accelerometer แกน X, Y และ Z เข้าไป คราวนี้ก็พร้อมเก็บข้อมูลแล้วล่ะ เริ่มขี่จักรยาน แล้วก็กด start record - stop ได้เลย อย่าลืมตั้งชื่อให้กับแต่ละสภาพการบันทึกด้วยนะ (เช่น ขรุขระ/ลูกรัง, ปานกลาง/พื้นคอนกรีต, เรียบ/ยางมะตอย) นอกจากนี้พี่ยังเพิ่มสถานะ idle (จอดนิ่ง) และ sprint (ปั่นเต็มที่พร้อมกับเอียงซ้ายขวา) เข้าไปด้วย
หลังจากได้ข้อมูลจากแอปแล้ว ก็ดาวน์โหลดไฟล์ csv มาได้เลย จากนั้นเราก็พร้อมจะไปต่อที่ขั้นตอนที่ 2 ในฝั่งของ Edge Impulse Studio แล้ว
ขั้นตอนที่ 2: การเก็บข้อมูลและการติดป้าย (Data acquisition and labelling)
เปิด studio.edgeimpulse.com (เข้าสู่ระบบหรือสมัครใหม่) สร้างโปรเจกต์ใหม่ แล้วเลือกข้อมูลประเภท accelerometer ในหน้า dashboard > Project Info เลือก one label per data และเลือก Arduino Nano 33 BLE Sense สำหรับค่า latency จากนั้นในส่วน Data acquisition ให้คลิกที่แท็บ Upload Data เลือกไฟล์ CSV ของเรา ตั้งค่า auto split แล้วคลิก Begin upload ทีนี้ก็ถึงเวลาติดป้ายข้อมูลแล้วล่ะ คลิกที่ข้อมูลตัวอย่างที่เก็บมา คลิกที่ ... (จุดสามจุด) แล้วเลือก split sample ตั้งค่า segment length เป็น 5000 ms (5 วินาที) หรือจะเพิ่ม segment แบบ manual แล้วคลิก Split ก็ได้ ทำซ้ำไปเรื่อยๆ จนกว่าตัวอย่างข้อมูลทั้งหมดจะถูกติดป้ายเป็นช่วงๆ ละ 5 วินาที อย่าลืมเช็คให้แน่ใจว่าอัตราส่วนระหว่างข้อมูล Training กับ Test อยู่ในอุดมคติ คือประมาณ 80/20 นะ





ขั้นตอนที่ 3: เทรนและสร้างโมเดล
เมื่อชุดข้อมูลพร้อมแล้ว ไปที่ Create Impulse แล้วตั้งค่า Window size ประมาณ 4500ms (สำหรับข้อมูลตัวอย่าง 5 วินาที) และ Window increase เป็น 80ms จากนั้นเพิ่ม processing block เป็น Spectral Analysis และเพิ่ม learning block เป็น Classification (Keras) แล้ว Save Impulse ได้เลย

รายละเอียดทางเทคนิคแบบจัดเต็ม
- TinyML & การวิเคราะห์สเปกตรัม (Edge Impulse):
- Motion Forensics: ระบบจะเก็บข้อมูลอนุกรมเวลา 50Hz จาก LSM9DS1 IMU ที่อยู่บนบอร์ด
- Feature Extraction: แทนที่จะใช้ข้อมูลดิบ โมเดลจะใช้ การวิเคราะห์สเปกตรัม ด้วยการแปลงฟูริเยร์แบบเร็ว (FFT) เพื่อหา "จุดสูงสุดของพลังงาน" ในย่านความถี่เฉพาะ เช่น ความถี่สูง "สั่นกระตุก" บ่งบอกพื้นกรวด ส่วนความถี่ต่ำ "โคลงเคลง" บ่งบอกการวิ่งแบบหนักๆ
- การทำ Inference ด้วย Neural Network:
- Keras Classification: โมเดลที่เทรนเสร็จแล้วคือ Classification Neural Network ที่ถูกดีพลอยลงไปในโปรเซสเซอร์ Cortex-M4F โดยตรง มันจะให้คะแนนความน่าจะเป็นสำหรับ 5 คลาส: Idle, Smooth, Medium, Rough, และ Sprint
- Edge Deployment: เอ็นจิ้นทำ Inference ทำงานบนจักรยานเลย ไม่ต้องพึ่งคลาวด์ ทำให้ไม่มีแล็กและไม่ต้องรอสัญญาณเน็ต ซึ่งสำคัญมากสำหรับการปรับช่วงล่างแบบฉับไวในทางลงเทคนิค
ไปที่ส่วน Parameter แล้วกด Save parameters

กดปุ่ม Generate features ไปเลยวัยรุ่น ควรจะได้ผลลัพธ์ประมาณนี้

จากนั้น ไปที่ส่วน NN Classifier ตั้งค่าการเทรน Neural Network ตามเดิมได้เลย เทรนโมเดลโดยกด Start training.. แล้วรอดูความคืบหน้า ถ้าทุกอย่างโอเค จะเห็นผลประมาณนี้ (ความแม่น 91% ถือว่าใช้ได้เลย)


เสร็จแล้วเราก็ทดสอบโมเดลได้ ไปที่ส่วน Model testing แล้วกด classify all ถ้าผลความแม่นยำเกิน 80% ก็ไปขั้นต่อไปได้เลย — ดีพลอย (ถ้าผลยังไม่ดีเท่าที่หวัง ให้ลองเริ่มใหม่ด้วยข้อมูลคุณภาพดีขึ้น, ติดป้ายใหม่, หรือแค่ลองเทรนโมเดลใหม่โดยปรับค่า Training cycle กับ Learning rate)

ขั้นตอนที่ 4: ดีพลอยโมเดลและทดสอบ
ตอนนี้เราพร้อมดีพลอยโมเดลลง Arduino Nano 33 BLE Sense แล้ว คลิกที่ deploy your impulse เลือก Arduino Library แล้วกด Build ไฟล์ไลบรารี .ZIP จะถูกดาวน์โหลดมา จากนั้นเปิด Arduino IDE เพื่อเพิ่มไลบรารีนี้เข้าไป เสร็จแล้วหาโน้ตตัวอย่างได้ที่เมนู File > Examples > Smart_Bike_Suspension_inferencing อัพโหลดโค้ดลง Nano 33 BLE Sense ของคุณ เปิด Serial monitor แล้วลองขยับบอร์ดเพื่อจำลองการเคลื่อนไหวดู


ถ้าบอร์ด BLE Sense ตรวจจับการเคลื่อนไหวที่เราจำลองได้ถูกต้อง ก็ไปขั้นสุดท้ายได้เลย นั่นคือติดตั้งเซอร์โวและนำไปทดสอบกับช่วงล่างจักรยานจริงๆ
ขั้นตอนที่ 5: แก้ไขโค้ด, ติดตั้ง และทดสอบ
เราต้องมาแก้ไขไฟล์ตัวอย่างข้างบน (ที่มีโมเดลที่เทรนแล้วฝังอยู่) เพื่อแปลงผลลัพธ์ให้เป็นมุมการหมุนของเซอร์โวที่เราต้องการ ดังนั้น ถ้าตรวจจับได้ว่าเป็น idle หรือ smooth เซอร์โวจะหมุนปุ่มปรับช่วงล่างไปที่ตำแหน่งล็อค ถ้าตรวจจับได้ว่าเป็นพื้นถนนปกติหรือตอนวิ่งสปรินต์ เซอร์โวจะหมุนปุ่มไปที่ครึ่งทาง (medium) และถ้าตรวจจับได้ว่าเป็นพื้นขรุขระมากๆ เซอร์โวจะหมุนปุ่มเปิดเต็มที่เพื่อเพิ่มระยะยืดหยุ่นของช่วงล่างให้มากที่สุด ด้านล่างนี้คือโค้ด Arduino ที่ปรับแก้แล้ว สามารถอัพโหลดลง Nano 33 BLE Sense ได้เลย (โค้ด Arduino แนบไว้ในส่วน Code แล้ว)
วิศวกรรมและการนำไปใช้
- การเก็บข้อมูลผ่าน BLE:
- โปรเจคนี้ใช้ Arduino Science Journal ผ่าน Bluetooth Low Energy (BLE) ให้นักปั่นสามารถมองเห็นค่าจาก "Ground Truth" ของตัววัดความเร่งระหว่างฝึกซ้อมได้แบบเรียลไทม์ รับประกันว่าข้อมูลที่ติดป้าย (labeled data) นั้นตรงกับความรู้สึกจากภูมิประเทศจริงเป๊ะๆ
- การรักษาเสถียรภาพของไฟเลี้ยง (Power Rail Stabilization):
- เพื่อป้องกันปัญหา NNR (Neural Network Reset) ที่เกิดจากสัญญาณรบกวนของมอเตอร์ เราใช้แบตเตอรี่ลิเธียมไอออน 1AH ต่อผ่าน บูสเตอร์ 5V ตัวนี้จะคอยจ่ายไฟลอจิกที่เสถียรให้กับบอร์ด Nano 33 BLE Sense พร้อมกับจ่ายกระแสสูงสุดที่เซอร์โวมอเตอร์ต้องการตอนเปลี่ยนการตั้งวาล์วแบบฉับไว
- ระบบแมคคาทรอนิกส์สำหรับการหน่วงแบบแอคทีฟ (Active Damping Mechatronics):
- การขับเคลื่อนจากเซอร์โวไปยังวาล์ว: ผลลัพธ์จากโมเดล TinyML จะถูกแมปไปสั่งการเซอร์โวขนาดเล็ก ซึ่งเชื่อมต่อกับวาล์วปรับการอัด (compression valve) ของส้อมกันสะเทือนผ่าน ชุดเกียร์ที่พิมพ์จากเครื่อง 3D พริ้นเตอร์ แบบสั่งทำ
- ความน่าจะเป็นสูงว่าเป็นทางขรุขระ: เปิดวาล์วเต็มที่ (ระยะยวบสูงสุด)
- ความน่าจะเป็นสูงว่าเป็นทางเรียบ/กำลังเร่ง: ล็อก (ประสิทธิภาพการปั่นสูงสุด)
- ภูมิประเทศผสมผสาน: ระดับการหน่วงปานกลาง
- การขับเคลื่อนจากเซอร์โวไปยังวาล์ว: ผลลัพธ์จากโมเดล TinyML จะถูกแมปไปสั่งการเซอร์โวขนาดเล็ก ซึ่งเชื่อมต่อกับวาล์วปรับการอัด (compression valve) ของส้อมกันสะเทือนผ่าน ชุดเกียร์ที่พิมพ์จากเครื่อง 3D พริ้นเตอร์ แบบสั่งทำ
- ความแข็งแรงทางกล (Mechanical Integrity):
- แผ่นยึดและชุดเกียร์ที่พิมพ์จากเครื่อง 3D พริ้นเตอร์ถูกออกแบบมาให้ทนต่อแรงสั่นสะเทือนสุดโหดจากการขี่จักรยานออฟโรด การออกแบบคำนึงถึงขีดจำกัด "Hard-Stop" ของส้อมกันสะเทือนด้วย ป้องกันไม่ให้เซอร์โวทำลายเกียร์ตอนได้รับคำสั่งล็อก
สำหรับการติดตั้งชิ้นส่วนเซอร์โวบนส้อมจักรยาน เราต้องออกแบบแผ่นยึดเซอร์โวพร้อมชุดเกียร์ที่เชื่อมกับปุ่มปรับด้านบนของส้อม (อาจต้องปรับดีไซน์สำหรับส้อมยี่ห้อและรุ่นต่างๆ) <ไฟล์ดีไซน์ 3D แนบอยู่ในส่วนอื่น>
เราได้ทดสอบระบบนี้ในสนามจริงแล้ว และทำให้ไอเดีย "ส้อมอัจฉริยะ" เกิดขึ้นจริง โปรเจคนี้ยังมีศักยภาพที่จะต่อยอดการใช้งานในกีฬาจักรยานประเภทต่างๆ เช่น MTB (ครอสคันทรี, เทรล, ดาวน์ฮิล) ที่มีสภาพเส้นทางซับซ้อนทั้งปีนเขา กระโดด ดรอป และเข้าโค้ง โดยสามารถเก็บข้อมูลจากการทดสอบร่วมกับนักกีฬามืออาชีพได้ ทำให้การตั้งค่าส้อมที่ได้ออกมามีความแม่นยำ ขยายผลได้ง่าย และ "ฉลาด" ขึ้นอีก
จัดไปวัยรุ่น! ดูคลิปทดสอบในสนามจริงกัน:
สรุป
AI-Ride เป็นการพิสูจน์ว่า AI ไม่ได้อยู่แค่ในศูนย์ข้อมูล แต่มันควรอยู่บนเส้นทางลุยด้วย สู้งานนะน้อง! ด้วยการผสานศาสตร์ของ การวิเคราะห์ข้อมูลความเฉื่อย (Inertial Forensics) และ การขับเคลื่อนด้วยหุ่นยนต์ (Robotic Actuation) เข้าด้วยกัน โปรเจคนี้ได้สร้างกรอบการทำงานระดับมืออาชีพให้กับ "เครื่องจักรที่คิดเป็น" รุ่นต่อไปในวงการกีฬาและการเคลื่อนที่