Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Компоненты и материалы

Arduino UNO × 1
GPS‑модуль u‑blox NEO‑7M × 1
Датчик температуры LM35DT × 1
ИК‑термометр TMP006 (SparkFun) × 1
Bluetooth‑модуль HC‑05 × 1
Ультразвуковые датчики HC‑SR04 × 2
Акселерометр ADXL345 (SparkFun) × 1
Мотоцикл Ducati Monster 695 (объект установки) × 1
SparkFun ProtoShield Kit × 1
Половинчатая макетная плата × 1
Крона 9 В + клемма × 1
Перемычки × 1
Смартфон Lumia 650 (Windows 10 Mobile) × 1

Приложения и сервисы

О проекте

Каждый новый проект — попытка совместить последние технологии с хобби. Здесь — страсть к мотоциклам и Arduino.

Идея

Всегда восхищался телеметрией MotoGP на ТВ. Решил построить свою систему на Arduino + Azure, легко воспроизводимую любым мотоциклистом.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Система собирает:

Железо: Arduino Uno R3, сенсоры, UWP‑приложение на Windows Phone, облако Azure.

Рабочий процесс:

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
  1. Фаза 1 — Бортовый блок (на мотоцикле) опрашивает датчики ~2 раза/сек.
  2. Фаза 2 — Данные по Bluetooth (HC‑05) уходят на Windows Phone.
  3. Фаза 3 — Телефон отображает данные и шлёт их 3G/4G в Azure IoT Hub.
  4. Фаза 4 — Stream Analytics Job в Azure пишет данные в SQL Azure.
  5. Фаза 5 — WebApp на Azure читает SQL и показывает телеметрию в реальном времени.
  6. Фаза 6 — WebApp с аутентификацией, графики (Entity Framework).
  7. Фаза 7 — Machine Learning обрабатывает накопленные данные, выявляет паттерны стиля вождения для рекомендаций по улучшению.

I Think IT'S PRETTY COOL!!! Приступим к описанию.

Аппаратная настройка

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Состав:

Шаг 1 — Bluetooth

Библиотека SoftwareSerial для UART на пинах 10/11. HC‑05 — Class 2, SPP, мастер/слейв.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Сменили имя устройства (было «HC‑05» — неэстетично).

#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10,11); // RX, TX
void setup() {
  BTSerial.begin(9600);
}
...
BTSerial.print("Hello Hackster");

Bluetooth готов — просто и надёжно.

Шаг 2 — GPS

Модуль NEO‑7M: 56 каналов, 10 Гц, низкое потребление.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Коммуникация через SoftwareSerial (пины 12/13) и библиотеку 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();
      }
    }
  }
}

Шаг 3 — Акселерометр ADXL345

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

ADXL345 — 3‑осевой, 13‑бит, до ±16 g, SPI/I2C. Библиотека ADXL345.h.

Важно: сырые данные не откалиброваны. Нужно задать нулевую точку (offset) в первом цикле:

if (i == 0) { refXg = Xg; refYg = Yg; refZg = Zg; i = 1; }
Xg -= refXg; Yg -= refYg; Zg = Zg - refZg + 1;

Углы крена (Roll) и тангажа (Pitch) из компонент g:

roll  = -(atan2(-fYg, fZg) * 180.0) / M_PI;   // Lean Angle
pitch =  (atan2(fXg, sqrt(fYg*fYg + fZg*fZg)) * 180.0) / M_PI; // Wheelie Angle

Оси: Z — гравитация, Y — движение вперёд, X — боковой скольжение.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
#include <Wire.h>
#include <ADXL345.h>
ADXL345 acc;
void setup() { acc.begin(); }
void loop() { double Xg,Yg,Zg; acc.read(&Xg,&Yg,&Zg); }

Шаг 4 — Температура шины (TMP006)

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

TMP006 — MEMS термопара, измеряет ИК‑излучение 4–16 мкм без контакта. I2C интерфейс.

