Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Telemetri sepeda motor saya

Komponen dan persediaan

Arduino UNO
× 1
u-blox gps neo 7m
× 1
Teknologi Microchip LM35DT
× 1
SparkFun TMP006 - Penembusan Suhu Inframerah
× 1
Modul Bluetooth HC-05
× 1
Sensor Ultrasonik - HC-SR04 (Generik)
× 2
SparkFun ADXL345
× 1
Ducati Monster
× 1
Perangkat ProtoShield SparkFun
× 1
Ukuran Setengah Papan Tempat Memotong Roti Tanpa Solder
× 1
Baterai 9V (generik)
× 1
Klip Baterai 9V
× 1
Kabel jumper (generik)
× 1
Lumia 650
× 1

Aplikasi dan layanan online

Microsoft Azure
Microsoft Visual Studio 2015
Microsoft Blend
Arduino IDE
GIMP
Fritzing

Tentang proyek ini

Setiap kali saya memulai proyek baru, saya mencoba membuat sesuatu dengan memanfaatkan teknologi terbaru yang terkait dengan hasrat saya. Untuk Proyek ini saya memutuskan untuk menggabungkan gairah saya untuk sepeda motor dengan hobi favorit saya (menggunakan Arduino).

Ide

Saya selalu terpesona dengan gambar telemetri yang saya lihat di TV tentang balapan motogp. Melihat gambar seperti di bawah ini, saya membayangkan bagaimana saya bisa membangunnya menggunakan gadget favorit saya (Arduino) dan pengetahuan pemrograman saya.

Jadi saya memutuskan untuk mengembangkan sistem telemetri berbasis Arduino dan Azure, yang mudah direplikasi agar semua penggemar sepeda motor dapat memilikinya di sepeda motor mereka.

Seperti yang akan ditunjukkan di bawah ini, sistem telemetri ini akan dapat memperoleh informasi berikut tentang gaya mengemudi Anda:

  • Kecepatan [Km/j]
  • Posisi GPS (Lintang/Bujur)
  • Informasi satelit (Nomor Sat, Hdop)
  • Altitude [meter]
  • Sudut Miring
  • Sudut Roda
  • Akselerasi G dalam 3 sumbu [m/s^2]
  • Suhu Eksternal [°C]
  • Suhu Ban Belakang [°C]
  • Peredam Kejut Depan [cm]
  • Peredam Kejut Belakang [cm]

Untuk melakukan itu saya menggunakan Arduino Uno R3, beberapa sensor, UWP yang digunakan di Windows Phone dan beberapa layanan Azure.

Alur kerja dijelaskan dalam gambar berikut:

  • Tahap 1 - Semua data telemetri diperoleh dari unit kontrol sekitar dua kali dalam satu detik (unit kontrol ditempatkan di sepeda motor).
  • Tahap 2 - Setiap kali data diperoleh, data dikirim oleh bluetooth dari Arduino ke Windows Phone .
  • Tahap 3 - Data ditampilkan di Ponsel (untuk lebih jelasnya silakan baca bagian "Perangkat Lunak") dan kemudian dikirim melalui jaringan 3G/4G ke Azure IoT HUB .
  • Tahap 4 - Di Azure ada Pekerjaan Analisis Aliran yang menerima data dari IoT HUB dan menyimpan informasi dalam database SQL Azure.
  • Tahap 5 - Di Azure telah dikerahkan WebApp yang menggunakan data database SQL untuk menampilkan data telemetri secara real time (harap baca bagian Aplikasi Web)
  • Tahap 6 - Aplikasi Web , menggunakan proses autentikasi dan menampilkan semua informasi telemetri dalam bagan. (Semua data diambil dari database sql Azure menggunakan Entity Framework)
  • Tahap 7 - Semua data yang disimpan di database SQL Azure diproses oleh Pembelajaran Mesin untuk mengambil informasi tentang "gaya mengemudi" Anda. Lingkupnya akan memahami cara memodifikasi gaya mengemudi Anda dalam fungsi parameter telemetri untuk meningkatkan kinerja mengemudi Anda.

Menurutku CUKUP KEREN!!! Mari kita mulai mendeskripsikan proyek

