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

Моя телеметрия с мотоцикла

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

Arduino UNO
× 1
u-blox gps neo 7m
× 1
Microchip Technology LM35DT
× 1
SparkFun TMP006 - инфракрасный температурный прорыв
× 1
Модуль Bluetooth HC-05
× 1
Ультразвуковой датчик - HC-SR04 (общий)
× 2
SparkFun ADXL345
× 1
Ducati Monster
× 1
SparkFun ProtoShield Kit
× 1
половинный размер макетной платы без пайки
× 1
Батарея 9 В (стандартная)
× 1
Зажим для батареи 9 В
× 1
Перемычки (общие)
× 1
Lumia 650
× 1

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

Microsoft Azure
Microsoft Visual Studio 2015
Microsoft Blend
IDE Arduino
GIMP
Фритзинг

Об этом проекте

Каждый раз, когда я начинаю новый проект, я пытаюсь создать что-то, используя новейшие технологии, связанные с моими увлечениями. В этом проекте я решил объединить мою страсть к мотоциклу с моим любимым хобби (использовать Arduino).

Идея

Меня всегда восхищали телеметрические изображения гонок motogp, которые я вижу по телевизору. Увидев изображения, подобные приведенным ниже, я представил, как я могу создать его, используя свой любимый гаджет (Arduino) и свои знания программирования.

Поэтому я решил разработать систему телеметрии на основе Arduino и Azure, которую было бы легко воспроизвести, чтобы все энтузиасты мотоциклов могли иметь ее в своем мотоцикле.

Как будет показано ниже, эта телеметрическая система сможет получить следующую информацию о вашем стиле вождения:

  • Скорость [км / ч]
  • GPS-положение (широта / долгота)
  • Спутниковая информация (номер спутников, Hdop)
  • Альтернатива [метры]
  • Угол наклона
  • Угол Вилли
  • G Ускорение по 3 осям [м / с ^ 2]
  • Внешняя температура [° C]
  • Температура задней шины [° C]
  • Передний амортизатор [см]
  • Задний амортизатор [см]

Для этого я использовал Arduino Uno R3, некоторые датчики, UWP, развернутый в Windows Phone, и некоторые службы Azure.

Рабочий процесс описан на следующем рисунке:

  • Этап 1 - Все данные телеметрии получены от блока управления примерно два раза в секунду (блок управления расположен на мотоцикле).
  • Этап 2 - Каждый раз, когда данные собираются, данные отправляются по bluetooth . с Arduino на Windows Phone .
  • Этап 3 - Данные отображаются в телефоне (более подробную информацию см. В разделе «Программное обеспечение»), а затем отправляются по сети 3G / 4G в Azure IoT HUB . .
  • Этап 4 - В Azure есть задание Stream Analytics . который получает данные из IoT HUB и сохраняет информацию в базе данных SQL Azure.
  • Этап 5 - В Azure было развернуто WebApp . которые используют данные базы данных SQL для отображения данных телеметрии в реальном времени (см. раздел "Веб-приложение")
  • Этап 6 - Веб-приложение , использует процесс проверки подлинности и отображает всю телеметрическую информацию в виде диаграмм. (Все данные извлекаются из базы данных sql azure с помощью Entity Framework)
  • Этап 7 - Все данные, сохраненные в базе данных SQL azure, обрабатываются с помощью машинного обучения . чтобы получить информацию о вашем «стиле вождения». Прицел будет понимать, как изменить ваш стиль вождения в зависимости от параметров телеметрии, чтобы улучшить ваши ходовые качества.

Думаю, ЭТО ДОВОЛЬНО КЛАССНО !!! Приступим к описанию проекта

Настройка оборудования

Конфигурация моего оборудования показана ниже.

