Sistem Telemetri Sepeda Motor Real-Time dengan Arduino, GPS, dan Sensor
Komponen dan Perlengkapan
Arduino UNO
1
u-blox gps neo 7m
1
Microchip Technology LM35DT
1
SparkFun TMP006 - Infrared Temperature Breakout
1
Modul Bluetooth HC-05
1
Sensor Ultrasonik HC-SR04 (Umum)
2
SparkFun ADXL345
1
Ducati Monster
1
SparkFun ProtoShield Kit
1
Solderless Breadboard Half Size
1
Baterai 9V (umum)
1
Klips Baterai 9V
1
Kabel jumper (umum)
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 menciptakan sesuatu yang mengeksploitasi teknologi terbaru terkait minat saya. Untuk Proyek ini saya memutuskan untuk menggabungkan kegemaran 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, saya membayangkan bagaimana saya dapat membangunnya menggunakan gadget favorit saya (Arduino) dan pengetahuan pemrograman saya.
Jadi saya memutuskan untuk mengembangkan sistem telemetri berbasis Arduino dan Azure, yang mudah direplikasi sehingga semua pecinta sepeda motor dapat memilikinya di motor mereka.
Seperti yang akan ditunjukkan di bawah, sistem telemetri ini akan dapat memperoleh informasi berikut tentang gaya berkendara Anda:
Kecepatan [Km/h]
Posisi GPS (Lintang/Bujur)
Informasi Satelit (Jumlah satelit, Hdop)
Ketinggian [meter]
Sudut Miring
Sudut Wheelie
Percepatan G pada 3 sumbu [m/s^2]
Suhu Eksternal [°C]
Suhu Ban Belakang [°C]
Absorber Kejutan Depan [cm]
Absorber Kejutan Belakang [cm]
Untuk melakukan itu saya menggunakan Arduino Uno R3, beberapa sensor, UWP yang diimplementasikan di Windows Phone dan beberapa layanan Azure.
Alur kerja dijelaskan dalam gambar berikut:
Fase 1 - Semua data telemetri diperoleh dari unit kontrol sekitar dua kali per detik (unit kontrol dipasang pada sepeda motor).
Fase 2 - Setiap kali data diperoleh, data dikirim melalui bluetooth dari Arduino ke Windows Phone.
Fase 3 - Data ditampilkan di Ponsel (untuk detail lebih lanjut silakan baca bagian "Perangkat Lunak") dan kemudian dikirim melalui jaringan 3G/4G ke Azure IoT HUB.
Fase 4 - Di azure ada Stream Analytics Job yang menerima data dari IoT HUB dan menyimpan informasi dalam database SQL Azure.
Fase 5 - Di azure telah diimplementasikan WebApp yang menggunakan data database SQL untuk menampilkan data telemetri secara real time (silakan baca bagian Web App)
Fase 6 - WebApp, menggunakan proses autentikasi dan menampilkan semua informasi telemetri dalam diagram. (Semua data diambil dari database sql azure menggunakan Entity Framework)
Fase 7 - Semua data yang disimpan di database sql azure diproses oleh Machine Learning untuk mendapatkan informasi tentang "gaya berkendara" Anda. Tujuan adalah memahami cara mengubah gaya berkendara Anda berdasarkan parameter telemetri untuk meningkatkan kinerja berkendara Anda.
Saya Pikir INI CUKUP KEREN!!! Mari kita mulai menjelaskan proyek
Pengaturan Hardware
Konfigurasi hardware saya ditunjukkan di bawah.
Pengaturan hardware saya terdiri dari:
1 x Arduino Uno R3
2 x Modul jarak ultrasonik HC-SR04, Digunakan untuk menentukan ekstensi absorber kejutan (Depan & Belakang)
1 x Sensor Temperatur Termopil Kontakless Infrared TMP006, digunakan untuk menentukan Suhu Ban (dapat mengukur Suhu Eksternal juga - Opsional)
1 x GPS-NEO7M, digunakan untuk menentukan Posisi GPS, kecepatan, ketinggian
1 x ADXL345, Digunakan untuk mengevaluasi Percepatan G pada 3 sumbu dan menghitung Sudut Miring dan Sudut Wheelie
1 x LM35DT untuk menentukan Suhu Eksternal
1 x HC-05, modul bluetooth, untuk berkomunikasi antara arduino dan ponsel windows
1 x Sumber daya (baterai umum atau power bank seluler)
LANGKAH 1 - Konektivitas Bluetooth
Saya menggunakan library SoftwareSerial untuk menghubungkan modul bluetooth dengan Arduino dan mengaktifkan komunikasi nirkabel dengan Windows Phone.
Modul Bluetooth HC-05 dipilih untuk tujuan ini, Ini adalah modul bluetooth class-2 dengan Profil Port Serial , yang dapat dikonfigurasi sebagai Master atau slave.
Langkah berikutnya adalah mengubah Nama Default perangkat bluetooth saya, Nama default adalah HC-05 ... itu tidak "menarik"
Anda sekarang siap untuk mengirim setiap string yang Anda inginkan melalui Bluetooth menggunakan baris perintah berikut:
... BTSerial.print("Hello Hackster"); ...
Komunikasi antara Windows Phone dan Arduino sekarang siap dan sangat mudah!
LANGKAH 2 - Komunikasi GPS
Hardware yang digunakan untuk tujuan ini adalah modul GPS-NEO7M , ini adalah modul GPS daya rendah yang memiliki 56 saluran dan menghasilkan pembaruan posisi yang tepat pada 10Hz.
Komunikasi antara Arduino dan Modul GPS dilakukan oleh library SoftwareSerial dan memanfaatkan library yang sangat menarik bernama TinyGPS++
Untuk menentukan nilai percepatan pada 3 sumbu dan untuk menghitung sudut roll dan pitch (Sudut Miring dan Wheelie), saya menggunakan ADXL345
ADXL345 adalah accelerometer 3 sumbu yang kecil, tipis, daya sangat rendah, dengan resolusi tinggi (13-bit) pengukuran hingga ±16 g. Data output digital diformat sebagai 16-bit twos complement dan dapat diakses melalui antarmuka digital SPI (3- atau 4-kabel) atau I2C .
Komunikasi antara Arduino dan sensor ADXL345 dilakukan menggunakan library ADXL345.h.
Sangat penting untuk memahami bahwa saat Anda menghubungkan sensor ini Anda akan dapat menentukan percepatan gravitasi pada 3 sumbu tetapi nilai belum langsung dikalibrasi. Anda perlu membuat kode untuk menetapkan OFFSET.
Saya memutuskan untuk menentukan "titik nol" pada loop pertama. Untuk melakukannya percepatan G pada loop pertama akan menjadi nilai referensi yang harus Anda kurangi dari pengukuran berikutnya.
// first loop to if (i == 0) { refXg = Xg; refYg = Yg; refZg = Zg; i = 1; } // subtract the zero point Xg = Xg - refXg; Yg = Yg - refYg; Zg = Zg - refZg + 1;
Lalu Anda harus menghitung Sudut Miring dan Sudut Wheelie berdasarkan komponen percepatan g.
Di bawah Anda dapat melihat 2 persamaan Matematika sederhana untuk melakukan itu:
Untuk menentukan Suhu Ban saya membutuhkan sensor yang karena alasan yang jelas tidak menyentuh ban. satu-satunya cara telah menggunakan sensor suhu Infrared. Untuk melakukan itu saya memutuskan untuk menggunakan sensor TMP006
TMP006 adalah sensor termopil MEMs terintegrasi sepenuhnya yang mengukur suhu objek tanpa harus dalam kontak langsung. Termopil menyerap energi infrarot pasif dari objek pada panjang gelombang antara 4 um hingga 16 um dalam bidang pandang yang ditentukan pengguna akhir.
Perubahan yang sesuai dalam voltase di seluruh termopil di-digitalkan dan dilaporkan melalui pengukuran sensor thermal die on-chip melalui I2C
Sekarang pertanyaannya adalah, di mana saya harus memosisikan sensor saya? Melihat datasheet Anda dapat menemukan informasi penting tentang jarak yang direkomendasikan antara sensor dan objek.
Anda harus mengamati aturan bahwa jarak perlu lebih kecil dari setengah radius sudut padat objek.
dengan kata lain, lebar ban saya adalah 160mm , setengah lebar akan menjadi radius (R) sudut padat, jadi hasil akhir R akan 80mm. Jadi jarak yang direkomendasikan adalah 40mm (atau kurang) , sama dengan R/2
Komunikasi antara Arduino dan TMP006 dilakukan menggunakan library SerialSoftware dan library Adafruit_TMP006.h
#include <SoftwareSerial.h> #include "Adafruit_TMP006.h" / Variables for TMP006 Functions ***************************************/ Adafruit_TMP006 tmp006; void setup() { } void loop() { // Baca suhu IR objek float objt = tmp006.readObjTempC(); // Baca suhu sensor (Suhu Eksternal) float diet = tmp006.readDieTempC(); }
LANGKAH 5 - Suhu Eksternal
Nilai suhu eksternal telah ditentukan menggunakan sensor LM35 (paket DT).
Seri LM35 adalah perangkat temperatur terpadu presisi 1 dengan output voltase yang berbanding lurus dengan suhu Centigrade.
Setiap derajat Centigrade menghasilkan peningkatan/penurunan voltase 10 mV
Nilai sensor telah ditentukan dengan membaca input analog Arduino (AI)
int TempExtPin = A1; // pilih pin input float celsius = 0, farhenheit = 0; // variabel suhu float millivolts; int sensor; [...] sensor = analogRead(TempExtPin); //Baca nilai LM35 millivolts = ( sensor / 1023.0) * 5000; //output Voltase millivolts celsius = millivolts / 10;
LANGKAH 6 - Posisi Ultrasonik
Tujuan menggunakan sensor ini adalah untuk menentukan ekskursi suspensi sepeda motor.
HC-SR04 mengukur waktu yang dibutuhkan gelombang suara untuk kembali setelah bertemu rinting. Bentuk gelombang suara yang dipancarkan adalah berbentuk kerucut dan hal yang sama berlaku untuk gelombang yang dipantulkan dari rinting.
Kecepatan gelombang suara di udara pada 20°C sekitar 343,4 m/s, dalam contoh ini untuk kesederhanaan kita akan menganggap nilai mendekati 340 m/s.
Dengan mempertimbangkan hukum kinematika S=V x t (dimana S: ruang atau perpindahan objek, V:kecepatan, t:waktu) kita dapat mengumumkan bahwa dalam kasus kita jarak 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 gelombang, rumus akhir di mana t adalah waktu yang dikembalikan dari sensor dalam cm/mikrodetik adalah:
S=0.034 x t/2
Di bawah Anda dapat melihat contoh yang dapat Anda coba untuk menentukan jarak objek.
digitalWrite( triggerPort, LOW ); // Kirim pulsa 10mikrodetik ke trigger digitalWrite( triggerPort, HIGH ); delayMicroseconds(10); digitalWrite(triggerPort, LOW); long duration = pulseIn( echoPort, HIGH ); long r = 0.034 * duration / 2;
Kode di atas sangat menggambarkan cara kerja sensor tetapi Anda akan menemukan bahwa kode ini sangat lambat dan performanya buruk.
Untuk proyek ini saya memutuskan untuk mencoba library baru bernama NewPing.h untuk detail lebih lanjut silakan kunjungi tautan ini dan lihat kode Arduino lengkap dari proyek ini.
Menggunakan library NewPing.h sangat mudah.
Sertakan library
definisikan port trigger dan echo dari HC-SR04
inisialisasi objek
panggil fungsi ReadPositionPing.
#include <NewPing.h> /******************************************* Definisikan Variabel untuk Fungsi HC RS04 *******************************************/ // Port HC-RS04 int triggerPort = 2; int echoPort = 3; // NewPing setup pin dan jarak maksimum NewPing sonar(triggerPort, echoPort, 200); void setup() {} void loop() { /*** BACA POSISI ***/ int Pos=ReadPositionPing(); } int ReadPositionPing() { unsigned int uS = sonar.ping(); return sonar.convert_cm(uS); }
Perangkat Lunak UWP
Perangkat lunak terdiri dari antarmuka pengguna yang terhubung ke unit kontrol melalui bluetooth. UI menampilkan semua data yang dikirim dari Arduino dan mengirim ke IoTHub nilai sensor.
Komunikasi serial antara Arduino dan UWP ditafsirkan dengan membaca dari string input.
Setiap String yang diterima divalidasi dengan memeriksa apakah berisi penanda START dan END. Jika string input diformat dengan benar, aplikasi akan memecah informasi dan menampilkannya pada Antarmuka Pengguna aplikasi.
Di bawah Anda dapat melihat contoh string yang dikirim dari Arduino yang berisi penanda START/END, string ini akan dipisah oleh karakter "pipe" untuk menentukan setiap nilai sensor:
di bawah definisi Array setelah pemisahan string yang dikirim:
Posisi 0 - Penanda START
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 - hh:MM.ss
Posisi 9 - kecepatan (Km/h)
Posisi 10 - ketinggian (m)
Posisi 11 - satelit (jumlah satelit)
Posisi 12 - hdop (jumlah satelit yang digunakan)
Posisi 13 - roll
Posisi 14 - pitch
Posisi 15 - Xg
Posisi 16 - Yg
Posisi 17 - Zg
Posisi 18 - Audio (Opsional-saat ini dinonaktifkan)
Posisi 19 - Jarak (m)
Posisi 20 - Suhu (Suhu Eksternal oleh LM35)
Posisi 21 - Suhu Ban (Suhu Ban dari TMP006)
Posisi 22 - Absorber Kejutan Depan (cm)
Posisi 23 - Absorber Kejutan Belakang (cm)
Posisi 24 - Penanda END
dari "Serial Monitor" di Arduino IDE Anda dapat melihat bagaimana cara kerja Kode Arduino:
Untuk mengelola semua data yang dikirim dari unit pusat melalui Bluetooth, saya telah mengembangkan Universal Windows Applications yang merupakan contoh yang 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 gauge yang digunakan untuk menampilkan kecepatan, sudut miring dan sudut Wheelie. Semua komponen G ditampilkan dan di kanan ada informasi tentang posisi GPS, suhu dan ekskursi absorber kejutan.
Cara Meluncurkan 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 meluncurkan aplikasi Universal Windows dari PC Windows 10 ke perangkat seluler Windows 10 mana pun. Ini memungkinkan pengguna untuk meluncurkan file .AppX ke perangkat yang terhubung melalui USB atau tersedia pada subnet yang sama tanpa memerlukan akses ke solusi Visual Studio lengkap.
LANGKAH 1:
Pertama-tama pindahkan perangkat seluler Anda ke "Developer Mode" (pergi ke UPDATE & SECURITY => FOR DEVELEVOPER).
setelah itu, hubungkan perangkat Anda melalui USB dan buatnya terlihat pada koneksi USB (kode PIN akan dikembalikan)
LANGKAH 2:
Klik kanan pada Project=>Store=>Create App Packages
LANGKAH 3:
Di wizard Create App Packages, pilih NO Jika Anda ingin membuat paket lokal dan klik NEXT. Setelah itu pilih platform prosesor yang diinginkan. Untuk tujuan kami pilih platform ARM dan klik CREATE.
Pada akhir proses pembuatan wizard memberi kita URL lokal di mana paket dibuat.
membuka url Anda akan menemukan file Appx yang tersedia untuk diluncurkan pada perangkat.
LANGKAH 4:
Buka Command prompt dan pindahkan fokus Anda ke C:\Program Files (x86)\Windows Kits\10\bin\x86\
(di mana AAA123 adalah kode PIN yang dikembalikan dari ponsel Anda yang terhubung ke USB dalam mode Asosiasi)
Pada akhir proses aplikasi akan terinstal di perangkat Anda dan Anda akan dapat "pin to start":
AZURE
Sekarang kami siap untuk menjelaskan cara mengonfigurasi layanan Azure. Untuk proyek ini akan diperlukan untuk membuat:
WebApp + SQL Azure
IoTHUB
Stream Analytics JOB
DeviceId yang akan digunakan untuk mengirim data ke IoTHUB.
OK GO! Apakah Anda memiliki akun AZURE?
Jika TIDAK, silakan pergi ke https://azure.microsoft.com/ dan buat satu.
Jika YA... BAGUS! Pergi ke https://portal.azure.com
LANGKAH 1 - Buat dan konfigurasikan IoT Hub:
IoTHUB adalah titik akses nilai telemetri ke Cloud.
Buat IoTHub Anda, Klik pada New => Internet of Think => IoT Hub dan isi kolom Hub dan klik Create
Selanjutnya, di dasbor Azure Anda, Anda mungkin melihat IoT HUB sedang di-deploy dan setelah beberapa detik IoT HUB Anda akan siap.
Klik pada tile baru di dasbor Anda dan pergi ke All settings blade.
Lihat Hostname IotHub Anda dan buat catatan:
Di blade Shared access policies, klik kebijakan iothubowner, dan kemudian salin dan buat catatan string koneksi di blade iothubowner
Oke... IoT hub Anda telah dibuat dengan sukses, Anda hampir siap untuk menggunakannya!
LANGKAH 2 - Buat dan konfigurasikan Stream Analytic
Stream Analytics bertujuan untuk membaca dan menulis semua data yang dikirim ke IoTHUB dan menyimpannya ke dalam tabel database.
Buat pekerjaan Stream Analytics baru:
Klik pada New => Internet of Think => Stream Analytics job
Isi semua bidang dan klik tombol Create.
Sekarang kami siap untuk mengonfigurasi Input/Output dan kueri pekerjaan streamAnalityncs.
Siapkan Input - Pilih Sumber. Dalam kasus kami sumbernya adalah IoTHub
Siapkan Output - Pilih tujuan. Dalam kasus kami outputnya adalah tabel dari database SQL Azure (Saya akan menunjukkan kepada Anda cara membuat sql db di langkah berikutnya)
LANGKAH 3 - Buat WebApp + SQL Azure
Pergi ke dasbor dan pilih WebApp+SQL (New => Networking => Web + Mobile => Web App + Sql)
Sekarang konfigurasikan webapp Anda dengan mengisi bidang berikut:
Nama Aplikasi
Pilih langganan
Pilih Grup Sumber Daya ( jika Anda tidak memiliki satu buat Grup Sumber Daya pertama Anda)
Pilih App Service Plan 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, kami sekarang siap untuk membuat Kueri StreamAnalitycs. Klik pada tile StreamAnalyticJob dan pilih "Query". Masukkan kueri Anda di panel kanan.
Seperti yang Anda lihat, kueri menggambarkan alur kerja proses. Tangkap data dari "MyTelemetryInputHub" dan simpan ke "SqlAzureMyTelemetry" ... mudah&menakjubkan!!
Pada akhirnya, kami hanya perlu memulai PEKERJAAN dengan menekan tombol MULAI.
Buat DeviceId untuk HUB
Langkah ini diperlukan untuk membuat koneksi antara perangkat saya dan IoTHUB. Kita perlu membuat identitas perangkat baru dan menambahkannya ke registry ID dari IoT HUB.
Untuk informasi lebih lanjut silakan kunjungi tautan berikut
Untuk menghasilkan satu deviceId, Anda harus membuat aplikasi Konsol di Visual Studio.
Di jendela NuGet Package Manager, cari dan instal paket Microsoft.Azure.Devices.
Tambahkan kode di bawah ke dalam aplikasi Konsol Anda, ganti IoTHub String Koneksi Anda dan pilih alias deviceId (dalam kasus saya perangkat adalah MyDucatiMonsterDevice).
Jalankan aplikasi konsol (tekan F5) dan buat kunci perangkat Anda!
WEB application
Pada titik ini dari proyek saya memikirkan bagaimana saya dapat melihat data telemetri saya dan bagaimana saya dapat menampilkannya kepada teman-teman saya dan membagikan hasilnya di media sosial. untuk melakukan itu saya memutuskan untuk membuat situs web responsif di ASP .NET
Situs web terdiri dari dasbor yang berisi semua telemetri saya. Data telah dibaca menggunakan Entity framework dari SQL Azure.
Anda dapat menemukan situs web melalui url berikut:
Telah dibuat akun untuk semua Pengguna Hackster, Masuk menggunakan kredensial user/psw berikut:
User ID: demo Password: demo
Situs web terlihat seperti ini:
Dan terlihat seperti ini di versi seluler:
Saat Anda membuat aplikasi web di azure menggunakan paket Gratis, nama domain akan seperti ini:
<websitename>.azurewebsites.net
Untuk mengubah nama domain Anda harus membeli satu dan di azure ini sangat mudah! Ikuti langkah-langkah ini:
Pergi ke dasbor Azure Anda dan klik pada Tile aplikasi web Anda.
Pilih "Custom domains and SSL" dan klik pada "Buy domains".
Isi semua bidang (tentang nama domain dan informasi kontak Anda)
Penghubungan Ducati Monster
Sekarang saatnya untuk memperkenalkan sepeda motor saya, ini adalah Ducati Monster 695 saya yang untuk proyek ini telah menjadi cavy.
Di bawah beberapa gambar tentang Hardware (unit kontrol) saya yang dipasang di papan atas.
untuk mengukur suhu ban saya membuat bracket yang diklemkan di belakang roda.
Satu Modul jarak ultrasonik HC-SR04 telah dipasang di bawah lampu depan. Ini mengukur jarak antara lampu depan dan penutup lama depan.
Modul jarak ultrasonik yang lain telah dipasang di bawah kursi sepeda motor untuk menentukan absorber kejutan belakang dengan mengukur jarak antara kursi dan ban belakang.
Unit pusat yang berisi Arduino, GPS, Accelerometer dan sensor suhu eksternal telah dipasang di belakang kursi.
Dan pada akhirnya, setelah penghubungan, sepeda motor saya terlihat seperti ini
Machine Learning
Ide terakhir dari proyek ini telah mencoba untuk memahami apakah ada korelasi antara data telemetri untuk mencoba memahami cara meningkatkan gaya berkendara saya.
Contoh data saya tidak dapat dihubungkan karena saya membuat rute yang berbeda setiap kali dan kondisi lalu lintas tidak pernah sama. Saya pikir kondisi yang baik adalah menggunakan sistem di balap kayu. Saya Bayangkan bahwa dalam balap nyata bisa berguna untuk memahami dari telemetri apakah Anda dapat meningkatkan kecepatan atau jika Anda harus menurunkan kecepatan berdasarkan nilai output.
Machine Learning (ML) mengembangkan kekuatan wawasan perangkat lunak tentang data, memecahkan masalah dengan memberikan informasi yang mewakili evolusi tertentu. ML memahami bagaimana fenomena yang diberikan akan berkembang berdasarkan data dalam pengetahuannya.
Pendekatan pertama menggunakan ML adalah untuk melakukan Experiments. Menggunakan data, Anda dapat bermain dan dapat melakukan analisis dengan tujuan menyelidiki fenomena yang kami minati.
Oke mari kita pergi untuk menemukan Azure Machine Learning
Pergi ke https://studio.azureml.net dan masuk menggunakan akun Azure Anda.
Di sisi kiri halaman klik pada "Studio"
Anda akan diarahkan ke Dasbor pribadi Anda dan sekarang Anda siap untuk membuat experiments
Di blade experiments, Klik BARU (di tombol kiri halaman).
Langkah pertama adalah Mengimpor data yang ingin Anda gunakan dalam ML Anda. Dalam kasus saya saya mengimpor data dari SQL Azure.
Di dalam Tabel saya semua data adalah varchar jadi saya perlu mengonversinya menjadi float dan mengecualikan beberapa data buruk untuk hanya memiliki catatan kualitas terbaik. Di bawah Anda dapat melihat kueri yang digunakan untuk mengimpor 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) _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
Kemudian tambahkan elemen SPLIT DATA untuk menggunakan beberapa data untuk Train ML Anda dan tentukan persentase data yang akan digunakan untuk konfigurasi.
Sebagian data akan digunakan untuk mengonfigurasi templat dan sebagian lainnya untuk melihat apakah model Anda berfungsi dengan baik. Ini akan memungkinkan saya untuk menilai kebaikannya.
Tambahkan Train Model dan tentukan apa bidang yang ingin Anda duga oleh model dan tentukan algoritma apa yang akan digunakan untuk pelatihan Anda.
Sekarang kita memverifikasi bagaimana algoritma berperilaku dengan memberikan perasaan tentang kebaikannya, untuk melakukan itu kita perlu menggunakan "Score Model". SM menerima input 2 sumber, yang pertama adalah dari Train Model dan yang kedua dari SPLIT DATA.
Pada akhirnya kami siap untuk mengestimasi model berdasarkan data uji, membandingkannya dengan yang belum digunakan (Evaluate Model).
Dokumentasi Resmi tentang "Evaluate Model" dapat ditemukan di sini
Di bawah ini ada contoh eksperimen yang berguna untuk membandingkan 2 algoritma menggunakan Evaluation Model, 2 algoritma adalah Two-class decision jungle dan Two-class decision forest .
Saat Anda melewati model skor untuk algoritma klasifikasi "dua kelas", model evaluasi menghasilkan metrik yang ditunjukkan di bawah:
Model Klasifikasi
Metrik di atas dilaporkan untuk mengevaluasi model klasifikasi.
(Semua metrik dilaporkan tetapi model diberi peringkat berdasarkan metrik yang Anda pilih untuk evaluasi)
Akurasi mengukur keutuhan model klasifikasi sebagai proporsi hasil benar terhadap total kasus. Akurasi = (TP + TN) / (TP + TN + FP + FN)
Presisi adalah proporsi hasil benar terhadap semua hasil positif. Presisi = TP / (TP + FP)
Recall adalah fraksi semua hasil benar yang dikembalikan oleh model. Recall = TP / (TP + TN)
F-score dihitung sebagai rata-rata bobot dari presisi dan recall antara 0 dan 1, di mana nilai F-score ideal adalah 1. F1 = 2TP / (2TP + FP + FN)
AUC mengukur area di bawah kurva yang dipetakkan dengan positif sebenarnya pada sumbu y dan positif palsu pada sumbu x. Metrik ini berguna karena memberikan satu angka yang memungkinkan Anda membandingkan model dengan jenis yang berbeda.
Seperti yang Anda lihat, algoritma Two-class decision forest memiliki Akurasi, Presisi, Recall dan Skor F1 yang mendekati nilai 1, jadi saya asumsi model saya dijelaskan dengan baik, HEBAT!!!
Untuk detail lebih lanjut tentang Evaluate Model silakan kunjungi LINK berikut
Eksperimen Prediktif:
Saatnya untuk memindahkan perhatian kami pada fungsionalitas prediktif machine learning.
Eksperimen Pelatihan akan dikonversi menjadi eksperimen prediktif, fitur ini memungkinkan untuk mengintegrasikan dalam aplikasi lain kesempatan untuk menggunakan model Anda dan berdasarkan model Anda memiliki Prediksi.
Untuk melakukan itu, telah dibuat Eksperimen baru, sumber data adalah SQL Azure tetapi kali ini tabel yang digunakan adalah yang baru. Saya mencoba mengklasifikasikan data berdasarkan nilai telemetri.
Sekarang data saya terlihat seperti ini dan seperti yang Anda lihat ada kolom baru bernama Skor yang mewakili klasifikasi saya:
Buat eksperimen seperti di bawah, pilih Train Model dan tambahkan algoritma Multiclass:
JALANKAN eksperimen dan lihat hasilnya:
Pilih Train Model dan klik pada SET UP WEB SERVICE => Predictive Web Service
Tunggu beberapa detik dan layanan prediktif Anda akan siap. Di bawah Anda dapat melihat tata letak Eksperimen Prediktif saya:
Jalankan model ini dan kemudian luncurkan layanan web dengan menekan tombol DEPLOY WEB SERVICE
Layanan Anda akan segera siap digunakan dan dasbor akan muncul, berisi tombol "TEST" di mana Anda dapat memasukkan data secara manual dan menguji layanan Anda
Klik tombol TEST dan isi semua bidang, gunakan beberapa nilai palsu dan lihat hasil Prediktif:
Seperti yang Anda lihat hasilnya sama dengan "SAFE DRIVING", ini berarti layanan Prediktif saya telah memprediksi bahwa gaya berkendara saya Aman dan tidak diperlukan tindakan.
Jika Hasilnya misalnya "HIGH STRESS HIGH SPEED" berarti saya harus mengurangi kecepatan!
Kesimpulan tentang ML:
dalam bagian ini kami memahami beberapa hal.
Bagaimana mengonfigurasi eksperimen dalam lingkungan ML azure
kami menemukan bahwa algoritma Two-class decision forest dengan baik menggambarkan telemetri sepeda motor saya dan kami melatih ML untuk eksperimen prediktif menggunakan algoritma Multiclass decision forest
Bagaimana mengonversi Model kami menjadi Layanan Web dengan membuat eksperimen prediktif
kami menemukan beberapa informasi berguna tentang gaya berkendara saya. Infact seperti yang Anda lihat dari diagram di bawah:
Saya lebih suka miring ke kanan dan sudut miring saya tidak bergantung pada suhu ban dan dari kecepatan. Itu berarti ban saya berkualitas tinggi dan tambahan saya memahami bahwa sepeda motor saya lebih suka Wheelie ketika suhu ban lebih dari 35°C
Kesimpulan Akhir
Dalam proyek ini kami mencakup banyak area teknologis.
Kami menemukan bagaimana mungkin untuk membuat Hardware yang menyenangkan menggunakan Arduino dan beberapa sensor dengan biaya kurang dari 60$ dan menggunakan banyak layanan yang disediakan oleh microsoft.
Kami belajar betapa mudahnya menggunakan Azure dan betapa menariknya menggunakan Microsoft Azure Machine Learning Studio suite.
Telah direalisasikan prototip yang tentunya memerlukan perbaikan tetapi saya pikir ini adalah titik awal yang baik untuk pengembangan masa depan dari setiap orang yang antusias tentang C#, Azure, Arduino dan MotorBike.
Pengembangan Masa Depan yang Mungkin
Untuk meningkatkan prototip ini saya pikir akan berguna untuk menerapkan beberapa hal:
Tentang aplikasi seluler (UWP), dalam kasus tidak ada jaringan 3G/4G yang tersedia, data hilang karena saya tidak dapat mengirim data ke azure. Akan berguna mengembangkan logika buffering yang dalam kasus "tidak ada jaringan" yang tersedia, menyimpan data dan mengirimnya pada waktu lain.
Buat aplikasi untuk platform seluler menggunakan Xamarin, akan keren memiliki aplikasi yang dapat berjalan di sistem operasi Android dan iOS juga.
Gunakan sensor yang lebih presisi dan tingkatkan performa/akurasi.
Buat unit pusat lebih kecil, mungkin menggunakan Arduino MKR1000.
Buat Webapp media sosial untuk membagikan perjalanan dan telemetri sepeda motor Anda untuk menyarankan pengguna pengemudi sepeda motor tentang tikungan berbahaya dan meningkatkan keselamatan.
Ubah sumber Machine Learning menggunakan Steam Analytics. Dalam kasus saya saya lebih suka menggunakan sumber data sql AZURE karena tidak mungkin mengemudi sepeda motor dan mengembangkan ML dalam waktu yang sama :)
Alur kerja cabang baru:
Cabang baru terdiri dari mengirim kembali ke perangkat, melalui IoTHub, informasi tentang layanan ML prediktif.
Saat nilai kecepatan lebih besar dari 100 km/h pekerjaan stream analytics baru akan mengirim data telemetri ke Event Hub.
Layanan cloud membaca data ini dari EventHub dan mengirim permintaan ke layanan ML prediktif untuk mendapatkan skor tentang Gaya Berkendara.
Layanan Cloud akan mengirim kembali skor ke IoTHub, dan IoTHub akan mengirimnya kembali ke perangkat (Windows Phone dalam kasus ini)
... dan sekarang NIKMATI !! :-) silakan hubungi saya untuk pertanyaan dan tips apa pun.
Kode
Kode Aplikasi UWP C#
https://github.com/lentzlive/MotorbikeArduino
KODE ARDUINO - Bike Telemetry
https://github.com/lentzlive/BikeTelemetryArduino
Skematik
diagram rangkaian sistem Telemetri. On board schedaMotorbikeProject.fzz