Penyiapan perangkat keras

Konfigurasi perangkat keras saya ditunjukkan di bawah ini.

Pengaturan perangkat keras saya terdiri dari:

  • 1 x Arduino Uno R3
  • 2 x Modul rentang ultrasonik HC-SR04 , Digunakan untuk menentukan ekstensi peredam kejut (Depan &Belakang)
  • 1 x Sensor Suhu Tanpa Kontak Termopile Inframerah TMP006, digunakan untuk menentukan Temperatur Ban (dapat salah mengukur Temperatur Eksternal juga - Opsional)
  • 1 x GPS-NEO7M , digunakan untuk menentukan Posisi GPS, kecepatan, ketinggian
  • 1 x ADXL345 , Digunakan untuk mengevaluasi percepatan G dalam 3 sumbu dan menghitung Sudut Lean dan Sudut Wheelie
  • 1 x LM35DT untuk menentukan Suhu eksternal
  • 1 x HC-05 , modul bluetooth, untuk berkomunikasi antara arduino dan windows phone
  • 1 x Suplai daya (baterai generik atau ponsel bank daya )

LANGKAH 1 - Konektivitas Bluetooth

Saya menggunakan SofwareSerial library untuk menghubungkan modul bluetooth dengan Arduino dan mengaktifkan komunikasi nirkabel dengan Windows Phone.

HC-05 Modul Bluetooth dipilih untuk cakupan ini, Ini adalah modul bluetooth kelas-2 dengan Profil Port Serial, yang dapat dikonfigurasi sebagai Master atau slave.

Langkah Selanjutnya adalah mengubah Nama Default perangkat Bluetooth saya, Nama default adalah HC-05 ... itu tidak "menarik"

Cara menggunakan perangkat ini:

Dalam kode Arduino Anda:

  • sertakan SoftwareSerial perpustakaan
  • menentukan port RX/TX
  • inisialisasi komunikasi:
#include [...]SoftwareSerial BTSerial(10,11); // RX-TX[...]pengaturan batal(){BTSerial.begin(9600);[...]} 

Anda sekarang siap untuk mengirim melalui Bluetooth setiap string yang Anda inginkan menggunakan baris perintah berikut:

...BTSerial.print("Halo Hackster");... 

Komunikasi antara Windows Phone dan Arduino sudah siap dan sangat mudah!

LANGKAH 2 - Komunikasi GPS

Perangkat keras yang digunakan untuk cakupan ini adalah GPS-NEO7M modul, ini adalah modul GPS berdaya rendah yang memiliki 56 saluran dan menghasilkan pembaruan posisi yang tepat pada 10Hz.

Komunikasi antara Arduino dan Modul GPS telah dilakukan oleh SoftwareSerial Perpustakaan dan eksploitasi perpustakaan yang sangat menarik bernama TinyGPS++

Cara berkomunikasi dengan sensor ini:

  • Tentukan port RX/TX
  • inisialisasi objek TinyGPS
  • inisialisasi komunikasi

Lihat kode di bawah ini :

#include #include // Tentukan koneksi serial dengan GPSSoftwareSerial ss(12,13); // RX-TX// Tentukan Objek TinyGPSTinyGPSPlus gps;void setup(){// GPS Inizializess.begin(9600);[...]}void loop(){// Saat GPS tersedia, baca informasisementara(ss .available()>0){if(gps.encode(ss.read())){if(gps.location.isValid()){double lat=gps.location.lat();double lon=gps.location .lng(); }}}[...]} 

LANGKAH 3 - Akselerometer

Untuk menentukan nilai percepatan pada 3 sumbu dan untuk menghitung sudut roll dan pitch (sudut Lean dan Wheelie), saya menggunakan ADXL345

ADXL345 adalah akselerometer 3-sumbu kecil, tipis, berdaya ultra rendah dengan pengukuran resolusi tinggi (13-bit) hingga ±16 g. Data keluaran digital diformat sebagai pelengkap berpasangan 16-bit dan dapat diakses melalui SPI (3- atau 4-kawat) atau I2C antarmuka digital.

Komunikasi antara Arduino dan sensor ADXL345 terjadi menggunakan ADXL345.h Perpustakaan.