Моя аппаратная установка состоит из:

  • 1 x Arduino Uno R3
  • 2 модуля ультразвукового измерения диапазона HC-SR04 , Используется для определения удлинения амортизатора (спереди и сзади)
  • 1 инфракрасный бесконтактный датчик температуры на термоэлементах TMP006, Используется для определения температуры шин (также может быть неверное значение внешней температуры - необязательно).
  • 1 х GPS-NEO7M , используется для определения GPS-положения, скорости и высоты.
  • 1 x ADXL345 , Используется для оценки ускорения G по 3 осям и вычисления угла наклона и угла колеса
  • 1 х LM35DT для определения внешней температуры
  • 1 х HC-05 , модуль bluetooth, для связи между Arduino и Windows Phone.
  • 1 блок питания (обычный аккумулятор или мобильный внешний аккумулятор )

ШАГ 1. Подключение по Bluetooth

Я использовал SofwareSerial библиотека для подключения модуля Bluetooth к Arduino и включения беспроводной связи с Windows Phone.

A HC-05 Для этой области был выбран модуль Bluetooth. Это модуль Bluetooth класса 2 с профилем последовательного порта, который может быть настроен как ведущий или ведомый.

Следующим шагом было изменение имени по умолчанию для моего устройства Bluetooth, имя по умолчанию было HC-05 . ... это не было "привлекательно"

Как использовать это устройство:

В вашем коде Arduino:

  • включить SoftwareSerial библиотека
  • определить порт RX / TX
  • инициализировать коммуникацию:
  #include  [...] SoftwareSerial BTSerial (10,11); // RX-TX [...] void setup () {BTSerial.begin (9600); [...]}  

Теперь вы готовы отправлять через Bluetooth каждую строку, которую хотите, с помощью следующей командной строки:

  ... BTSerial.print ("Привет, Хакстер"); ...  

Связь между Windows Phone и Arduino теперь готова, и это было очень просто!

ШАГ 2 - GPS-связь

Для этого прицела использовалось оборудование GPS-NEO7M . модуль, это маломощный GPS-модуль, который имеет 56 каналов и выдает точные данные о местоположении с частотой 10 Гц.

Связь между Arduino и модулем GPS осуществляется с помощью SoftwareSerial . Библиотека и использование очень интересной библиотеки под названием TinyGPS ++

Как общаться с этим датчиком:

  • Определите порт RX / TX.
  • инициализировать объект TinyGPS
  • инициализировать общение

См. Код ниже:

  #include  #include  // Определение последовательного соединения с GPSSoftwareSerial ss (12,13); // RX-TX // Определение объекта TinyGPS TinyGPSPlus gps; void setup () {// GPS Inizializess.begin (9600); [...]} void loop () {// Пока GPS доступен, прочтите информацию пока (ss .available ()> 0) {if (gps.encode (ss.read ())) {if (gps.location.isValid ()) {double lat =gps.location.lat (); double lon =gps.location .lng (); }}} [...]}  

ШАГ 3 - Акселерометр

Чтобы определить значения ускорений по 3 осям и вычислить угол крена и тангажа (угол наклона и колеса), я использовал ADXL345

ADXL345 это небольшой, тонкий, сверхмалопотребляющий 3-осевой акселерометр с высоким разрешением (13 бит) измерениями до ± 16 г. Данные цифрового вывода форматируются как 16-битное дополнение до двоек и доступны через SPI . (3- или 4-проводный) или I2C цифровой интерфейс.

Связь между Arduino и датчиком ADXL345 осуществляется с помощью ADXL345.h Библиотека.

Очень важно понимать, что при подключении этого датчика вы сможете определять ускорение свободного падения по 3 осям, но значения не калибруются сразу. Вам необходимо создать код для установки СМЕЩЕНИЯ.

Решил определить «нулевую точку» в первом цикле. Для этого ускорение G в первом цикле будет опорными значениями, которые вы должны вычесть из последующих измерений.

  // первый цикл для if (i ==0) {refXg =Xg; refYg =Yg; refZg =Zg; i =1;} // вычитаем нулевую точку Xg =Xg - refXg; Yg =Yg - refYg; Zg =Zg - refZg + 1;  

Затем вы должны вычислить угол наклона и угол колеса на основе компонентов ускорения g.