Расположение: ширина шины 160 мм → радиус твёрдого угла 80 мм → рекомендуемое расстояние ≤40 мм (R/2).

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Код (SoftwareSerial + Adafruit_TMP006):

#include <SoftwareSerial.h>
#include "Adafruit_TMP006.h"
Adafruit_TMP006 tmp006;
void loop() {
  float objt = tmp006.readObjTempC();   // температура объекта (шина)
  float diet = tmp006.readDieTempC();   // температура датчика (воздух)
}

Шаг 5 — Внешняя температура (LM35)

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

LM35 — 10 мВ/°C, линейная зависимость. Чтение через АЦП:

int TempExtPin = A1;
float celsius = 0;
int sensor = analogRead(TempExtPin);
float millivolts = (sensor / 1023.0) * 5000;
celsius = millivolts / 10;

Шаг 6 — Ультразвуковые датчики (ход подвески)

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Скорость звука ~340 м/с. Формула: S = 0.034 × t / 2 (t в мкс, S в см).

Базовый код медленный. Используем библиотеку NewPing.h — быстрая и удобная.

#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);
}

UWP‑приложение (Windows 10 Mobile)

UI: слева — Bluetooth, центр — 3 шкалы (скорость, lean, wheelie), справа — GPS, температуры, подвеска.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Протокол: строка с маркерами $START|...|$END|, разделитель «|». Позиции полей:

  1. START
  2. Latitude
  3. N/S
  4. Longitude
  5. E/W
  6. Month
  7. Day
  8. Year
  9. Time hh:mm:ss
  10. Speed km/h
  11. Altitude m
  12. Satellites count
  13. HDOP
  14. Roll (lean)
  15. Pitch (wheelie)
  16. Xg
  17. Yg
  18. Zg
  19. Audio (disabled)
  20. Distance m
  21. Temp Ext (LM35)
  22. Temp Tyre (TMP006)
  23. Front shock cm
  24. Back shock cm
  25. END
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Развёртывание UWP на Windows 10 Mobile

  1. Телефон в «Режим разработчика» (Обновление и безопасность → Для разработчиков). USB → видимое подключение → PIN.
  2. В Visual Studio: Project → Store → Create App Packages.
  3. Wizard: No (локальный пакет) → ARM → Create.
  4. Получен .appxbundle. Деплой через WinAppDeployCmd.exe:
    WinAppDeployCmd install -file "путь_к_appxbundle" -ip 127.0.0.1 -pin AAA123
    (AAA123 — PIN с телефона).
  5. Приложение установлено, можно закрепить в старте.

Настройка Azure

Создаём: WebApp + SQL Azure, IoT Hub, Stream Analytics Job, Device ID.

  1. IoT Hub: New → IoT Hub → заполнить поля. Запомнить Hostname и Connection String (policy iothubowner).
  2. Stream Analytics: New → Stream Analytics Job. Input — IoT Hub, Output — таблица SQL Azure.
  3. WebApp + SQL: New → Web App + SQL. Настроить App Service Plan (F1 Free), SQL (admin credentials).
  4. Query Stream Analytics: SELECT * INTO SqlAzureMyTelemetry FROM MyTelemetryInputHub — запустить Job.
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Создание Device ID для Hub

Консольное приложение Visual Studio + NuGet Microsoft.Azure.Devices:

class Program {
  static RegistryManager registryManager;
  static string connectionString = "xxxxxxxxxxxxxx";
  static void Main(string[] args) {
    registryManager = RegistryManager.CreateFromConnectionString(connectionString);
    AddDeviceAsync().Wait(); Console.ReadLine();
  }
  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);
  }
}

Запуск (F5) → получаем ключ устройства.

Веб‑приложение (ASP.NET)

Дашборд с телеметрией, данные через Entity Framework из SQL Azure.