Sangat penting untuk dipahami bahwa ketika Anda menghubungkan sensor ini, Anda akan dapat menentukan percepatan gravitasi di 3 sumbu tetapi nilainya tidak segera dikalibrasi. Anda perlu membuat kode untuk menyetel OFFSET.

Saya memutuskan untuk menentukan "titik nol" di loop pertama. Untuk melakukan itu, percepatan G di loop pertama akan menjadi nilai referensi yang harus Anda kurangi ke pengukuran berikutnya.

// loop pertama ke if (i ==0) {refXg =Xg; refYg =Yg; refZg =Zg;i =1;}// kurangi titik nolXg =Xg - refXg;Yg =Yg - refYg;Zg =Zg - refZg + 1; 

Kemudian Anda harus menghitung Sudut Lean dan Sudut Wheelie berdasarkan komponen percepatan g.

Di bawah ini Anda dapat melihat 2 persamaan Matematika sederhana untuk melakukannya:

// Roll &Pitch Persamaanroll =-(atan2(-fYg, fZg) * 180.0) / M_PI; nada =(atan2(fXg, sqrt(fYg * fYg + fZg * fZg)) * 180.0) / M_PI; 

Dalam proyek ini Anda harus mempertimbangkan:

  • Sumbu Z adalah sumbu gravitasi alami
  • Sumbu Y adalah arah gerak
  • Sumbu X adalah gerak lateral

Cara berkomunikasi dengan sensor ini:

  • inisialisasi objek ADXL345
  • inisialisasi komunikasi

Sekarang Anda siap untuk membaca informasi akselerasi, lihat kode di bawah ini:

#include #include #include // Tentukan koneksi serial dengan GPSSoftwareSerial ss(12,13); // RX-TX// Tentukan Objek ADXL345ADXL345 acc;void setup(){// ADXL345 Inizializeacc.begin();[...]}void loop(){// Baca g komponen akselerasidouble Xg,Yg,Zg; acc.read(&Xg,&Yg,&Zg);} 

LANGKAH 4 - Suhu Ban

Untuk menentukan suhu Ban saya membutuhkan sensor yang untuk alasan yang jelas tidak menyentuh ban. cara yang unik adalah dengan menggunakan sensor suhu Inframerah. Untuk melakukan itu saya memutuskan untuk menggunakan TMP006 sensor

TMP006 adalah sensor termopile MEMs terintegrasi yang mengukur suhu suatu objek tanpa harus bersentuhan langsung. Thermopile menyerap energi inframerah pasif dari objek pada panjang gelombang antara 4 um hingga 16 um dalam bidang tampilan yang ditentukan pengguna akhir.

Perubahan tegangan yang sesuai di seluruh thermopile didigitalkan dan dilaporkan dengan pengukuran sensor termal die on-chip melalui I2C

Sekarang pertanyaannya adalah, di mana saya harus memposisikan sensor saya? Dengan melihat lembar data, Anda dapat menemukan informasi penting tentang jarak yang disarankan antara sensor dan objek.

Anda harus mematuhi aturan bahwa jarak harus lebih rendah dari setengah radius sudut padat objek.

dengan kata lain, lebar ban saya adalah 160mm , lebar setengahnya akan menjadi radius (R) dari sudut solid, sehingga hasil akhir dari R adalah 80mm. Jadi jarak yang direkomendasikan adalah 40mm (atau kurang) , sama dengan R/2

Komunikasi antara Arduino dan TMP006 dibuat menggunakan SerialSoftware perpustakaan dan Adafruit_TMP006.h perpustakaan

#include #include "Adafruit_TMP006.h"/Variabel untuk Fungsi TMP006************************* **************/Adafruit_TMP006 tmp006;void setup(){}void loop(){// Baca objek IR temperature float objt =tmp006.readObjTempC();// Baca suhu sensor ( Suhu Eksternal) diet apung =tmp006.readDieTempC();} 

LANGKAH 5 - Suhu Eksternal

Nilai suhu eksternal telah ditentukan menggunakan dan LM35 sensor (paket DT).