Ниже вы можете увидеть 2 простых математических уравнения для этого:

  // Уравнения крена и тангажаroll =- (atan2 (-fYg, fZg) * 180.0) / M_PI; шаг =(atan2 (fXg, sqrt (fYg * fYg + fZg * fZg)) * 180,0) / M_PI;  

В этом проекте вы должны учитывать:

  • Ось Z - это оси естественной гравитации.
  • Ось Y - это направление движения.
  • Ось X - боковое движение.

Как общаться с этим датчиком:

  • инициализировать объект ADXL345
  • инициализировать общение

Теперь вы готовы прочитать информацию об ускорении, см. Приведенный ниже код:

  #include  #include  #include  // Определение последовательного соединения с GPSSoftwareSerial ss (12,13); // RX-TX // Определение объекта ADXL345ADXL345 acc; void setup () {// ADXL345 Inizializeacc.begin (); [...]} void loop () {// Чтение компонентов ускорения gdouble Xg, Yg, Zg; acc.read (&Xg, &Yg, &Zg);}  

ШАГ 4 - Температура шин

Для определения температуры шин мне понадобился датчик, который по понятным причинам не касается шины. Уникальным способом было использование инфракрасного датчика температуры. Для этого я решил использовать TMP006 . датчик

TMP006 - это полностью интегрированные датчики термобатареи MEM, которые измеряют температуру объекта без прямого контакта. Термобатарея поглощает пассивную инфракрасную энергию от объекта на длинах волн от 4 мкм . до 16 мкм в пределах поля зрения, определяемого конечным пользователем.

Соответствующее изменение напряжения на термобатареи оцифровывается и сообщается с помощью измерения термодатчика кристалла на кристалле через I2C .

Теперь вопрос в том, где мне разместить датчик? В таблице данных можно найти важную информацию о рекомендуемом расстоянии между датчиком и объектом.

Вы должны соблюдать правило, согласно которому расстояние должно быть меньше половины радиуса телесного угла объекта.

Другими словами, ширина моей шины составляет 160 мм, половина ширины будет радиусом (R) телесного угла, поэтому окончательный результат R будет 80 мм. Таким образом, рекомендуемое расстояние будет 40 мм . (или меньше), равно R / 2

Связь между Arduino и TMP006 создается с помощью SerialSoftware библиотека и Adafruit_TMP006.h библиотека

  #include  #include "Adafruit_TMP006.h" / Переменные для функций TMP006 ************************* ************** / Adafruit_TMP006 tmp006; void setup () {} void loop () {// Считываем ИК-температуру объекта float objt =tmp006.readObjTempC (); // Считываем температуру датчика ( Внешняя температура) float diet =tmp006.readDieTempC ();}  

ШАГ 5 - Внешняя температура

Значение внешней температуры было определено с помощью и LM35 датчик (упаковка ДТ).

Серия LM35 - это прецизионные температурные устройства с интегральной схемой 1 с выходным напряжением, линейно пропорциональным температуре по шкале Цельсия.

Каждый градус Цельсия дает увеличение / уменьшение напряжения на 10 мВ

Значение датчика было определено с аналогового входа Arduino (AI)

  int TempExtPin =A1; // выбираем входной вывод float celsius =0, farhenheit =0; // температурные переменные всплывают в милливольтах; int сенсор; [...] сенсор =analogRead (TempExtPin); // Считываем значение LM35 милливольт =(сенсор / 1023.0) * 5000; // выход милливольт Voltagecelsius =милливольт / 10;  

ШАГ 6 - Ультразвуковое положение

Этот датчик используется для определения смещения подвески мотоцикла.

HC-SR04 измерение времени, необходимого звуковым волнам, чтобы повернуть назад после столкновения с препятствием. Излучаемый луч звуковых волн имеет коническую форму, и то же самое относится к волнам, отраженным от препятствия.

Скорость звуковых волн в воздухе при 20 ° C составляет около 343,4 м / с, в этом примере для простоты мы рассмотрим приблизительное значение 340 м / с . .

