Kontrol Arduino Rover menggunakan Firmata dan Pengontrol Xbox One
Komponen dan persediaan
Pengontrol Microsoft Xbox dan Adaptor Nirkabel untuk Windows
Pengontrol ini dapat ditambahkan ke PC Windows menggunakan adaptor
×
1
Modem Bluetooth SparkFun - BlueSMiRF Silver
Atau modul Bluetooth yang identik (HC-05, HC-06)
×
1
Arduino UNO
×
1
Aplikasi dan layanan online
Microsoft Windows 10 IoT Core
Aplikasi ini adalah perantara antara sketsa Firmata standar dan pengontrol Xbox One
Tentang proyek ini
Beberapa bulan yang lalu saya membeli rover kecil (dikendalikan oleh Arduino Uno) dengan harga yang sangat bagus. Perlengkapannya sangat lengkap:Sasis mobil, 2 Roda Mobil, 2 Motor DC Gear, UNO R3, Pengontrol Motor H-Bridge Ganda L298N, dan beberapa komponen lainnya.
Penjelajah ini dimaksudkan untuk diprogram untuk operasi otonom. Oleh karena itu sensor ultrasonik dan servo juga ditambahkan dalam kit. Juga pelindung sensor Arduino 5 yang bagus ada di dalam kit. Ya, itu benar-benar murah;-)
Tetapi ide saya adalah menggunakan Pengontrol Xbox One dan protokol Firmata untuk mengemudikan yang ini sendiri atau salah satu putra saya. Dan itu bekerja dengan sangat baik!
Berikut adalah video dari solusi terakhir:
Bagian utama yang digunakan dalam proyek ini adalah:
Kit rover (kami menggunakan untuk demonstrasi ini hanya sebagian dari suku cadang:pelat dasar, roda, motor, Arduino Uno, dudukan baterai 9 volt, dan L298N Dual H-Bridge Motor Controller)
Tempat baterai ekstra untuk 6 baterai AA
Modul Bluetooth (HC-06)
Pengontrol Xbox One dengan adaptor nirkabel untuk windows (untuk menghubungkannya ke laptop)
Laptop (dengan Windows 10 + VS2015 + dongle Bluetooth)
Lampu berkedip hanya untuk efek dramatis
Membuat perangkat
Membangun kit tidak terlalu sulit. Meskipun manual konstruksinya dalam bahasa Cina, semuanya tampak cukup logis. Hanya ada satu pelat dasar sehingga saya harus meletakkan beberapa komponen di atasnya dan beberapa di bawah (sekarang pengontrol motor):
Dalam gambar ini dua dudukan baterai yang berbeda ditambahkan. Selama pemrograman, saya menemukan bahwa saya harus menggunakan catu daya terpisah hanya untuk menjalankan motor.
Menghubungkan motor – tata letak pin pengontrol
Yang terpenting dari perangkat keras kali ini, bukanlah arduino Uno, melainkan pengontrol motor.
“L298 adalah driver H-bridge ganda untuk motor DC brush dan motor stepper. Ini mendukung rentang tegangan pengoperasian yang lebar dan dapat menghasilkan 2 A per saluran dalam paket lubang-lubang yang dapat diakses untuk proyek mandiri.”
Pengontrol ini akan mengontrol kecepatan dan arah masing-masing dari kedua motor tersebut, menggunakan sinyal yang berasal dari Arduino.
Tata letak pin Pengendali Motor H-Bridge Ganda L298N adalah:
Plus + motor DC 1
Minus – motor DC 1
Daya Masuk. Saya mensuplai 9 volt dari tempat baterai terpisah
Hal yang sama. Terhubung ke dudukan baterai saya yang terpisah dan Arduino
Matikan listrik . Dapat menghasilkan 5 volt (tidak digunakan . Arduino saya mendapat daya dari dudukan baterai lain)
ENA terhubung ke Arduino D10. Port ini mampu PWM (putih)
IN1 terhubung ke Arduino D9. (abu-abu)
IN2 terhubung ke Arduino D8. (ungu)
IN3 terhubung ke Arduino D7. (biru)
IN4 terhubung ke Arduino D6. (hijau)
ENB terhubung ke Arduino D5. Port ini mampu PWM (kuning)
Plus + motor DC 2
Minus – motor DC 2
Pelompat di sebelah 2 dan 3TIDAK dihapus karena saya tidak melebihi daya input lebih dari 12 volt (sampai 35 volt) (jumper tidak ditandai pada gambar)
Catatan:pengontrol memiliki catu daya sendiri. Arduino juga memilikinya. Agar semuanya tetap berjalan (tanpa meledak, beri mereka kesamaan . Lihat butir 4 di atas)
Menghubungkan motor – tata letak pin Arduino
Menghubungkan Arduino cukup mudah. Kami menghubungkan ground dan 5 volt catu daya ke Arduino. Dan kami menghubungkan enam jalur (ENA, IN1-4 dan ENB) ke pin D10 hingga D5.
Harus jelas bahwa port 7 dan 8 (dan 9 dan 10 untuk motor lain) hanyalah port GPIO biasa. Ini akan digunakan untuk arah motor. Jika kedua port (mis. 7 dan 8) LOW, motor tidak akan melakukan apa-apa (berhenti). Jika yang satu TINGGI dan yang lain RENDAH, motor akan berjalan dalam satu arah. Jika terhubung sebaliknya (yang pertama disetel ke RENDAH dan yang lainnya ke TINGGI) motor yang terhubung akan berjalan ke arah lain.
Tapi .. hanya mengatur pin ini tidak akan menghasilkan apa-apa. Belum ada bagian yang bergerak!
Keajaiban akan datang dari pin 5 dan 10. Ini adalah pin 'khusus' yang dapat menghasilkan sinyal PWM. Menyetel nilai antara 0 dan 255 akan mengakibatkan motor berjalan SANGAT lambat (berhenti) atau pada kecepatan tinggi.
Catatan:Setiap port pada Arduino Uno yang mampu PWM ditandai dengan tilde (~).
Menghubungkan Bluetooth
Modul Bluetooth yang saya gunakan hanya perlu dihubungkan ke port RX dan TX (melintasi batas) dan membutuhkan daya 5 volt dan ground dari Arduino.
Sketsa Firma di Arduino
Sketsa Firma "StandardFirmata" adalah semua yang kita butuhkan di Arduino! Dapatkan saja dari contoh Arduino IDE dan unggah (mungkin Anda perlu melepas pin TX/RX terlebih dahulu untuk menyelesaikan unggahan).
Catatan:karena kurangnya kualitas modul Bluetooth saya, saya selalu menurunkan baudrate yang di-hardcode di dalam sketsa, dan menyetelnya ke 9600.
Tuan-tuan, nyalakan mesin Anda
Atau, uji koneksi…
Jadi mengapa saya menggunakan Firma? karena itu mudah. Seberapa mudah? Sangat mudah. Dan itu bahkan bisa dilakukan tanpa pemrograman. Cukup mulai aplikasi Windows Remote Arduino Experience (tersedia di toko dan juga berfungsi di perangkat Windows 10 Mobile).
Pertama, Anda harus menyambungkan ke modul Bluetooth HC-6 yang sudah dipasangkan.
Saat dipasangkan, buka halaman PWM. Aktifkan pin 5 digital dan beri nilai, katakanlah, 128.
Hati-hati:langkah selanjutnya akan membuat motor Anda berjalan. Helm dan roda dari tepung. Anda akan tahu mengapa saat melihatnya.
Kemudian pergi ke halaman Digital. Dan balikkan sakelar pin digital 6.
Sekarang, jika semuanya terhubung dan berjalan, salah satu motor akan berputar!
Jika demikian, Anda dapat memeriksa kecepatan lainnya (menggunakan nilai PWM yang lebih tinggi atau lebih rendah) atau mengubah arahnya (setel pin digital 6 ke 0 volt dan pin digital 7 ke 5 volt).
Dan di sana Anda memilikinya. Anda dapat mengontrol roda itu!
Tapi ada lagi, hal yang sama berlaku untuk pin 10 (PWM) dan pin digital 9 dan pin digital 8.
Kedua roda berjalan. Sekarang mulai coding…
Aplikasi UWP sebagai pembuat jodoh
Harus jelas bahwa kita memerlukan aplikasi UWP baru antara pengontrol Xbox One dan rover.
Saya sudah membuat blog tentang menggunakan pengontrol Xbox One di sini. Kali ini kita akan menggabungkan pengetahuan itu dengan out rover.
Mari kita lihat antarmuka aplikasi UWP kami:
Ini cukup membosankan, dua tombol dan satu blok teks. Saya tidak akan melakukan apa-apa lagi, pertama-tama menghubungkan ke Arduino menggunakan Firmata. Dan setelah koneksi dibuat, tombol pengontrol harus memulai satu loop raksasa untuk membaca input pengontrol dan mengubahnya menjadi perintah yang berguna.
Dan yang ingin kami buat adalah kontrol tangki klasik ini dengan dua pegangan. Yang kita butuhkan hanyalah memeriksa dua stik pada pengontrol Xbox One. Memindahkannya ke depan dan ke belakang juga akan menghidupkan motor yang sesuai ke depan dan ke belakang:
Catatan:Jika Anda memulai aplikasi UWP baru, jangan lupa untuk menambahkan kemampuan Bluetooth. Dan Anda harus menginstal paket nuget untuk Firma.
Pertama kita tambahkan cuplikan XAML (lihat bagian kode untuk kode sumber Xaml) di kisi bentuk utama sehingga kita memiliki beberapa tombol.
Selanjutnya kita tambahkan kode di belakang (lihat bagian kode untuk kode sumber C#) dari formulir utama. Saya pada dasarnya dibagi menjadi dua bagian. Pertama kita membuat koneksi melalui Bluetooth dengan protokol Firma. Selanjutnya kita mulai mendengarkan masukan pada pengontrol Xbox One.
Dalam lingkaran untuk memeriksa kontrol, kami memutuskan apakah stik jempol mengarah ke depan atau ke belakang atau berada dalam kisaran 'berhenti'. Setelah itu kita putuskan berapa nilai pin PWM tersebut.
Sangat menarik untuk melihat bahwa menulis nilai PWM direpresentasikan dalam Firmata sebagai menulis nilai analog ke port digital. Tidak ada metode PWM khusus di kelas Arduino.
Saya telah menambahkan dua metode "ArduinoDigitalWrite" dan "ArduinoAnalogWrite" untuk mencegah penulisan nilai yang sama berulang-ulang ke Arduino. Ini akan mengacaukan komunikasi dan menurunkan kinerja Arduino. (Dalam desain yang jauh lebih kaya, saya menambahkan bel. Tanpa mengabaikan perintah duplikat, kinerja bel sangat buruk dan tidak enak didengar).
Ketika motor mendapatkan pulsa PMW rendah, motor tidak langsung mulai berjalan, akan merengek dengan suara yang sangat khas. Ini adalah perilaku normal. Dan begitulah cara saya mengetahui bahwa saya harus menambahkan dua sumber daya. Pertama kali saya menghubungkan semuanya, saya pikir pengontrolnya rusak. Tidak ada yang terjadi. Sampai saya mencabut salah satu motor dan yang lainnya mulai merengek.
Jadi begitulah cara kerjanya:
Catatan kaki:lampu berkedip tidak hanya untuk efek dramatis. Setiap kali kreasi Anda mulai bergerak, harap perhatikan keamanannya. Alat itu bodoh, Anda tidak! Oleh karena itu, saya telah meletakkan lampu ini di atasnya.
Kode
Kontrol Xaml untuk memulai komunikasi
Kode-Di belakang formulir utama aplikasi UWP
Xaml mengontrol untuk memulai komunikasisnippet
Rekatkan ini ke formulir utama aplikasi UWP baru Anda
Kode-Di belakang formulir utama aplikasi UWPC#
Kode ini terhubung ke rover menggunakan Firmata dan melewati perintah Kontroler Xbox One