Seri LM35 adalah perangkat suhu sirkuit terintegrasi 1 presisi dengan tegangan output proporsional linier dengan suhu Celcius.

Setiap derajat Celcius menghasilkan Tegangan Naik/Turun 10 mV

Nilai sensor telah ditentukan membaca input analog Arduino (AI)

int TempExtPin =A1; // pilih pin input float celsius =0, farhenheit =0; // variabel suhumengambang milivolt; int sensor;[...]sensor =analogRead(TempExtPin); //Baca nilai LM35milivolt =( sensor / 1023.0) * 5000; //milivolt keluaran Voltagecelsius =milivolt/10;  

LANGKAH 6 - Posisi Ultrasonik

Tujuan penggunaan sensor ini adalah untuk mengetahui eskursi dari suspensi sepeda motor.

HC-SR04 mengukur waktu yang dibutuhkan oleh gelombang suara untuk kembali setelah menghadapi rintangan. Gelombang suara yang dipancarkan balok memiliki bentuk kerucut dan hal yang sama berlaku untuk gelombang pantul dari suatu rintangan.

Kecepatan gelombang suara di udara pada 20°C adalah sekitar 343,4 m/s, dalam contoh ini untuk kesederhanaan kita akan mempertimbangkan nilai perkiraan 340 m/s .

Mempertimbangkan hukum kinematika S=V x t (di mana S:ruang atau perpindahan benda, V:kecepatan, t:waktu) kita dapat mengumumkan bahwa dalam kasus kita jaraknya adalah S=0,034 x T .

Kita harus membagi waktu per 2 karena waktu yang kita konversi adalah waktu yang digunakan untuk pergi dan kembali oleh ombak, rumus terakhir dimana t adalah waktu yang dikembalikan dari sensor dalam cm/mikrodetik adalah:

S=0,034 x t/2

Di bawah ini Anda dapat melihat contoh yang dapat Anda coba gunakan untuk menentukan jarak objek.

digitalWrite( triggerPort, LOW );// Kirim pulsa 10mikro ke triggerdigitalWrite( triggerPort, HIGH );delayMicroseconds(10);digitalWrite(triggerPort, LOW);durasi panjang =pulseIn( echoPort, HIGH );long r =0,034 * durasi / 2; 

Kode di atas menjelaskan dengan baik cara kerja sensor tetapi Anda akan menemukan bahwa kode ini sangat lambat dan kinerjanya buruk .

Untuk proyek ini saya memutuskan untuk mencoba perpustakaan baru bernama NewPing.h untuk detail lebih lanjut, silakan kunjungi tautan ini dan lihat kode proyek Arduino lengkap.

Gunakan NewPing.h perpustakaan sangat mudah.

  • Sertakan perpustakaan
  • tentukan pemicu dan port gema HC-SR04
  • menginisialisasi objek
  • memanggil fungsi ReadPositionPing.
#include /************************************ ******* Tentukan Variabel untuk Fungsi HC RS04************************************ ******/// HC-RS04 portsint triggerPort =2;int echoPort =3;// Penyiapan pin dan jarak maksimal NewPing sonar(triggerPort, echoPort, 200);void setup(){}void loop() {/*** READ POSITION ***/int Pos=ReadPositionPing();}int ReadPositionPing(){unsigned int uS =sonar.ping();return sonar.convert_cm(uS);} 

Perangkat Lunak UWP

Perangkat lunak ini terdiri dari antarmuka pengguna yang terhubung ke unit kontrol melalui bluetooth. UI menampilkan semua data yang dikirim dari Arduino dan dikirim ke IoTHub nilai-nilai sensor.

Komunikasi serial antara Arduino dan UWP diinterpretasikan dengan membaca dari string input.

Setiap String diterima divalidasi dengan memeriksa yang berisi MULAI dan AKHIR penanda. Jika string input diformat dengan benar, aplikasi akan mengeluarkan informasi dan menampilkannya di Antarmuka Pengguna aplikasi.

Di bawah ini Anda dapat melihat contoh string yang dikirim dari Arduino yang berisi penanda START/END, string ini akan dipisahkan oleh karakter "pipa" untuk menentukan nilai masing-masing sensor:

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