Учитывая закон кинематики S =V x t (где S:пространство или смещение объекта, V:скорость, t:время), мы можем объявить, что в нашем случае расстояние равно S =0,034 x T .

Мы должны разделить время на 2, потому что время, которое мы преобразовали, - это время, которое использовалось для того, чтобы идти и возвращаться волнами, окончательная формула, где t это время, возвращаемое датчиком в см / микросекундах . это:

S =0,034 x t / 2

Ниже вы можете увидеть пример, который вы можете использовать для определения расстояния до объекта.

  digitalWrite (triggerPort, LOW); // Посылаем импульс 10 микросекунд на triggerdigitalWrite (triggerPort, HIGH); delayMicroseconds (10); digitalWrite (triggerPort, LOW); long duration =pulseIn (echoPort, HIGH); long r =0,034 * продолжительность / 2;  

Приведенный выше код хорошо описывает, как работает датчик, но вы обнаружите, что этот код очень медленный и плохо выполняется . .

Для этого проекта я решил попробовать новую библиотеку под названием NewPing.h . для получения дополнительных сведений перейдите по этой ссылке и ознакомьтесь с полным кодом проекта Arduino.

Используйте NewPing.h библиотека очень проста.

  • Включить библиотеку
  • определить триггер и эхо-порт HC-SR04
  • инициализирует объект
  • вызвать функцию ReadPositionPing.
  #include  / *********************************** ******* Определение переменных для функций HC RS04 ************************************ ****** /// HC-RS04 portsint triggerPort =2; int echoPort =3; // NewPing настройка выводов и максимальное расстояние NewPing сонар (triggerPort, echoPort, 200); void setup () {} void loop () {/ *** READ POSITION *** / int Pos =ReadPositionPing ();} int ReadPositionPing () {unsigned int uS =sonar.ping (); return sonar.convert_cm (uS);}  

Программное обеспечение UWP

Программное обеспечение состоит из пользовательского интерфейса, подключенного к блоку управления через Bluetooth. В пользовательском интерфейсе отображаются все данные, отправленные из Arduino и отправленные в IoTHub . значения датчика.

Последовательная связь между Arduino и UWP интерпретируется путем чтения из входной строки.

Каждая строка полученный, подтверждается проверкой, содержащей НАЧАЛО и END маркеры. Если входная строка правильно отформатирована, приложение отобразит информацию и отобразит ее в пользовательском интерфейсе приложения.

Ниже вы можете увидеть пример строки, отправленной из Arduino, которая содержит маркеры START / END, эта строка будет разделена символом «вертикальной черты» для определения значений каждого датчика:

$ 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 |

под определением массива после разделения отправленной строки:

  • Позиция 0 - Маркер СТАРТ
  • Позиция 1 - Широта
  • Позиция 2 - N (север)
  • Позиция 3 - Долгота
  • Позиция 4 - В (восток)
  • Позиция 5 - месяц
  • Позиция 6 - день
  • Позиция 7 - год
  • Позиция 8 - чч:MM.ss
  • Позиция 9 - скорость (км / ч)
  • Позиция 10 - высота (м)
  • Позиция 11 - спутники (количество спутников)
  • Позиция 12 - hdop (количество используемых спутников)
  • Позиция 13 - ролл
  • Позиция 14 - шаг
  • Позиция 15 - Xg
  • Позиция 16 - Yg
  • Позиция 17 - Zg
  • Позиция 18 - Аудио ( Необязательно - сейчас отключено )
  • Позиция 19 - Расстояние (м)
  • Позиция 20 - Температура (внешняя температура по LM35)
  • Позиция 21 - Температура шин (Температура шин из TMP006)
  • Позиция 22 - Передний амортизатор (см)
  • Позиция 23 - Задний амортизатор (см)
  • Позиция 24 - Маркер КОНЕЦ

с помощью «Serial Monitor» IDE Arduino вы можете увидеть, как работает код Arduino:

