สร้างระบบ Telemetry เก็บข้อมูลรถมอเตอร์ไซค์สุดล้ำด้วย Arduino, Azure และ Machine Learning

Motorbike Telemetry Project Cover
ระบบ Telemetry อัจฉริยะบนมอเตอร์ไซค์ Ducati Monster เชื่อมต่อข้อมูลขึ้น Cloud แบบ Real-time

สวัสดีชาว Maker และไบค์เกอร์ทุกคนครับ! คุณเคยดูการแข่งรถ MotoGP แล้วทึ่งกับภาพกราฟิกกราฟข้อมูล Telemetry ที่ขึ้นบนหน้าจอไหมครับ? ทั้งความเร็ว องศาการเอียงรถ การเบรก ทุกอย่างถูกส่งมาให้ดูแบบสดๆ

วันนี้เราจะพาคุณไปสานฝันนั้นให้เป็นจริง! ด้วยการนำบอร์ดลูกรักอย่าง Arduino มาจับคู่กับแอป UWP (Universal Windows Platform) ส่งข้อมูลขึ้นคลาวด์ Microsoft Azure และนำไปวิเคราะห์สไตล์การขับขี่ด้วย Machine Learning! โปรเจกต์นี้จะเก็บข้อมูลละเอียดยิบ ทั้งความเร็ว, พิกัด GPS, ความสูง, องศาการเอียงรถ (Lean Angle), องศายกล้อ (Wheelie Angle), แรงจี (G-force), อุณหภูมิยาง, และระยะยุบตัวของโช้คหน้า-หลัง!

Workflow การทำงานของระบบ (7 Phases) 🔄

โปรเจกต์สเกลใหญ่แบบนี้ เราแบ่งการทำงานออกเป็น 7 เฟสครับ:

  • Phase 1: ข้อมูล Telemetry ทั้งหมดจะถูกเก็บผ่านกล่องควบคุม (Arduino) บนรถมอเตอร์ไซค์ ประมาณ 2 ครั้งต่อวินาที
  • Phase 2: ข้อมูลถูกส่งผ่าน Bluetooth จาก Arduino ไปยังมือถือ (Windows Phone)
  • Phase 3: ข้อมูลแสดงผลบนมือถือ และส่งผ่านเน็ต 3G/4G ขึ้นสู่ Azure IoT HUB
  • Phase 4: Azure Stream Analytics รับข้อมูลจาก IoT HUB แล้วบันทึกลง SQL Azure Database
  • Phase 5-6: WebApp ดึงข้อมูลจากฐานข้อมูลมาแสดงเป็นกราฟสวยงามบนหน้าเว็บแบบ Real-time
  • Phase 7: ข้อมูลทั้งหมดถูกนำไปเข้ากระบวนการ Machine Learning เพื่อวิเคราะห์ "สไตล์การขับขี่" ของเรา เพื่อปรับปรุงสมรรถนะให้ดีขึ้นครับ!

ฮาร์ดแวร์ที่ต้องใช้ (Hardware Setup) 🛠️

  • Arduino Uno R3 เป็นหัวใจหลัก
  • HC-SR04 (Ultrasonic) x2: ใช้วัดระยะการยุบตัวของโช้คหน้าและหลัง
  • TMP006 (Infrared Temp): วัดอุณหภูมิยางแบบไร้สัมผัส
  • GPS-NEO7M: เก็บพิกัด ความเร็ว ความสูง
  • ADXL345: วัดความเร่ง 3 แกน เพื่อคำนวณองศาเอียงและองศายกล้อ
  • LM35DT: วัดอุณหภูมิภายนอก
  • HC-05: โมดูล Bluetooth สื่อสารกับมือถือ
  • แบตเตอรี่ 9V หรือ Power Bank

💡 Maker's Tip: โปรเจกต์นี้ใช้เซนเซอร์หลากหลายรูปแบบมาก เป็นการฝึกทักษะอ่านค่าและการสื่อสารข้อมูล (I2C, Serial) ที่ดีเยี่ยมครับ!

หากเพื่อนๆ คนไหนกำลังมองหา บอร์ด Arduino, โมดูล GPS, เซนเซอร์ Ultrasonic, หรือโมดูล Bluetooth เพื่อไปลุยโปรเจกต์ Telemetry แบบนี้ แวะมาช้อปปิ้งของแท้พร้อมส่งได้ที่ Globalbyte เลยครับ! ของครบ จบในที่เดียว

