Sistema de Telemetría para Motocicletas en Tiempo Real con Arduino, GPS y Sensores
Componentes y Suministros
| Arduino UNO | × | 1 |
| Módulo GPS u-blox NEO-7M | × | 1 |
| Sensor de Temperatura LM35DT | × | 1 |
| Sensor Infrarrojo TMP006 (SparkFun) | × | 1 |
| Módulo Bluetooth HC-05 | × | 1 |
| Sensor Ultrasónico HC-SR04 (Genérico) | × | 2 |
| Acelerómetro ADXL345 (SparkFun) | × | 1 |
| Ducati Monster 695 (Vehículo de pruebas) | × | 1 |
| ProtoShield Kit (SparkFun) | × | 1 |
| Protoboard Mediana | × | 1 |
| Batería 9V | × | 1 |
| Conector Batería 9V | × | 1 |
| Cables Dupont | × | 1 |
| Lumia 650 (Windows Phone) | × | 1 |
Aplicaciones y Servicios Online
- Microsoft Azure (IoT Hub, Stream Analytics, SQL Database, Web App, Machine Learning)
- Microsoft Visual Studio 2015
- Microsoft Blend
- Arduino IDE
- GIMP
- Fritzing
Sobre el Proyecto
Este proyecto combina la pasión por las motocicletas con el desarrollo en Arduino, creando un sistema de telemetría inspirado en los datos que se muestran en las retransmisiones de MotoGP. El objetivo es desarrollar un sistema replicable que cualquier entusiasta pueda instalar en su motocicleta.
La Idea
El sistema captura los siguientes parámetros de conducción:
- Velocidad [km/h]
- Posición GPS (Latitud/Longitud)
- Información de satélites (Número, HDOP)
- Altitud [metros]
- Ángulo de Inclinación (Lean Angle)
- Ángulo de Caballito (Wheelie Angle)
- Aceleración G en 3 ejes [m/s²]
- Temperatura Externa [°C]
- Temperatura Neumático Trasero [°C]
- Recorrido Suspensión Delantera [cm]
- Recorrido Suspensión Trasera [cm]
Arquitectura del Sistema
El flujo de trabajo consta de 7 fases:
- Fase 1: La unidad de control (en la moto) adquiere datos de telemetría ~2 veces/segundo.
- Fase 2: Los datos se envían por Bluetooth (HC-05) desde Arduino al Windows Phone.
- Fase 3: La app UWP muestra los datos y los envía por 3G/4G a Azure IoT Hub.
- Fase 4: Un trabajo de Stream Analytics recibe los datos y los guarda en SQL Azure.
- Fase 5: Una Web App en Azure muestra la telemetría en tiempo real usando Entity Framework.
- Fase 6: La Web App autentica usuarios y muestra gráficos con todos los datos.
- Fase 7: Machine Learning procesa los datos para analizar el "estilo de conducción" y sugerir mejoras.
Configuración Hardware
PASO 1 - Conectividad Bluetooth
Se usa la librería SoftwareSerial para comunicar el HC-05 con Arduino. El módulo se configura como esclavo y se cambia su nombre por defecto.
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX, TX
void setup() { BTSerial.begin(9600); }
void loop() { BTSerial.print("Datos telemetría"); }
PASO 2 - Comunicación GPS
El módulo NEO-7M (56 canales, 10Hz) se comunica vía SoftwareSerial y la librería TinyGPS++.
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
SoftwareSerial ss(12, 13);
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();
}
}
}
}
PASO 3 - Acelerómetro ADXL345
Mide aceleración en 3 ejes (±16g, 13-bit) vía I2C/SPI. Calcula ángulos de inclinación (roll) y caballito (pitch) tras calibrar el "punto cero" en el primer bucle.
// Calibración primer bucle
if (i == 0) { refXg = Xg; refYg = Yg; refZg = Zg; i = 1; }
Xg -= refXg; Yg -= refYg; Zg = Zg - refZg + 1;
// Cálculo ángulos
roll = -(atan2(-fYg, fZg) * 180.0) / M_PI;
pitch = (atan2(fXg, sqrt(fYg*fYg + fZg*fZg)) * 180.0) / M_PI;
Ejes: Z = gravedad, Y = dirección marcha, X = movimiento lateral.
PASO 4 - Temperatura Neumático (TMP006)
Sensor infrarrojo sin contacto (4-16 µm). Distancia recomendada: ≤ mitad del radio del ángulo sólido. Para neumático 160mm → distancia ≤ 40mm. Comunicación I2C con librería Adafruit_TMP006.
#include "Adafruit_TMP006.h"
Adafruit_TMP006 tmp006;
void loop() {
float objTemp = tmp006.readObjTempC(); // Temp objeto (neumático)
float dieTemp = tmp006.readDieTempC(); // Temp sensor (ambiente)
}
PASO 5 - Temperatura Externa (LM35)
Salida lineal 10mV/°C. Lectura en entrada analógica A1.
int sensor = analogRead(A1);
float millivolts = (sensor / 1023.0) * 5000;
float celsius = millivolts / 10;
PASO 6 - Posición Ultrasónica (HC-SR04)
Mide recorrido de suspensiones. Velocidad sonido ~340 m/s. Fórmula: S = 0.034 × t / 2 (t en µs, S en cm). Se usa librería NewPing para mejor rendimiento.
#include <NewPing.h>
NewPing sonar(2, 3, 200); // trigger, echo, max_dist_cm
int ReadPositionPing() {
unsigned int uS = sonar.ping();
return sonar.convert_cm(uS);
}
Software UWP (Windows 10 Mobile)
Aplicación Universal Windows que recibe datos por Bluetooth, los valida (marcadores $START / $END), los parsea (separador |), muestra en UI (velocidad, ángulos, GPS, temperaturas, suspensiones) y envía a IoT Hub.
Ejemplo trama: $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|
Despliegue en Windows 10 Mobile
- Activar "Modo Desarrollador" en el móvil (Actualización y Seguridad → Para desarrolladores).
- Conectar por USB, obtener PIN.
- En Visual Studio: Proyecto → Tienda → Crear paquetes de aplicación → No (paquete local) → Plataforma ARM → Crear.
- Usar
WinAppDeployCmd.exedesdeC:\Program Files (x86)\Windows Kits\10\bin\x86\:WinAppDeployCmd install -file "ruta\archivo.appxbundle" -ip 127.0.0.1 -pin TU_PIN
Configuración en Azure
1. IoT Hub
Crear IoT Hub → Anotar Hostname y Connection String (política iothubowner).
2. Stream Analytics Job
Entrada: IoT Hub. Salida: Tabla SQL Azure. Consulta SQL para insertar datos.
3. Web App + SQL Azure
Crear "Web App + SQL" → Configurar plan (F1 gratuito) → Credenciales admin SQL → Vincular Stream Analytics a la BD.
4. Device ID
App Consola con paquete Microsoft.Azure.Devices para registrar dispositivo (myDucatiMonsterDevice) y obtener clave simétrica.
Aplicación Web
Dashboard ASP.NET responsive (Entity Framework → SQL Azure). Muestra gráficos de telemetría. Demo: usuario demo / contraseña demo. Dominio personalizable en Azure.
Montaje en Ducati Monster 695
- Unidad central (Arduino, GPS, ADXL345, LM35) detrás del asiento.
- TMP006 en soporte tras rueda trasera (distancia ~40mm).
- HC-SR04 frontal bajo faro (mide horquilla).
- HC-SR04 trasero bajo asiento (mide amortiguador trasero).
Machine Learning (Azure ML Studio)
Experimentos para correlacionar telemetría y estilo de conducción.
- Importar datos desde SQL Azure (convertir a float, filtrar outliers).
Split Datapara entrenar/validar.Train Modelcon algoritmo Two-Class Decision Forest (mejor precisión ~1.0).Score Model+Evaluate Modelpara métricas (Accuracy, Precision, Recall, F1, AUC).- Experimento predictivo → Multiclass Decision Forest → Servicio Web predictivo.
- Clasificaciones: "SAFE DRIVING", "HIGH STRESS HIGH SPEED", etc.
Hallazgos: Preferencia inclinación derecha; ángulo inclinación independiente de temp. neumático/velocidad; caballito (wheelie) aparece con temp. neumático > 35°C.
Conclusiones y Futuro
- Prototipo funcional < $60 usando Azure + Arduino.
- Mejoras: buffer offline en app, versión Xamarin (Android/iOS), sensores más precisos, unidad más compacta (Arduino MKR1000), red social para compartir rutas/alertas, integrar ML con Stream Analytics.
- Nueva rama: IoT Hub → Event Hub (velocidad > 100 km/h) → Cloud Service → ML Predictivo → Score → IoT Hub → Dispositivo (alerta tiempo real).
Código
Esquemáticos
Diagrama de circuito del sistema de telemetría (archivo MotorbikeProject.fzz para Fritzing).
Proceso de manufactura
- Sensor Telemetry 2.0.1 – Monitorización Avanzada de Temperatura con Azure IoT Hub
- Sistema de Evitación de Obstáculos con IA y Arduino: Aprendizaje por Refuerzo Q-Learning
- Pantalla LED Interactiva con Giroscopio, Anillo NeoPixel y Arduino
- Mando USB para juegos DIY con Arduino – Construye tu propio gamepad de alto rendimiento
- Disfraz de nube DIY: Tira LED, Arduino Nano y componentes SparkFun
- Robot industrial seguidor de línea para transporte de materiales
- Pixie: Reloj de pulsera NeoPixel basado en Arduino – Elegante reloj LED DIY
- Botella de agua inteligente con Arduino: Monitorización en tiempo real y alertas
- Teatro de Sombras Navideño DIY: Espectáculo de Luces con Arduino y Tira LED Direccionable
- Sistema Portátil de Vigilancia Remota con Cámara y Robot Móvil
- Guante Inteligente de Gestos a Texto para Lenguaje de Signos