Чтобы управлять всеми данными, отправляемыми с центрального блока через Bluetooth, я разработал универсальные приложения для Windows, которые являются прекрасным примером возможностей UWP. Как вы знаете, UWP - это платформа, которая позволяет запускать приложение на всех устройствах с Windows 10 на борту.

Пользовательский интерфейс очень простой и интуитивно понятный, с левой стороны вы можете увидеть функцию подключения Bluetooth, а в середине 3 датчика, которые используются для отображения скорости, угла наклона и угла поворота. Отображаются все компоненты G, а справа - информация о местоположении по GPS, температурах и отклонениях амортизатора.

Как развернуть приложение в Windows 10 Mobile?

В Windows 10 SDK Preview Build 10166 Microsoft представила инструмент развертывания приложений Windows 10 (WinAppDeployCmd.exe).

Развертывание приложения Windows 10 (WinAppDeployCmd) - это служебная программа командной строки, которую можно использовать для развертывания универсального приложения Windows с ПК с Windows 10 на любое мобильное устройство с Windows 10. Он позволяет пользователям развертывать файл .AppX на устройстве, подключенном через USB или доступном в той же подсети, без необходимости доступа к полному решению Visual Studio.

ШАГ 1.

Прежде всего переведите мобильное устройство в «Режим разработчика» (перейдите в ОБНОВЛЕНИЕ И БЕЗОПАСНОСТЬ => ДЛЯ РАЗРАБОТЧИКА ).

после этого подключите устройство через USB и сделайте видимым USB-соединение (будет возвращен PIN-код)

ШАГ 2:

Щелкните правой кнопкой мыши свой проект . => Магазин => Создание пакетов приложений

ШАГ 3.

В мастере создания пакетов приложений выберите НЕТ . Если вы хотите создать локальный пакет, нажмите ДАЛЕЕ . После этого выберите целевые платформы процессоров. Для нашей цели выберите платформу ARM и нажмите СОЗДАТЬ . .

В конце процесса создания мастер дает нам локальный URL-адрес, по которому был создан пакет.

открыв URL-адрес, вы обнаружите, что файл Appx доступен для развертывания на устройстве.

ШАГ 4.

Откройте командную строку и переместите фокус на C:\ Program Files (x86) \ Windows Kits \ 10 \ bin \ x86 \

и введите следующую командную строку

WinAppDeployCmd install -file "C:\ work \ uwp \ Gps \ MotorbikeArduino \ MotorbikeArduino \ AppPackages \ V1.35 \ MotorbikeArduino_1.0.35.0_Debug_Test \ MotorbikeArduino_1.0.35.0_arm_Debug.1" -appx_arm_Debug.1 код> AAA123

(где AAA123 это пин-код, возвращаемый с вашего телефона, подключенного к USB в режиме ассоциации)

В конце процесса приложение будет установлено на вашем устройстве, и вы сможете «закрепить для запуска»:

ЛАЗУРНЫЙ

Теперь мы готовы описать, как настроить службы Azure. Для этого проекта необходимо будет создать:

  • WebApp + SQL Azure
  • IoTHUB
  • ЗАДАНИЕ Stream Analytics
  • DeviceId, который будет использоваться для отправки данных в IoTHUB . .

ХОРОШО, ПРИСТУПАЙ! У вас есть учетная запись AZURE?

  • Если НЕТ, перейдите на https://azure.microsoft.com/ и создайте его.
  • Если ДА ... ХОРОШО! Перейдите на https://portal.azure.com

ШАГ 1. Создайте и настройте Центр Интернета вещей:

IoTHUB - это точка доступа значений телеметрии к облаку.

Создайте свой IoTHub, нажмите Создать . => Интернет мысли => Центр Интернета вещей и скомпилируйте поля Hub и нажмите Create

Впоследствии на панели управления Azure вы можете увидеть IoT HUB развертывания, и через несколько секунд ваш IoT HUB будет готов.

Нажмите на новую плитку на панели инструментов и перейдите в раздел "Все настройки ". лезвие.

См. Свое имя хоста IotHub и сделайте пометку:

В политиках общего доступа нажмите iothubowner политики, а затем скопируйте и запишите строку подключения в iothubowner лезвие

Хорошо ... ваш Iot-центр успешно создан, вы почти готовы его использовать!

ШАГ 2. Создайте и настройте Stream Analytic

Stream Analytics предназначен для чтения и записи всех данных, отправленных в IoTHUB, и сохранения их в таблице базы данных.

Создайте новое задание Stream Analytics:

Нажмите Создать . => Интернет мысли => Задание Stream Analytics

Скомпилируйте все поля и нажмите кнопку "Создать".

Теперь мы готовы настроить ввод / вывод и запрос JOB streamAnalityncs.

Настройка ввода - выберите источник . В нашем случае источником будет IoTHub

Настройте вывод - выберите место назначения. В нашем случае результатом будет таблица базы данных SQL Azure (на следующем шаге я покажу вам, как создать базу данных sql)

ШАГ 3. Создайте WebApp + SQL Azure

Перейдите в панель управления и выберите WebApp + SQL ( Новый => Сеть => Интернет + мобильный => Веб-приложение + Sql )

Теперь настройте свое веб-приложение, указав следующие поля:

  • Название приложения
  • Выберите подписку
  • Выберите группу ресурсов (если у вас ее нет, создайте свою первую группу ресурсов).
  • Выберите план службы приложений и ценовой уровень (в этом примере вы можете выбрать бесплатный план F1).

Настройте свой SQL, создайте новый и выберите имя , ценовой уровень , имя сервера и добавьте учетные данные администратора :

Теперь вернемся к ШАГУ 2 . , теперь мы готовы создать запрос StreamAnalitycs. Щелкните плитку StreamAnalyticJob и выберите «Запрос». Вставьте свой запрос в правую панель.

As you can see, the query describes the process workflow. Catch the data from "MyTelemetryInputHub" and save them into "SqlAzureMyTelemetry" ... easy&wonderful!!

At the end, we have only to start the JOB clicking the START button.

Create a DeviceId for HUB

This step is necessary in order to create a connection between my device and the IoTHUB. We need to create a new device identity and add into the ID registry of the IoT HUB.

For more information please visit the follow link

To generate a new one deviceId, you have to create a Console Application in Visual Studio.

In the NuGet Package Manager window, search and install the Microsoft.Azure.Devices package.

Add the below code In your Console application, replace your IoTHub Connection String and chose a deviceId alias (in my case the deviced is MyDucatiMonsterDevice ).

class Program{//Install-Package Microsoft.Azure.Devicesstatic RegistryManager registryManager;// Connection String HUBstatic string connectionString ="xxxxxxxxxxxxxx";static void Main(string[] args){registryManager =RegistryManager.CreateFromConnectionString(connectionString);AddDeviceAsync().Wait();Console.ReadLine();}// creates a new device identity with ID myFirstDeviceprivate 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);}} 

Run the console application (press F5) and generate your device key!

WEB application

At this point of the project i thinked about how can i see my telemetry data and how can i show them to my friends and share the results on the social media. to do that I decided to create a responsive web site in ASP .NET

The website consist in a dashboard contains all my telemetries. The data has been read using the Entity framework from SQL Azure.

You can discover the web site by the following url:

Has been created an account for all Hackster Users , SignIn using the following user/psw credentials:

User ID:demoPassword:demo 

The web site is look like this:

And look like this in mobile version:

When you create a web app in azure using the Free tier, the domain name will be something like this:

.azurewebsites.net

To change the domain name you have to buy one and on azure this is very simple! Follow this steps:

  • Go to your Azure dashboard and click on you web app Tile.
  • Select "Custom domains and SSL " and click on "Buy domains ".
  • Fill all fields (about your domain name and your contact informations)

Ducati Monster Wiring

Now is time to Introduce my motorbike, this is my Ducati Monster 695 that for this project has been the cavy.

Below some pictures about my Hardware (control unit) mounted onboard.

to measure the tyre temperature I created a bracket clamped behind the wheel.

One Ultrasonic ranging module HC-SR04 has been fixed under the front headlight. It misures the distance between headlight and front mudguard.

The other one Ultrasonic ranging module has been fixed under the bike seat in order to determined the back shock absorber measuring the distance between seat and rear tyre.

The central unit containing the Arduino, the GPS, the Accelerometer and the external temperature sensor has been fixed behind the seat.

And at the end, after the wiring, my motorbike is look like this

Machine Learning

The last idea of this project has been try to understand if exist a correlation between telemetries data in order to try to understand how to improve my driving style.

My data samples are not relatable because I make different routes every time and the traffic conditions are never the same. I think that a good condition should be use the system in a speedway. I Imagine that in a real race could be usefull to understand by telemetry if you can increase the speed or if you have to decrease the speed according to the output values.

The Machine Learning (ML) embodies the magic of software insights about the data, solves problems by giving information that represents a certain evolution. The ML understands how a given phenomenon will evolve according to the data in its knowledge.

The first approach using the ML is to do Experiments . Using the data, you can play and be able to do the analysis with the aim of investigating the phenomenon that interests us.

Ok let's go to discover the Azure Machine Learning

Go to https://studio.azureml.net and sign in using your Azure account.

On the left of the page click on "Studio"

You will be redirect to your personal Dashboard and now you will be ready to create experiments

  • In the experiments blade, Click NEW (on the left button of the page) .
  • The first step is to Import data that you would like to use in your ML. In my case I imported the data from SQL Azure.
  • Into my Table all data are varchar so i needed to convert it in float and excluding some bad data in order to have only best quality records. Below you can see the query used to import data
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) _BackAbsorberfrom mytelemetrywhere 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 
  • Then add a SPLIT DATA element in order to use some data to Train your ML and decide the data percentage to use for the configuration.
  • A data portion will be used to configure the template and the other portion to see if your model works fine. This will allow me to assess the goodness.
  • Add a Train Model and decide what is the field that would you like the model guess and decide which algorithm use for your train.
  • Now we verify how he behaved the algorithm giving us a feeling of goodness, to do that we need to use "Score Model ". the SM accept in input 2 sources, the first one is from Train Model and the second one from the SPLIT DATA .
  • At the end we ready to estimate the model according to the test data, comparing them with those that have not yet used (Evaluate Model ).

Official Documentation about " Evaluate Model" can be found here

Below there is a sample experiment useful for comparing 2 algorithms using the Evaluation Model , the 2 algorithms are Two-class decision jungle and Two-class decision forest .

When you pass on a scored model for a "two classes" classification algorithm, the evaluation model generates metrics shown below:

Classification Models

The above metrics are reported for evaluating classification models.

(All metrics are reported but the models are ranked by the metric you select for evaluation)

  • Accuracy measures the goodness of a classification model as the proportion of true results to total cases. Accuracy =(TP + TN) / (TP + TN + FP + FN)
  • Precision is the proportion of true results over all positive results. Precision =TP / (TP + FP)
  • Recall is the fraction of all correct results returned by the model. Recall =TP / (TP + TN)
  • F-score is computed as the weighted average of precision and recall between 0 and 1, where the ideal F-score value is 1. F1 =2TP / (2TP + FP + FN)
  • AUC measures the area under the curve plotted with true positives on the y axis and false positives on the x axis. This metric is useful because it provides a single number that lets you compare models of different types.

As you can see, the Two-class decision forest Algorithm have an Accuracy , Precision ,Recall and F1 Score near the value equal to 1, so i suppose that my model is good described, GREAT !!!

For more details about Evaluate Model please visit the following LINK

Predictive Experiment:

It's time to move our attention on the predictive functionality of the machine learning.

The Training experiment will be convert to a predictive experiment, this feature allows to integrate in others applications the opportunity to use your model and based on your model have a Prediction.

For do that, has been created a new one Experiment, the data source has been the SQL Azure but this time the table used has been a new one. I tried to classify data based on telemetry values.