เจาะลึกการต่อเซนเซอร์และโค้ด (Step-by-Step) 💻

STEP 1 - การเชื่อมต่อ Bluetooth (HC-05)

เราใช้ไลบรารี SoftwareSerial เพื่อคุยกับ HC-05 หากต้องการเปลี่ยนชื่อบลูทูธให้เท่ขึ้น สามารถใช้ AT Commands ตั้งค่าได้เลยครับ

Arduino - Bluetooth
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10,11); // RX-TX

void setup(){
  BTSerial.begin(9600);
}
// การส่งข้อมูล: BTSerial.print("Hello Hackster");

STEP 2 - การอ่านข้อมูล GPS (NEO7M)

ใช้ SoftwareSerial คู่กับไลบรารีสุดเทพอย่าง TinyGPS++ เพื่อดึงพิกัดออกมาง่ายๆ

Arduino - GPS
#include <SoftwareSerial.h>
#include <TinyGPS++.h>

SoftwareSerial ss(12,13); // RX-TX
TinyGPSPlus gps;

void setup(){
  ss.begin(9600);
}

void loop(){
  while(ss.available()>0){
    if(gps.encode(ss.read())){
      if(gps.location.isValid()){
        double lat=gps.location.lat();
        double lon=gps.location.lng();    
      }
    }
  }
}

STEP 3 - อ่านความเร่ง 3 แกนและองศาเอียง (ADXL345)

การจะรู้องศาเอียงรถได้ ต้องมีสมการคณิตศาสตร์นิดหน่อยครับ เราใช้ Roll (Lean Angle - องศาเอียง) และ Pitch (Wheelie - องศายกล้อ) โดยให้แกน Z เป็นแกนแรงโน้มถ่วงธรรมชาติ แกน Y เป็นทิศทางเดินรถ และแกน X เป็นการเคลื่อนที่ด้านข้าง (อย่าลืม Calibrate หาค่า Zero point ในลูปแรกก่อนลบออกจากค่าที่อ่านได้เสมอนะครับ)

Arduino - Accelerometer Math
// Roll & Pitch Equations
roll  = -(atan2(-fYg, fZg) * 180.0) / M_PI; 
pitch = (atan2(fXg, sqrt(fYg * fYg + fZg * fZg)) * 180.0) / M_PI;

STEP 4 & 5 - อุณหภูมิยาง (TMP006) และอุณหภูมิภายนอก (LM35)

การวัดอุณหภูมิยางแบบไม่ต้องแตะยาง เราใช้เซนเซอร์ IR อย่าง TMP006 โดยต้องวางห่างจากยางไม่เกินครึ่งหนึ่งของรัศมีวัตถุ (ตาม Datasheet) ส่วนอุณหภูมิแวดล้อมใช้ LM35 แบบง่ายๆ อ่านค่า Analog ออกมาแล้วหารด้วย 10 เพื่อแปลงเป็นองศาเซลเซียสได้เลย

STEP 6 - เช็คระยะยุบโช้คด้วย Ultrasonic (HC-SR04)

การเขียนโค้ดเช็ค Ultrasonic แบบทั่วไปอาจจะทำให้ระบบทำงานช้า (Blocking) เราจึงเลือกใช้ไลบรารี NewPing.h ที่มีประสิทธิภาพสูงกว่ามากครับ

MotoGP Telemetry Inspiration
แรงบันดาลใจจากภาพหน้าจอ Telemetry ของการแข่งรถ MotoGP
Hardware Architecture Hardware List HC-05 Bluetooth GPS-NEO7M ADXL345 Accelerometer Z Y X Axis Details TMP006 Infrared Temperature Distance Formula for TMP006 LM35 Temperature Sensor HC-SR04 Ultrasonic Ultrasonic Distance Logic

ซอฟต์แวร์บนมือถือ (UWP Application) 📱

