- Prasyarat
- Diagram Sirkuit
- Alur Proses untuk Mouse Udara
- Memprogram Arduino untuk Air Mouse
- Skrip Driver Python
- Menguji Arduino Air Mouse
Pernah bertanya-tanya bagaimana dunia kita bergerak menuju realitas yang imersif. Kami terus menemukan cara dan metode baru untuk berinteraksi dengan lingkungan sekitar kami menggunakan realitas virtual, realitas campuran, realitas tertambah, dll. Perangkat baru keluar setiap hari dengan teknologi yang bergerak cepat ini untuk mengesankan kami dengan teknologi interaktif baru mereka.
Teknologi imersif ini digunakan dalam permainan, aktivitas interaktif, hiburan, dan banyak aplikasi lainnya. Dalam tutorial ini, kita akan mengetahui tentang metode interaktif yang memberi Anda cara baru untuk berinteraksi dengan sistem Anda daripada menggunakan mouse yang membosankan. Penggila game kami pasti tahu bahwa beberapa tahun yang lalu Nintendo, sebuah perusahaan game menjual ide metode interaktif 3D untuk berinteraksi dengan konsol mereka dengan bantuan pengontrol genggam yang dikenal sebagai pengontrol Wii. Ini menggunakan akselerometer untuk menemukan gerakan Anda untuk game dan mengirimkannya ke sistem secara nirkabel. Jika Anda ingin tahu lebih banyak tentang teknologi ini, Anda dapat melihat paten mereka EP1854518B1, ini akan memberi Anda gambaran lengkap tentang bagaimana teknologi ini bekerja.
Terinspirasi oleh ide ini kita akan membuat "Air mouse", untuk berinteraksi dengan sistem hanya dengan menggerakkan konsol di udara, tetapi alih-alih menggunakan referensi koordinat 3 dimensi, kita hanya akan menggunakan referensi koordinat 2 dimensi jadi kita dapat meniru tindakan mouse komputer karena mouse bekerja dalam dua dimensi X dan Y.
Konsep dibalik Wireless 3D Air Mouse ini sangat sederhana, kita akan menggunakan accelerometer untuk mendapatkan nilai akselerasi dari tindakan dan gerakan “Air mouse” di sepanjang sumbu x dan y, kemudian berdasarkan nilai dari accelerometer kita akan mengontrol kursor mouse dan melakukan tindakan tertentu dengan bantuan driver perangkat lunak python yang berjalan di komputer.
Prasyarat
- Arduino Nano (model apa saja)
- Modul Akselerometer ADXL335
- Modul Bluetooth HC-05
- Tekan tombol
- Komputer yang diinstal Python
Untuk mempelajari lebih lanjut tentang menginstal python di komputer, ikuti tutorial sebelumnya tentang Pengontrolan LED Arduino-Python.
Diagram Sirkuit
Untuk mengontrol komputer Anda dengan gerakan tangan Anda , Anda memerlukan akselerometer yang memberikan akselerasi sepanjang sumbu X dan Y dan untuk membuat seluruh sistem nirkabel, modul Bluetooth digunakan untuk mentransfer sinyal secara nirkabel ke sistem Anda.
Di sini akselerometer ADXL335 digunakan, ini adalah modul sumbu tiga berbasis MEMS yang mengeluarkan akselerasi di sepanjang sumbu X, Y, dan Z tetapi seperti yang diceritakan sebelumnya untuk mengendalikan mouse, kita hanya memerlukan percepatan hanya di sepanjang sumbu X dan Y.. Pelajari lebih lanjut tentang menggunakan akselerometer ADXL335 dengan Arduino dengan proyek kami sebelumnya:
- Sistem Peringatan Kecelakaan Kendaraan Berbasis Arduino menggunakan GPS, GSM dan Accelerometer
- Game Ping Pong menggunakan Arduino dan Accelerometer
- Robot Kontrol Gerakan Tangan Berbasis Akselerometer menggunakan Arduino
- Alarm Detektor Gempa menggunakan Arduino
Di sini pin akselerometer Xout dan Yout terhubung ke pin Analog, A0, dan A1 Arduino dan untuk mentransmisikan sinyal dari Arduino ke sistem, modul Bluetooth HC-05 digunakan di sini, karena Bluetooth bekerja melalui Tx dan Rx. koneksi pin, jadi kami menggunakan perangkat lunak pin serial D2 dan D3. Itu terhubung menggunakan serial Software karena jika kita menghubungkan Bluetooth dengan serial perangkat keras dan mulai mendapatkan pembacaan melalui konsol python, itu akan menunjukkan kesalahan untuk baud rate yang tidak cocok karena Bluetooth akan berkomunikasi dengan python pada baud rate-nya sendiri. Pelajari lebih lanjut tentang menggunakan modul Bluetooth dengan melalui berbagai proyek berbasis Bluetooth menggunakan mikrokontroler yang berbeda termasuk Arduino.
Di sini kami telah menggunakan tiga tombol tekan - satu untuk memicu mouse Air, dan dua lainnya untuk klik kiri dan kanan seperti yang ditunjukkan pada gambar di bawah ini:
Alur Proses untuk Mouse Udara
Diagram alir menunjukkan aliran proses Air Mouse berbasis Arduino:
1. Sistem terus menerus memeriksa pemicu mekanis yang akan ditekan hingga tidak ditekan kita dapat bekerja secara normal dengan mouse komputer.
2. Ketika sistem mendeteksi penekanan tombol, kontrol untuk mouse dipindahkan ke mouse udara.
3. Saat tombol pemicu ditekan, sistem mulai mentransfer bacaan dari mouse ke komputer. Pembacaan sistem terdiri dari pembacaan akselerometer, dan pembacaan untuk klik kiri dan kanan.
4. Pembacaan sistem terdiri dari aliran data 1 byte atau 8 bit, dimana tiga bit pertama terdiri dari koordinat X, tiga bit kedua terdiri dari koordinat Y, bit terakhir kedua adalah bit status untuk mendapatkan status klik kiri mouse dan bit terakhir adalah bit status untuk mendapatkan status klik kanan.
5. Nilai tiga bit pertama yaitu koordinat X dapat berkisar dari 100 <= Xcord <= 999, sedangkan nilai untuk koordinat Y dapat berkisar dari 100 <= Ycord <= 800. Nilai untuk klik kanan dan klik kiri adalah nilai biner baik 0 atau 1 di mana 1 menunjukkan klik dilakukan dan 0 bahwa klik tidak dilakukan oleh pengguna.
6. Agar pantulan tombol tidak mempengaruhi posisi kursor, penundaan yang diketahui selama 4 detik dipertahankan setelah setiap klik tombol pemicu mouse.
7. Untuk klik kanan dan kiri pada mouse udara, pertama kita harus menekan tombol tekan kiri atau kanan, dan setelah itu, kita harus menekan tombol pemicu untuk berpindah ke posisi mouse udara yang kita inginkan.
Memprogram Arduino untuk Air Mouse
Arduino harus diprogram untuk membaca nilai percepatan pada sumbu X dan Y. Program lengkap diberikan di bagian akhir, di bawah ini adalah cuplikan penting dari kode.
Menyiapkan variabel global
Seperti yang dikatakan sebelumnya, kami akan menghubungkan modul Bluetooth dengan pin serial perangkat lunak. Jadi untuk mengatur serial perangkat lunak kita perlu mendeklarasikan perpustakaan serial perangkat lunak dan mengatur pin untuk Tx dan Rx. Di Arduino Nano dan Uno Pin 2 dan 3 dapat berfungsi sebagai serial perangkat lunak. Selanjutnya, kami mendeklarasikan objek Bluetooth dari pustaka serial perangkat lunak untuk menyiapkan pin untuk Tx dan Rx.
#include
Batalkan penyiapan ()
Dalam fungsi pengaturan , kita akan mengatur variabel untuk memberi tahu program apakah mereka akan bertindak sebagai input atau output. Tombol pemicu akan diatur sebagai input pull-up, dan klik kiri dan kanan dideklarasikan sebagai input dan ditetapkan sebagai Tinggi untuk membuatnya bertindak sebagai pull-up input.
Atur juga baud rate untuk komunikasi serial dan Bluetooth ke 9600.
batal penyiapan () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (trigger, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Lingkaran kosong ()
Karena kami memerlukan tombol pemicu untuk memberi tahu kapan kami perlu mengirim aliran data ke sistem, jadi kami menyiapkan seluruh kode di dalam loop sementara yang akan terus memantau keadaan digital pemicu pull-up, karena semakin rendah itu akan terjadi. teruskan lebih lanjut untuk diproses.
Karena kami telah memasang LED untuk memberi tahu kami status sistem ketika tombol pemicu ditekan, kami awalnya mengatur led ke rendah di luar loop sementara sebagai kondisi default dan tinggi di dalam loop sementara yang akan menyalakan led setiap kali tombol pemicu ditekan.
Untuk membaca status tombol klik kiri dan kanan, kami telah mendeklarasikan secara global dua variabel lclick dan rclick yang nilainya awalnya disetel ke 0.
Dan di loop , atur nilai variabel tersebut sesuai dengan status digital tombol klik kiri dan kanan untuk memeriksa apakah tombol tersebut ditekan atau tidak.
Kita akan membaca nilai dari pin X dan Y keluar dari akselerometer menggunakan fungsi analogRead dan akan memetakan nilai tersebut ke ukuran layar agar penunjuk mouse bergerak di seluruh layar. Karena ukuran layar adalah piksel di layar, kita perlu mengaturnya sesuai dan karena kita membutuhkan nilai keluaran menjadi tiga digit, kita sengaja mengatur kisaran untuk X sebagai 100 <= X <= 999 dan demikian pula nilai untuk Y sebagai 100 <= Y <= 800. Ingat, piksel dibaca dari pojok kiri atas yaitu pojok kiri atas bernilai (0,0), tetapi karena kita telah mendeklarasikan tiga digit untuk x dan y, nilai kita akan dibaca dari titik (100,100).
Selanjutnya, cetak nilai koordinat dan status klik melalui serial dan Bluetooth dengan bantuan fungsi Serial.print dan bluetooth.print mereka membantu mendapatkan nilai pada monitor serial dan melalui sistem Anda melalui Bluetooth.
Akhirnya, karena tombol yang memantul, satu nilai dapat diulangi yang akan menyebabkan kursor mouse bertahan di satu posisi, jadi untuk menghilangkannya kita harus menambahkan penundaan ini.
void loop () { digitalWrite (led, LOW); while (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = peta (xh, 286.429.100.999); ycord = peta (yh, 282.427.100.800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); lain Serial.print (0); if (pertama == LOW) Serial.print (1); lain Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); lain bluetooth.print (0); jika (pertama == RENDAH) bluetooth.print (1); lain bluetooth.print (0); penundaan (4000); }}
Skrip Driver Python
Sampai sekarang, kami telah menyelesaikan dengan perangkat keras dan bagian firmware-nya, sekarang untuk menjalankan mouse udara kami perlu memiliki skrip driver yang dapat memecahkan kode sinyal dari mouse udara menjadi gerakan kursor, jadi untuk ini, kami telah memilih Python. Python adalah bahasa skrip dan dengan membuat skrip di sini yang kami maksud adalah membantu kami untuk mendapatkan kendali dari program lain, karena di sini kami mengontrol kursor mouse.
Jadi buka shell python Anda dan dapatkan pustaka berikut yang diinstal menggunakan perintah di bawah ini:
pip instal serial pip instal pyautogui
The seri adalah perpustakaan untuk python yang membantu kita untuk mendapatkan data dari interface serial seperti port com dan juga memungkinkan kita memanipulasi sedangkan pyautogui adalah perpustakaan untuk python untuk mendapatkan kontrol atas fitur GUI, dalam hal ini, mouse.
Sekarang mari kita ke kode untuk driver, hal pertama yang perlu kita lakukan adalah mengimpor perpustakaan serial dan pyautogui, dan kemudian dari perpustakaan serial, kita harus mengatur port com untuk komunikasi dengan baud rate 9600, sama seperti Bluetooth. serial beroperasi di. Untuk ini, Anda harus menghubungkan modul Bluetooth ke sistem Anda dan kemudian dalam pengaturan sistem Anda harus memeriksa port com mana yang terhubung.
Hal berikutnya adalah membaca komunikasi serial dari Bluetooth ke sistem dan menjaganya terus berjalan terus kode dalam loop terus menerus dengan bantuan while 1.
Seperti yang dikatakan sebelumnya bahwa Arduino mengirimkan 8 bit, 6 bit pertama untuk koordinat dan dua terakhir untuk status tombol klik. Jadi baca semua bit dengan bantuan ser.read dan atur panjangnya menjadi 8 bit.
Selanjutnya, bagi bit untuk koordinat kursor dan klik dengan mengirisnya, dan kemudian mengiris bit kursor menjadi koordinat X dan Y secara terpisah. Hal yang sama berlaku untuk klik kiri dan kanan.
Sekarang dari komunikasi, kita mendapatkan string byte dan kita perlu mengubahnya menjadi integer sehingga mereka bisa masuk ke koordinat, kita melakukan ini dengan mendekodekannya dan kemudian mengetikkannya menjadi bilangan bulat.
Sekarang untuk memindahkan kursor kita menggunakan pyautogui MoveTo fungsi, yang mengambil sebagai argumen mereka koordinat bilangan bulat dan memindahkan kursor ke posisi itu.
Selanjutnya memeriksa klik, kita melakukan ini dengan menggunakan dua bit terakhir dan fungsi klik pyautogui, klik defaultnya adalah kiri, namun kita dapat mengaturnya menjadi kanan dengan mendeklarasikan nilai tombol ke kanan, kita juga dapat menentukan jumlah klik ke setel ke klik dua kali dengan mengatur parameter klik ke 2.
Di bawah ini adalah kode Python lengkap untuk dijalankan di komputer:
import serial import pyautogui ser = serial.Serial ('com3', 9600) sedangkan 1: k = ser.read (8) cursor = k click = k x = cursor y = cursor l = click r = click xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) jika l == 49: pyautogui.click (klik = 2) elif r = = 49: pyautogui.click (tombol = 'kanan', klik = 2)
Menguji Arduino Air Mouse
Jadi untuk mengoperasikan Air Mouse, pasang catu daya padanya. Bisa dari slot Arduino Nano USB atau dari catu daya 5v yang diatur menggunakan IC 7805. Kemudian jalankan skrip driver python dengan mengatur port com yang terhubung dengan Bluetooth Anda. Saat skrip berjalan, Anda akan melihat jeda waktu dalam kedipan Bluetooth yang berarti itu terhubung ke sistem Anda. Kemudian untuk mengoperasikannya klik tombol pemicu dan Anda akan melihat posisi koordinat akan berubah dan jika Anda ingin klik kiri atau kanan, maka pertama tekan tombol tekan kiri atau kanan dan tombol pemicu bersamaan, Anda akan melihat aksi klik di lokasi kursor yang berubah.
Periksa Video kerja terperinci di bawah ini.