Демо‑доступ для Hackster: User: demo / Pass: demo

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Мобильная версия:

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Домен бесплатного tier: <name>.azurewebsites.net. Свой домен: Dashboard → Custom domains and SSL → Buy domains.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Монтаж на Ducati Monster 695

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Фото бортового блока:

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Кронштейн TMP006 за задним колесом:

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

HC‑SR04 под фарой (передняя вилка):

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

HC‑SR04 под сиденьем (задний амортизатор):

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Центральный блок (Arduino, GPS, ADXL345, LM35) за сиденьем:

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Итоговый вид:

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Machine Learning в Azure

Поиск корреляций телеметрии для улучшения стиля вождения. Данные неоднородны (разные маршруты, трафик) — идеально на трассе.

Azure ML Studio: studio.azureml.net → вход Azure → Studio.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
  1. Experiments → NEW → Import Data из SQL Azure.
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Данные в БД — varchar, нужны float + фильтр плохих записей:

select CAST(speed as float) _speed, CAST(roll as float) _roll, CAST(pitch as float) _pitch,
CAST(Xg as float) _Xg, CAST(Yg as float) _Yg, CAST(Zg as float) _Zg,
CAST(TempExt as float) _TempExt, CAST(TempTyre as float) _TempTyre,
CAST(FrontAbsorber as float) _FrontAbsorber, CAST(BackAbsorber as float) _BackAbsorber
from mytelemetry
where CAST(speed as float) >3
  and CAST(FrontAbsorber as float)>0
  and CAST(BackAbsorber as float)>0
  and CAST(roll as float)<60 and CAST(roll as float)>-60
  1. Split Data — часть на Train, часть на Test.
  2. Train Model — выбрать целевое поле и алгоритм (Two‑class Decision Forest показал лучшие метрики).
  3. Score Model + Evaluate Model — оценка качества.
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Метрики классификации: Accuracy, Precision, Recall, F1, AUC. Decision Forest даёт значения ≈1 — модель хороша.

Predictive Experiment

Конвертация обучающего эксперимента в предсказательный → веб‑сервис.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Train Model → Set Up Web Service → Predictive Web Service → Deploy.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

TEST: вводим значения → предсказание «SAFE DRIVING» (снижать скорость не нужно). Если «HIGH STRESS HIGH SPEED» — снижать.

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Выводы по ML:

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Итоговые выводы

Проект охватывает: Arduino + сенсоры (<$60), Azure (IoT Hub, Stream Analytics, SQL, WebApp, ML), UWP. Прототип требует доработок, но хорошая база для энтузиастов C#, Azure, Arduino, мотоциклов.

Перспективы развития:

Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

Новый workflow (обратная связь ML → устройство):

... and now ENJOY !! :-) Вопросы и идеи — welcome.

Код

UWP App C# Code: GitHub

Arduino Code — Bike Telemetry: GitHub

Схемы

Схемы телеметрической системы. Набордная схема:
Система телеметрии мотоцикла в реальном времени: Arduino, GPS, датчики, Azure и ML

MotorbikeProject.fzz (Fritzing файл)

Производственный процесс

  1. Sensor Telemetry 2.0.1 — продвинутый мониторинг температуры с Azure IoT Hub
  2. Система избегания препятствий с ИИ (Q-learning) на Arduino и ультразвуковых датчиках
  3. Интерактивный гироскопический LED-дисплей на NeoPixel Ring и Arduino
  4. DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
  5. DIY-костюм «Облако»: LED-лента, Arduino Nano и детали SparkFun
  6. Промышленный робот-линейный следователь для транспортировки материалов
  7. Pixie: DIY-наручные часы на Arduino Pro Mini и NeoPixel — стильный светодиодный тахометр времени
  8. Умная бутылка для воды на Arduino: мониторинг и напоминания в реальном времени
  9. DIY Теневой театр на Arduino и адресной LED-ленте: световое шоу к праздникам
  10. Переносная система видеонаблюдения: робот с камерой на Raspberry Pi и Arduino