ข้อมูลทั้งหมดที่ Arduino ยิงเข้ามาทางบลูทูธ จะถูกคั่นด้วยเครื่องหมาย "pipe" (|) และมี $START กับ $END ประกบหัวท้าย เพื่อให้แอปบนมือถือรู้ว่าเริ่ม/จบแพ็กเกจข้อมูลตรงไหน จากนั้นแอป (UWP - Universal Windows Platform) จะทำการแยกข้อมูล (Split) แล้วนำมาแสดงผลเป็นเกจวัดความเร็ว องศาเอียง และค่าอื่นๆ แบบสดๆ สวยงามเลยครับ!

สำหรับการ Deploy แอป UWP ลงบนมือถือ จะใช้เครื่องมือ WinAppDeployCmd.exe ผ่าน Command Prompt โดยต้องเปิดมือถือเป็น Developer Mode ก่อนครับ

Command Prompt - App Deploy
WinAppDeployCmd install -file "C:\path\to\your\app.appxbundle" -ip 127.0.0.1 -pin AAA123
String Protocol Format UWP Cross Platform Concept App Dashboard Mobile 1 App Dashboard Mobile 2 Developer Mode Windows 10 Create App Packages CMD WinAppDeploy

ยิงข้อมูลขึ้นคลาวด์ Microsoft Azure ☁️

ความเจ๋งยังไม่จบครับ! ข้อมูลจากมือถือจะถูกส่งขึ้น Azure IoT HUB จากนั้นจะใช้ Stream Analytics Job เพื่อดักจับและเขียนข้อมูลลงฐานข้อมูล SQL Azure Database

ในการทำให้มือถือเชื่อมกับ IoT Hub ได้ เราต้องเจเนอเรท DeviceId ก่อน ซึ่งสามารถเขียน C# Console App สั้นๆ เพื่อขอค่า Device Key ได้เลยครับ

C# - Device ID Generator
// Install-Package Microsoft.Azure.Devices
private async static Task AddDeviceAsync(){           
    string deviceId = "myDucatiMonsterDevice";
    Device device;
    try {
        device = await registryManager.AddDeviceAsync(new Device(deviceId));
    } catch (DeviceAlreadyExistsException) {
        device = await registryManager.GetDeviceAsync(deviceId);
    }
    Console.WriteLine("Generated device key: {0}", device.Authentication.SymmetricKey.PrimaryKey);
}

หลังจากเก็บข้อมูลลงฐานข้อมูลได้แล้ว ผู้พัฒนาได้สร้าง Web Application (ASP.NET) เพื่อแสดงผล Dashboard Telemetry แบบสดๆ ผ่านเบราว์เซอร์ ซึ่ง Responsive รองรับทั้ง PC, Tablet และ มือถือด้วยครับ!

IoT Hub Creation Stream Analytics Input WebApp and SQL Creation Stream Analytics Query Web App Dashboard Web App Mobile View

การติดตั้งบนรถ Ducati Monster ของจริง! 🏍️

ทฤษฎีพร้อม โค้ดพร้อม ก็ถึงเวลาลงสนามจริงครับ ผู้พัฒนาได้ยึดกล่องควบคุม Arduino ไว้ใต้เบาะหลัง , ติดเซนเซอร์วัดอุณหภูมิยางด้วย Bracket พิเศษที่ล้อหลัง , และติดเซนเซอร์ Ultrasonic ไว้ที่โช้คหน้า (ใต้ไฟหน้า) และโช้คหลัง (ใต้เบาะ) กลายเป็นรถมอเตอร์ไซค์ที่พร้อมเก็บข้อมูลแบบเรียลไทม์สมบูรณ์แบบ!

Ducati Monster Hardware mounted onboard Tyre Temp Sensor bracket Front Ultrasonic Sensor Back Ultrasonic Sensor Central unit under seat Finished Wiring

ปิดท้ายความเทพด้วย Machine Learning 🤖

เพื่อให้ข้อมูลมีประโยชน์สูงสุด ไม่ใช่แค่ดูเลขเฉยๆ โปรเจกต์นี้จึงดึงข้อมูลจาก SQL ไปวิเคราะห์ต่อใน Azure Machine Learning Studio เพื่อหาสไตล์การขับขี่ (Driving Style) และแนะนำให้คนขับรู้ว่าจังหวะไหนควรเพิ่มความเร็ว หรือช่วงไหนอันตราย