Now my data look like this and as you can see there is a new column named Scored that represents my classification:

Create the experiment like below, select the Train Model and add a Multiclass algorithm:

  • RUN the experiment and see the results:
  • Select the Train Model and click on SET UP WEB SERVICE => Predictive Web Service
  • Wait some seconds and your predictive service will be ready. Below you can see my Predictive Experiment layout:
  • Run this model and then deploy the web service by clicking on the DEPLOY WEB SERVICE button
  • Your service will be immediately ready to be used and a dashboard will appear, contain a "TEST" button where you can manually enter data and test your service
  • Click TEST button and compile all fields, use some fake values and see the Predictive result:

As you can see the result is equal to "SAFE DRIVING ", this mean that my Predictive service has predicted that my driving style is Safe and no action is needed.

If the Result has been for example "HIGH STRESS HIGH SPEED " that means that I have to reduce speed!

Conclusions about ML:

in this section we understand some things.

  • How configure an experiment in ML azure environment
  • we found that Two-class decision forest Algorithm well describe my motor bike telemetry and we train the ML for the predictive experiment using the Multiclass decision forest Algorithm
  • How to convert our Model in a Web Service creating a predictive experiment
  • we found some usefull information about my style of guide. Infact as you can see from the below graphs:

I prefer lean on the right and my lean angle doesn't depend for tyre temperature and from the speed. That mean that my tyres are high quality and in add I undestood that my motorbike prefers Wheelie when the tyre temperature is more than 35°C

Final Conclusions

In this project we covered many technological areas.

We discovered How is possible to create a funny Hardware using an Arduino and some sensor spending less then 60$ and using many services provided by microsoft.

We learned how is easy use Azure and how is interesting use Machine Learning Studio suite.

Has been realized a prototype that certainly needs improvements but i think is a good starting point for future developments from each people enthusiast about C#, Azure, Arduino and MotorBike.

Possible future Developments

To Improve this prototype i think will be usefull implements some things:

  • About the mobile app (UWP), in case that no 3G/4G network is available, the data are lost because i'm not able to send the data to azure. Would be usefull develop a buffering logic that in case of "no networking" available, stored the data and send them at a later time.
  • Create an APP for mobile platform using Xamarin, would be cool have an app who can run in Android OS and iOS also.
  • Use more precise sensors and increase performance/accuracy.
  • Make the central unit smaller, maybe using an Arduino MKR1000 .
  • Create a social media Webapp to share your motorbike travel and telemetries in order to suggest to biker users what is the dangerous curves and increase the safety.
  • Modify the source of the Machine Learning using the Steam Analytics. In my case i prefered use a sql AZURE datasource because it was not possible ride the bike and develop the ML in the same time :)

New branch work flow:

  • The new branch consists to sending back to device, through IoTHub , the information about the ML predictive service.
  • When the speed value is greater than 100 km/h a new one stream analyticsJob will send the telemetry data to Event Hub.
  • A cloud service reads this data from EventHub and send a request to the ML predictive service in order to have a score about the Driving Style .
  • The Cloud Service will send back the score to IoTHub , and IoTHub will send it to the device back (Windows Phone in this case)

... and now ENJOY !! :-) feel free to contact me for any questions and tips.

Код

UWP App C# Code
https://github.com/lentzlive/MotorbikeArduino
ARDUINO CODE - Bike Telemetry
https://github.com/lentzlive/BikeTelemetryArduino

Схема

circuit diagrams of the Telemetry system. On board scheda MotorbikeProject.fzz

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

  1. Сенсорная телеметрия 2.0.1
  2. Избегание препятствий с помощью искусственного интеллекта
  3. Удовольствие от гироскопа с кольцом NeoPixel
  4. Игровой контроллер Arduino
  5. Костюм облака
  6. Последователь промышленной линии для поставки материалов
  7. Pixie:наручные часы NeoPixel на базе Arduino
  8. Бутылка для воды с питанием от Arduino
  9. Праздничный театр теней
  10. Мобильная камера удаленного наблюдения