di bawah definisi Array setelah pemisahan string yang dikirim:

  • Posisi 0 - MULAI Penanda
  • Posisi 1 - Lintang
  • Posisi 2 - N (Utara)
  • Posisi 3 - Bujur
  • Posisi 4 - E (Timur)
  • Posisi 5 - bulan
  • Posisi 6 - hari
  • Posisi 7 - tahun
  • Posisi 8 - jj:MM.ss
  • Posisi 9 - kecepatan (Km/j)
  • Posisi 10 - ketinggian (m)
  • Posisi 11 - satelit (jumlah satelit)
  • Posisi 12 - hdop (jumlah satelit yang digunakan)
  • Posisi 13 - gulung
  • Posisi 14 - nada
  • Posisi 15 - Xg
  • Posisi 16 - Yg
  • Posisi 17 - Zg
  • Posisi 18 - Audio (Opsional-saat ini nonaktifkan )
  • Posisi 19 - Jarak (m)
  • Posisi 20 - Suhu (Suhu luar dengan LM35)
  • Posisi 21 - Temperatur Ban (Suhu ban dari TMP006)
  • Posisi 22 - Shock Absorber depan (cm)
  • Posisi 23 - Peredam Kejut Belakang (cm)
  • Posisi 24 - Penanda AKHIR

dengan "Serial Monitor" dari Arduino IDE Anda dapat melihat cara kerja Kode Arduino:

Untuk mengelola semua data yang dikirim dari unit pusat melalui Bluetooth, saya telah mengembangkan Aplikasi Windows Universal yang merupakan contoh bagus dari kekuatan UWP. Seperti yang Anda ketahui, UWP adalah platform yang memungkinkan Anda menjalankan aplikasi di semua keluarga perangkat dengan Windows 10 di dalamnya.

Antarmuka pengguna sangat sederhana dan intuitif, di sisi kiri Anda dapat melihat fitur koneksi Bluetooth, di tengah 3 pengukur digunakan untuk menunjukkan kecepatan, sudut kemiringan, dan Sudut Wheelie. Semua komponen G ditampilkan dan di sebelah kanan ada informasi tentang posisi GPS, suhu, dan perjalanan peredam kejut.

Bagaimana Cara Menyebarkan Aplikasi ke Windows 10 Mobile?

Dengan Windows 10 SDK Preview Build 10166, Microsoft memperkenalkan alat Windows 10 Application Deployment (WinAppDeployCmd.exe).

Windows 10 Application Deployment (WinAppDeployCmd) adalah utilitas baris perintah yang dapat digunakan untuk menyebarkan aplikasi Universal Windows dari PC Windows 10 ke perangkat seluler Windows 10 mana pun. Ini memungkinkan pengguna untuk menyebarkan file .AppX ke perangkat yang terhubung melalui USB atau tersedia di subnet yang sama tanpa memerlukan akses ke solusi Visual Studio yang lengkap.

LANGKAH 1:

Pertama-tama pindahkan perangkat seluler Anda dalam "Mode Pengembang" (buka PERBARUI &KEAMANAN => UNTUK PENGEMBANG ).

setelah itu, sambungkan perangkat Anda melalui USB dan buat koneksi USB terlihat (kode PIN akan dikembalikan)

LANGKAH 2:

Klik kanan pada Proyek Anda =>Toko =>Buat Paket Aplikasi

LANGKAH 3:

Di wizard Buat Paket Aplikasi, pilih TIDAK Jika Anda ingin membuat paket lokal dan klik BERIKUTNYA . Setelah itu pilih platform prosesor yang akan dituju. Untuk tujuan kami, pilih platform ARM dan klik BUAT .

Di akhir proses pembuatan, wizard memberi kita URL lokal tempat paket dibuat.

membuka url, Anda akan menemukan file Appx tersedia untuk diterapkan pada perangkat.

LANGKAH 4:

Buka Command prompt dan pindahkan fokus Anda ke C:\Program Files (x86)\Windows Kits\10\bin\x86\

dan ketik baris perintah berikut

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.appxbundle" -pin AAA123

(di mana AAA123 adalah kode pin yang dikembalikan dari ponsel Anda yang terhubung ke USB dalam mode Asosiasi)