ขั้นตอนคือ การ Import Data → Split Data เพื่อแบ่งไป Train โมเดลส่วนหนึ่ง และเอาไป Evaluate (ทดสอบ) อีกส่วนหนึ่ง จากการทดลองพบว่า อัลกอริทึม Two-class decision forest ทำงานได้ดีที่สุด โดยดูจากค่าชี้วัดเหล่านี้:

  • Accuracy: ความแม่นยำรวมของโมเดล
  • Precision: สัดส่วนของผลบวกที่ทายถูกเทียบกับผลบวกที่ทายทั้งหมด
  • Recall: สัดส่วนความถูกต้องของข้อมูลทั้งหมด
  • F-score: ค่าเฉลี่ยน้ำหนักระหว่าง Precision และ Recall (ใกล้ 1 ยิ่งดี)
  • AUC: พื้นที่ใต้กราฟ (Area Under the Curve) ใช้เปรียบเทียบโมเดล

หลังจากเทรนเสร็จ ก็ทำการแปลงโมเดลนี้เป็น Predictive Web Service ซึ่งเราสามารถโยนข้อมูล Telemetry เข้าไปให้ระบบประเมินได้เลยว่า การขับขี่ ณ ตอนนั้นเป็น "SAFE DRIVING (ขับขี่ปลอดภัย)" หรือ "HIGH STRESS HIGH SPEED (อันตรายให้ลดความเร็ว)"

ผลพลอยได้คือ ผู้พัฒนาได้รู้ Insight ว่าเขามักจะเอียงรถไปทางขวามากกว่า และรถ Ducati คันนี้มักจะมีอาการยกล้อ (Wheelie) ตอนที่อุณหภูมิยางสูงกว่า 35°C ครับ! สุดยอดไปเลย!

Machine Learning First Experiment Model Evaluation Compare Predictive Experiment Layout Safe Driving Prediction Output Data Graph Roll vs Speed Future Work Diagram
ไอเดียการพัฒนาต่อยอด (Future Developments) ส่งคะแนนกลับมาเตือนบนมือถือ

สรุป & การต่อยอดในอนาคต (Conclusions) 💡

โปรเจกต์นี้นำเสนอเทคโนโลยีหลายด้านมากครับ ตั้งแต่ระดับฮาร์ดแวร์เซนเซอร์, แอปพลิเคชันมือถือ, คลาวด์เซอร์วิส ไปจนถึง AI Machine Learning ด้วยงบประมาณฮาร์ดแวร์เบื้องต้นไม่ถึง $60!

ในอนาคต ผู้พัฒนาวางแผนที่จะใช้บอร์ดรุ่นใหม่ๆ ที่มีขนาดเล็กลงอย่าง Arduino MKR1000 และพัฒนาระบบแจ้งเตือน "คะแนนการขับขี่" กลับมาโชว์บนหน้าจอมือถือแบบ Real-time (Feedback loop) ผ่าน IoT Hub ครับ รอติดตามชมเวอร์ชันต่อไปได้เลย!

อ้างอิงและเรียบเรียงข้อมูลจาก: Globalbyteshop Blog

แหล่งที่มาบทความต้นฉบับ: Hackster.io - My motorbike Telemetry

ซอร์สโค้ด Arduino: GitHub Repository

ซอร์สโค้ด UWP App (C#): GitHub Repository

ผังวงจร (Fritzing): Download Fritzing File

แนะนำการใช้ Machine Learning Predict: Microsoft Blog (Predict the future)

*คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากบทความเทคโนโลยีต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา การติดตั้งระบบไฟฟ้าและเซนเซอร์บนยานพาหนะจริงควรทำด้วยความระมัดระวังและคำนึงถึงความปลอดภัยในการขับขี่เป็นหลัก ข้อมูลสถิติของ Machine Learning ขึ้นอยู่กับปัจจัยหน้างาน กรุณาศึกษาโครงสร้างโค้ดและวงจรแบบเต็มได้ที่ เว็บไซต์ต้นฉบับ ก่อนนำไปทดลองใช้งาน

 

แท็ก


Blog posts

เข้าสู่ระบบ

ลืมรหัสผ่านใช่ไหม?

ยังไม่มีบัญชีใช่ไหม?
สร้างบัญชี