Real‑Time Motorfiets Telemetrie Systeem met Arduino, GPS en Sensoren
Onderdelen en benodigdheden
| Onderdeel | Aantal | Opmerking |
|---|---|---|
| Arduino UNO | 1 | |
| u‑blox GPS NEO‑7M | 1 | |
| Microchip LM35DT Temperatuursensor | 1 | |
| SparkFun TMP006 Infrarood Temperatuur Breakout | 1 | |
| HC‑05 Bluetooth Module | 1 | |
| Ultrasoon Afstandssensor HC‑SR04 | 2 | Voor voor/achter vering |
| SparkFun ADXL345 Versnellingsmeter | 1 | |
| Ducati Monster (test motorfiets) | 1 | |
| SparkFun ProtoShield Kit | 1 | |
| Solderless Breadboard Half Size | 1 | |
| 9V Batterij | 1 | |
| 9V Batterij Clip | 1 | |
| Jumper wires (generiek) | 1 set | |
| Lumia 650 (Windows Phone voor UWP app) | 1 |
Apps en online services
- Microsoft Azure (IoT Hub, Stream Analytics, SQL Database, Web App, Machine Learning)
- Microsoft Visual Studio 2015
- Microsoft Blend
- Arduino IDE
- GIMP (afbeeldingen)
- Fritzing (schema's)
Over dit project
Ik combineer mijn passie voor motorfietsen met Arduino. Geïnspireerd door MotoGP telemetrie op TV, bouw ik een eigen telemetriesysteem op basis van Arduino en Azure, herhaalbaar voor elke motorfietsliefhebber.
Het Idee
Het systeem meet realtime:
- Snelheid [km/h]
- GPS Positie (Breedte/Lengtegraad)
- Satellietinfo (aantal, HDOP)
- Hoogte [m]
- Kantelhoek (Lean Angle)
- Wielie‑hoek (Wheelie Angle)
- G‑versnelling 3 assen [m/s²]
- Omgevingstemperatuur [°C]
- Achterbandtemperatuur [°C]
- Voorste veringuitrek [cm]
- Achterste veringuitrek [cm]
Hardware: Arduino Uno R3, sensoren, UWP app op Windows Phone, Azure services.
Fase 1 – Data acquisitie (≈2 Hz) door controle‑unit op motorfiets.
Fase 2 – Bluetooth verzending naar Windows Phone.
Fase 3 – Weergave op telefoon + verzending via 3G/4G naar Azure IoT Hub.
Fase 4 – Stream Analytics Job slaat data op in SQL Azure.
Fase 5 – Web App toont telemetrie realtime (Entity Framework).
Fase 6 – Web App met authenticatie, grafieken.
Fase 7 – Machine Learning op SQL data voor “rijstijl” analyse.
Hardware Opbouw
- Arduino Uno R3
- 2x HC‑SR04 (voor/achter vering)
- TMP006 (bandtemperatuur, contactloos)
- GPS NEO‑7M (positie, snelheid, hoogte)
- ADXL345 (3‑as versnelling, kantel/wielie hoek)
- LM35DT (omgevingstemperatuur)
- HC‑05 Bluetooth (Arduino ↔ Windows Phone)
- Voeding (batterij/powerbank)
Stap 1 – Bluetooth Connectiviteit
SoftwareSerial library voor HC‑05. Class‑2 module, Serial Port Profile, Master/Slave configureerbaar.
Standaard naam “HC‑05” aangepast. Code fragment:
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX, TX
void setup() {
BTSerial.begin(9600);
}
void loop() {
BTSerial.print("Hello Hackster");
}
Stap 2 – GPS Communicatie
GPS NEO‑7M: 56 kanalen, 10Hz updates. Communicatie via SoftwareSerial + TinyGPS++ library.
#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();
}
}
}
}
Stap 3 – Versnellingsmeter (ADXL345)
ADXL345: 3‑as, 13‑bit, ±16g, SPI/I2C. Library ADXL345.h. Kalibratie essentieel: eerste meting als nulreferentie (offset).
if (i == 0) { refXg = Xg; refYg = Yg; refZg = Zg; i = 1; }
Xg -= refXg; Yg -= refYg; Zg = Zg - refZg + 1;
Kantelhoek (Roll) & Wieliehoek (Pitch):
roll = -(atan2(-fYg, fZg) * 180.0) / M_PI;
pitch = (atan2(fXg, sqrt(fYg*fYg + fZg*fZg)) * 180.0) / M_PI;
Assen: Z = zwaartekracht, Y = rijrichting, X = lateraal.
Stap 4 – Bandtemperatuur (TMP006)
TMP006 meet infrarood (4–16 µm) contactloos. Afstand sensor–object: max halve straal van het object. Bandbreedte 160mm → straal 80mm → max afstand 40mm.
Communicatie: SoftwareSerial + Adafruit_TMP006.h.
Adafruit_TMP006 tmp006;
float objt = tmp006.readObjTempC(); // Bandtemperatuur
float diet = tmp006.readDieTempC(); // Sensortemperatuur (omgeving)
Stap 5 – Omgevingstemperatuur (LM35)
LM35: 10mV/°C. Uitlezen via analoge ingang.
int TempExtPin = A1;
float millivolts = (analogRead(TempExtPin) / 1023.0) * 5000;
float celsius = millivolts / 10;
Stap 6 – Ultrasoon Positie (Vering)
HC‑SR04 meet geluidstijd. Snelheid ~340 m/s. Afstand (cm) = 0,017 × duur (µs). Betere prestaties met NewPing.h library.
#include <NewPing.h>
int triggerPort = 2, echoPort = 3;
NewPing sonar(triggerPort, echoPort, 200);
int ReadPositionPing() {
unsigned int uS = sonar.ping();
return sonar.convert_cm(uS);
}
De UWP Software (Windows Phone App)
UI verbindt via Bluetooth met controle‑unit, toont data, stuurt naar IoT Hub.
Seriële communicatie: strings met $START en $END markers, velden gescheiden door |.
Voorbeeld string:
$START|40.909409|N|9.520008|E|8|2|2016|15:46:42|0.09|0.000000|0|0|-0.21|0.00|0.00|-0.02|0.98|-|0.00|35.19|29.58|16|10|$END|
Veld mapping (na split op |):
| Positie | Betekenis |
|---|---|
| 0 | START Marker |
| 1 | Latitude |
| 2 | N (Noord) |
| 3 | Longitude |
| 4 | E (Oost) |
| 5 | Maand |
| 6 | Dag |
| 7 | Jaar |
| 8 | Tijd (hh:mm:ss) |
| 9 | Snelheid (km/h) |
| 10 | Hoogte (m) |
| 11 | Satellieten (aantal) |
| 12 | HDOP |
| 13 | Roll (Kantelhoek) |
| 14 | Pitch (Wieliehoek) |
| 15 | Xg |
| 16 | Yg |
| 17 | Zg |
| 18 | Audio (optioneel, uitgeschakeld) |
| 19 | Afstand (m) |
| 20 | Temperatuur (LM35, omgeving) |
| 21 | Bandtemperatuur (TMP006) |
| 22 | Voorste vering (cm) |
| 23 | Achterste vering (cm) |
| 24 | END Marker |
UWP app: links Bluetooth connectie, midden 3 meters (snelheid, kantel, wielie), rechts GPS, temperaturen, vering.
Deployen op Windows 10 Mobile
- Telefoon in Developer Mode (Update & Security > For Developers). USB verbinden, PIN noteren.
- Visual Studio: Project > Store > Create App Packages.
- Wizard: “No” voor Store, ARM platform, Create.
- Lokaal pad naar .appxbundle noteren.
- Command Prompt:
cd C:\Program Files (x86)\Windows Kits\10\bin\x86\
WinAppDeployCmd install -file "pad\naar\appxbundle" -ip 127.0.0.1 -pin PINCODE - App geïnstalleerd, “Pin to Start” mogelijk.
Azure Configuratie
Stap 1 – IoT Hub aanmaken
Azure Portal > New > Internet of Things > IoT Hub. Naam, resource group, prijslaag (F1 gratis). Na deploy: Hostname en Connection String (iothubowner policy) noteren.
Stap 2 – Stream Analytics Job
New > IoT > Stream Analytics Job. Input: IoT Hub. Output: SQL Azure tabel (volgende stap). Query: SELECT * INTO SqlAzureMyTelemetry FROM MyTelemetryInputHub. Job starten.
Stap 3 – Web App + SQL Azure
New > Web + Mobile > Web App + SQL. Configureer: App Naam, Resource Group, App Service Plan (F1 gratis), SQL Database (naam, prijslaag, server, admin credentials).
Stap 4 – Device ID voor IoT Hub
Console App in Visual Studio, NuGet package Microsoft.Azure.Devices. Code om device identity aan te maken (bijv. myDucatiMonsterDevice). Genereert device key.
Web Applicatie
Responsive ASP.NET dashboard met Entity Framework data uit SQL Azure. Demo account: User demo / Pass demo.
Mobiele versie werkt ook. Domeinnaam aanpassen via Azure: Custom Domains > Buy Domains.
Ducati Monster Bedrading
Foto’s van de gemonteerde hardware: controle‑unit achter de zit, GPS/accelerometer/tempsensor, TMP006 bracket achter achterband, HC‑SR04 onder koplicht (voorvering), HC‑SR04 onder zit (achtervering).
Machine Learning
Doel: correlaties in telemetrie ontdekken om rijstijl te verbeteren. Data niet perfect vergelijkbaar (verschillende routes, verkeer). Ideaal: circuit met constante omstandigheden.
Azure ML Studio (studio.azureml.net):
- Nieuw Experiment > Data importeren uit SQL Azure (query filtert geldige records).
- Split Data: train/test.
- Train Model: doelveld kiezen, algoritme selecteren (Two‑class Decision Forest gaf beste Accuracy/Precision/Recall/F1 ≈ 1).
- Score Model + Evaluate Model voor validatie.
Predictive Experiment: omzetten naar Web Service. Multiclass Decision Forest voor classificatie (bijv. “SAFE DRIVING”, “HIGH STRESS HIGH SPEED”). Test met fake data → resultaat “SAFE DRIVING”.
Inzichten: ik kantel liever rechts, kantelhoek onafhankelijk van bandtemp/snelheid (goede banden), wielie voorkeur boven 35°C bandtemp.
Eindconclusies
Project dekt veel terrein: hardware <$60, Azure services, Machine Learning. Goed startpunt voor toekomstige uitbreidingen.
Toekomstige verbeteringen:
- Buffering in UWP app bij geen 3G/4G.
- Xamarin app voor Android/iOS.
- Preciezere sensoren.
- Kleinere unit (MKR1000).
- Sociale WebApp voor delen routes/telemetrie.
- Stream Analytics als ML datasource.
Nieuwe workflow tak: IoT Hub → Event Hub (snelheid >100 km/h) → Cloud Service → ML Predictive Service → Score terug naar IoT Hub → Device (Windows Phone).
Veel plezier! Vragen? Neem contact op.
Code
Schema's
Schakeling van het telemetriesysteem. On‑board schema + Fritzing bestand.
MotorbikeProject.fzz
Productieproces
- Sensor Telemetrie 2.0.1 – Geavanceerde Temperatuurbewaking met Azure IoT Hub
- AI-gestuurd obstakelvermijdingssysteem met Arduino en ultrasone sensoren
- Interactieve gyroscoop LED-display met NeoPixel-ring en Arduino
- DIY Arduino USB Gaming Controller – Bouw Je Eigen High-Performance Gamepad
- DIY Wolk Kostuum: LED-strip, Arduino Nano & SparkFun Onderdelen
- Industriële Lijnvolgende Robot voor Materiaaltransport
- Pixie: Een Arduino-gebaseerde NeoPixel-polshorloge – Modern, DIY LED-tijdstuk
- Slimme Arduino-waterfles – realtime monitoring & herinneringen
- DIY Kerst Schaduwtheater: Bouw een lichtshow met Arduino 101 en adresseerbare LED-strip
- Draagbare Remote Surveillance Camera Robot
- Slimme gebaar-naar-tekst handskoen voor gebarentaal