Kendalikan Rover Arduino dengan Mulus menggunakan Firmata dan Gamepad Xbox One
Komponen dan perlengkapan
Microsoft Xbox Controller dan Wireless Adapter untuk Windows
Kontroler ini dapat ditambahkan ke PC Windows menggunakan adapter
×
1
SparkFun Bluetooth Modem - BlueSMiRF Silver
Atau modul Bluetooth identik (HC-05, HC-06)
×
1
Arduino UNO
×
1
Aplikasi dan layanan online
Microsoft Windows 10 IoT Core
Aplikasi ini adalah perantara antara skets Firmata standar dan kontroler Xbox One
Tentang proyek ini
Beberapa bulan lalu saya membeli rover kecil (dikontrol oleh Arduino Uno) dengan harga sangat baik. Kitnya sangat lengkap: Chassis mobil, 2 Roda Mobil, 2 Motor DC Gear, UNO R3, Pengontrol Motor Dual H-Bridge L298N dan beberapa komponen lainnya.
Rover ini dimaksudkan untuk diprogram untuk operasi otonom. Oleh karena itu sensor ultrasonik dan servo juga ditambahkan dalam kit. Juga sensor shield Arduino 5 yang bagus ada dalam kit. Ya, itu adalah koin yang sangat menguntungkan ;-)
Tapi ide saya adalah untuk menggunakan baik Kontroler Xbox One dan protokol Firmata untuk mengemudikan ini sendiri atau salah satu putra saya. Dan itu bekerja sangat bagus!
Ini adalah video dari solusi akhir:
Bagian utama yang digunakan dalam proyek ini adalah:
Kit rover (kita hanya menggunakan subset bagian untuk demonstrasi ini: plat dasar, roda, motor, Arduino Uno, tampungan baterai 9 volt dan Pengontrol Motor Dual H-Bridge L298N)
Tampungan baterai ekstra untuk 6 baterai AA
Modul Bluetooth (HC-06)
Kontroler Xbox One dengan adapter nirkabel untuk Windows (untuk menghubungkannya ke laptop)
Laptop (dengan Windows 10 + VS2015 + dongle Bluetooth)
Lampu kilat untuk efek dramatis saja
Membangun kit
Membangun kit tidak sulit. Meskipun manual konstruksi dalam bahasa Cina, semuanya terlihat cukup logis. Hanya ada satu plat dasar jadi saya harus meletakkan beberapa komponen di atasnya dan beberapa di bawahnya (sekarang pengontrol motor):
Dalam gambar ini dua tampungan baterai berbeda ditambahkan. Selama pemrograman saya menemukan bahwa saya harus menggunakan sumber daya terpisah hanya untuk menggerakkan motor.
Menghubungkan motor – tata letak pin pengontrol
Jantung perangkat keras kali ini, bukan Arduino Uno tetapi pengontrol motor.
“L298 adalah driver H-bridge dual untuk motor DC dengan brush dan motor stepper. Ini mendukung rentang tegangan operasi yang luas dan dapat menghasilkan 2 A per saluran dalam paket through-hole yang dapat diakses untuk proyek DIY.”
Pengontrol ini akan mengontrol kecepatan dan arah setiap motor dua, menggunakan sinyal yang datang dari Arduino.
Tata letak pin Pengontrol Motor Dual H-Bridge L298N adalah:
Plus + dari motor DC 1
Minus – dari motor DC 1
Power IN. Saya menyuplai 9 volt dari tampungan baterai terpisah
Ground umum. Terhubung ke tampungan baterai terpisah saya dan Arduino
Power out. Dapat menghasilkan 5 volt (tidak digunakan. Arduino saya mendapat daya dari tampungan 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 + dari motor DC 2
Minus – dari motor DC 2
Jumper di samping 2 dan 3TIDAK dicabut karena saya tidak melebihi daya input lebih dari 12 volt (hingga 35 volt) (jumper tidak ditandai dalam gambar)
Catatan: pengontrol memiliki sumber daya sendiri. Arduino juga memiliki satu. Untuk menjaga agar tetap berjalan (tidak meledakkan sesuatu, berikan mereka ground umum. Lihat poin 4 di atas)
Menghubungkan motor – tata letak pin Arduino
Menghubungkan Arduino cukup sederhana. Kami menghubungkan ground dan 5 volt dari sumber daya ke Arduino. Dan kami menghubungkan enam garis (ENA, IN1-4 dan ENB) ke pin D10 sampai D5.
Harus jelas bahwa port 7 dan 8 (dan 9 dan 10 untuk motor lain) hanyalah port GPIO reguler. Ini akan digunakan untuk arah motor. Jika kedua port (mis. 7 dan 8) LOW, motor tidak akan melakukan apa pun (berhenti). Jika satu HIGH dan yang lain LOW motor akan berjalan di satu arah. Jika terhubung dengan cara lain (yang pertama diatur ke LOW dan yang lain ke HIGH) motor yang terhubung akan berjalan di arah lain.
Tapi.. hanya mengatur pin ini tidak akan menghasilkan apa pun. Belum ada bagian yang bergerak!
Magis akan datang dari pin 5 dan 10. Ini adalah pin ‘khusus’ yang dapat menghasilkan sinyal PWM. Mengatur nilai antara 0 dan 255 akan menghasilkan motor berjalan SANGAT lambat (berhenti) atau dengan 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 (silangkan garis) dan memerlukan daya 5 volt dan ground dari Arduino.
Skets Firmata pada Arduino
Skets Firmata “StandardFirmata” adalah semua yang kita butuhkan pada Arduino! Cukup ambil dari contoh Arduino IDE dan unggah (mungkin Anda perlu mencabut TX/RX terlebih dahulu untuk menyelesaikan pengunggahan).
Catatan: karena kualitas modul Bluetooth saya yang buruk, saya selalu menurunkan baudrate yang dikodekan keras di dalam skets, dan mengatur ke 9600.
Saudara, nyalakan mesin Anda
Atau, uji koneksi…
Jadi mengapa saya menggunakan Firmata? karena mudah. Seberapa mudah? Sangat mudah. Dan itu bahkan dapat dilakukan tanpa pemrograman. Cukup jalankan aplikasi Windows Remote Arduino Experience (tersedia di toko dan juga bekerja pada perangkat Windows 10 Mobile).
Pertama Anda harus terhubung ke modul Bluetooth HC-6 yang sudah dipasangkan.
Setelah dipasangkan, pergi ke halaman PWM. Aktifkan pin digital 5 dan berikan nilai, katakanlah, 128.
Hati-hati: langkah berikutnya akan membuat motor berjalan. Helm di atas dan roda dari lantai. Anda akan tahu mengapa saat melihatnya.
Lalu pergi ke halaman Digital. Dan balik saklar pin digital 6.
Sekarang, jika semuanya terhubung dan berjalan, salah satu motor akan berputar!
Jika demikian, Anda dapat memeriksa kecepatan lain (menggunakan nilai PWM yang lebih tinggi atau lebih rendah) atau mengubah arah (setel pin digital 6 ke 0 volt dan pin digital 7 ke 5 volt).
Dan itulah. 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 mengkode…
Aplikasi UWP sebagai pencocok
Harus jelas kita memerlukan aplikasi UWP baru antara Kontroler Xbox One dan rover.
Saya sudah menulis blog tentang menggunakan Kontroler Xbox One di sini. Kali ini kita akan menggabungkan pengetahuan itu dengan rover kita.
Mari lihat antarmuka aplikasi UWP kita:
Cara ini agak membosankan, dua tombol dan sebuah blok teks. Saya tidak akan memiliki lebih banyak pekerjaan kecuali pertama terhubung ke Arduino menggunakan Firmata. Dan setelah koneksi dibuat, tombol kontroler akan harus memulai satu loop besar untuk membaca input kontroler dan mengubahnya menjadi perintah yang berguna.
Dan apa yang ingin kita buat adalah kontrol tank klasik dengan dua pegangan. Yang kita butuhkan hanyalah memeriksa dua jempol pada Kontroler Xbox One. Memindahkannya maju dan mundur juga akan memulai motor yang sesuai maju dan mundur:
Catatan: Jika Anda memulai aplikasi UWP baru, jangan lupa untuk menambahkan kemampuan Bluetooth. Dan Anda harus menginstal paket nuget untuk Firmata.
Pertama kita tambahkan cuplikan XAML (lihat bagian kode untuk kode sumber XAML) dalam grid formulir utama jadi kita punya beberapa tombol.
Selanjutnya kita menambahkan kode di belakang (lihat bagian kode untuk kode sumber C#) dari formulir utama. Pada dasarnya terbagi menjadi dua bagian. Pertama kita membuat koneksi melalui Bluetooth dengan protokol Firmata. Selanjutnya kita mulai mendengarkan input pada Kontroler Xbox One.
Dalam loop untuk memeriksa kontrol, kita memutuskan apakah jempol mengarah ke depan atau ke belakang atau berada dalam rentang ‘berhenti’. Setelah itu kita memutuskan nilai apa yang akan diberikan untuk pin PWM.
Menarik untuk melihat bahwa penulisan nilai PWM direpresentasikan dalam Firmata sebagai penulisan nilai analog ke port digital. Tidak ada metode PWM khusus dalam kelas Arduino.
Saya telah menambahkan dua metode “ArduinoDigitalWrite” dan “ArduinoAnalogWrite” untuk mencegah penulisan nilai yang sama berulang kali ke Arduino. Ini akan membingungkan komunikasi dan menurunkan kinerja Arduino. (Dalam desain yang jauh lebih kaya saya menambahkan buzzer. Tanpa mengabaikan perintah duplikat kinerja buzzer sangat buruk dan menakutkan untuk didengar).
Ketika motor mendapatkan pulsa PWM rendah, motor tidak langsung mulai berjalan, itu akan berdengung dengan suara yang sangat khas. Ini adalah perilaku normal. Dan itulah bagaimana saya menemukan bahwa saya harus menambahkan dua sumber daya. Kali pertama saya menghubungkan semuanya, saya pikir kontroler rusak. Tidak ada yang terjadi. Sambil saya mencabut salah satu motor dan yang lain mulai berdengung.
Jadi itulah caranya:
Catatan kaki: lampu kilat bukan hanya untuk efek dramatis. Kapan pun ciptaan Anda mulai bergerak, harap waspadai keselamatan. Kontraption ini bodoh, Anda tidak! Oleh karena itu saya telah menempatkan lampu ini di atasnya dari awal.
Kode
Kontrol XAML untuk memulai komunikasi
Kode-Behind dari formulir utama aplikasi UWP
Kontrol XAML untuk memulai komunikasisnippets
Tempelkan ini ke dalam formulir utama aplikasi UWP baru Anda