Di akhir proses, aplikasi akan dipasang di perangkat Anda dan Anda akan dapat "menyematkan untuk memulai":

AZUR

Sekarang kami siap menjelaskan cara mengonfigurasi layanan Azure. Untuk proyek ini akan diperlukan untuk membuat:

  • Aplikasi Web + SQL Azure
  • IoTHUB
  • Tugas Analisis Aliran
  • DeviceId yang akan digunakan untuk mengirim data ke IoTHUB .

Oke pergi! Apakah Anda memiliki akun AZURE?

  • Jika TIDAK, buka https://azure.microsoft.com/ dan buat.
  • Jika YA... BAIK! Buka https://portal.azure.com

LANGKAH 1 - Buat dan konfigurasikan IoT Hub:

IoTHUB adalah titik akses nilai telemetri ke Cloud.

Buat IoTHub Anda, Klik Baru => Internet Pemikiran => Pusat IoT dan kompilasi bidang Hub dan klik Buat

Selanjutnya, di dasbor Azure, Anda mungkin melihat IoT HUB menerapkan dan setelah beberapa detik IoT HUB Anda akan siap.

Klik ubin baru di dasbor Anda dan buka Semua setelan pedang.

Lihat Nama Inang IotHub Anda dan buat catatan:

Dalam Kebijakan akses bersama bilah, klik pemilik iothub kebijakan, lalu salin dan catat string koneksi di iothubowner pedang

Oke...hub Iot Anda telah berhasil dibuat, Anda hampir siap untuk menggunakannya!

LANGKAH 2 - Buat dan konfigurasikan Analisis Aliran

Aliran Analytics memiliki tujuan membaca dan menulis semua data yang dikirim ke IOTHUB dan menyimpannya ke dalam tabel database.

Buat tugas Analisis Aliran baru:

Klik Baru => Internet Pemikiran => Tugas Analisis Aliran

Kompilasi semua bidang dan klik tombol Buat.

Sekarang kita siap untuk mengonfigurasi Input/Output dan kueri JOB streamAnalityncs.

Siapkan Masukan - Pilih Sumber . Dalam kasus kami, sumbernya adalah IoTHub

Atur Output - Pilih tujuan. Dalam kasus kami, outputnya akan menjadi tabel database SQL Azure (Saya akan menunjukkan cara membuat sql db pada langkah berikutnya)

LANGKAH 3 - Buat WebApp + SQL Azure

Buka dasbor dan pilih WebApp+SQL (Baru => Jaringan => Web + Seluler => Aplikasi Web + Sql )

Sekarang konfigurasikan aplikasi web Anda dengan mengompilasi bidang berikut:

  • Nama Aplikasi
  • Pilih langganan
  • Pilih Grup Sumber Daya ( jika Anda tidak memilikinya, buat Grup Sumber Daya pertama Anda)
  • Pilih Paket Layanan Aplikasi dan tingkat harga (untuk contoh ini Anda dapat mempertimbangkan untuk memilih paket gratis F1)

Konfigurasikan SQL Anda, buat yang baru dan pilih nama , tingkat harga , nama server dan tambahkan kredensial Login Admin :

Sekarang kembali ke LANGKAH 2 , kita sekarang siap untuk membuat Kueri StreamAnalitycs. Klik ubin StreamAnalyticJob dan pilih "Kueri". Masukkan kueri Anda di panel kanan.

Seperti yang Anda lihat, kueri menjelaskan alur kerja proses. 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 tombol.

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 tombol
  • 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.

Kode

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

Skema

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

Proses manufaktur

  1. Sensor Telemetri 2.0.1
  2. Penghindaran Rintangan menggunakan Kecerdasan Buatan
  3. Giroskop Menyenangkan dengan NeoPixel Ring
  4. Pengontrol Game Arduino
  5. Kostum Cloud
  6. Pengikut Lini Industri untuk Pengadaan Bahan
  7. Pixie:Jam Tangan NeoPixel Berbasis Arduino
  8. Botol Air Bertenaga Arduino
  9. Teater Bayangan Liburan
  10. Kamera Pengawasan Jarak Jauh Seluler