- Pra-syarat
- Rajah Litar
- Aliran Proses untuk Tetikus Udara
- Memprogram Arduino untuk Tetikus Udara
- Skrip Pemandu Python
- Menguji Arduino Air Mouse
Pernah terfikir bagaimana dunia kita bergerak menuju realiti yang mengasyikkan. Kami terus mencari cara dan kaedah baru untuk berinteraksi dengan persekitaran kami menggunakan realiti maya, realiti campuran, realiti tambahan dll. Peranti baru keluar setiap hari dengan teknologi pantas ini untuk mengesankan kami dengan teknologi interaktif baru mereka.
Teknologi mendalam ini digunakan dalam permainan, aktiviti interaktif, hiburan dan banyak aplikasi lain. Dalam tutorial ini, kita akan mengetahui kaedah interaktif seperti itu yang memberi anda cara baru untuk berinteraksi dengan sistem anda dan bukannya menggunakan tetikus yang membosankan. Geeks permainan kami mesti mengetahui bahawa beberapa tahun yang lalu Nintendo sebuah syarikat permainan menjual idea kaedah interaktif 3D untuk berinteraksi dengan konsol mereka dengan bantuan alat kawalan genggam yang dikenali sebagai pengawal Wii. Ia menggunakan accelerometer untuk mencari gerak isyarat anda untuk permainan dan menghantarnya ke sistem tanpa wayar. Sekiranya anda ingin mengetahui lebih lanjut mengenai teknologi ini, anda boleh melihat paten mereka EP1854518B1, ini akan memberi anda idea lengkap tentang bagaimana teknologi ini berfungsi.
Diilhamkan oleh idea ini, kita akan membuat "Air mouse", untuk berinteraksi dengan sistem hanya dengan menggerakkan konsol di udara, tetapi bukannya menggunakan rujukan koordinat 3 dimensi, kita hanya akan menggunakan rujukan koordinat 2 dimensi sehingga kita dapat meniru tindakan tetikus komputer kerana tetikus berfungsi dalam dua dimensi X dan Y.
Konsep di sebalik Tikus Udara 3D Tanpa Wayar ini sangat mudah, kami akan menggunakan akselerometer untuk mendapatkan nilai pecutan tindakan dan gerakan "Tetikus udara" di sepanjang paksi x dan y, dan kemudian berdasarkan nilai accelerometer kita akan mengawal kursor tetikus dan melakukan tindakan tertentu dengan bantuan pemacu perisian python yang berjalan di komputer.
Pra-syarat
- Arduino Nano (mana-mana model)
- Modul Accelerometer ADXL335
- Modul Bluetooth HC-05
- Tekan butang
- Python Memasang komputer
Untuk mengetahui lebih lanjut mengenai pemasangan python di komputer ikuti tutorial sebelumnya mengenai Arduino-Python LED Controlling.
Rajah Litar
Untuk mengawal komputer dengan pergerakan tangan anda, anda memerlukan pecutan yang memberikan pecutan di sepanjang paksi X dan Y dan untuk menjadikan keseluruhan sistem tanpa wayar, modul Bluetooth digunakan untuk memindahkan isyarat secara wayarles ke sistem anda.
Di sini akselerometer ADXL335 digunakan, ini adalah modul sumbu tiga berdasarkan MEMS yang menghasilkan pecutan di sepanjang paksi X, Y, dan Z tetapi seperti yang diberitahu sebelumnya untuk mengawal tetikus, kita hanya memerlukan pecutan hanya di sepanjang paksi X dan Y. Ketahui lebih lanjut mengenai penggunaan akselerometer ADXL335 dengan Arduino dengan projek kami sebelumnya:
- Sistem Amaran Kemalangan Kenderaan Berasaskan Arduino menggunakan GPS, GSM dan Accelerometer
- Permainan Ping Pong menggunakan Arduino dan Accelerometer
- Robot Dikendalikan Gerak Tangan Berasaskan Accelerometer menggunakan Arduino
- Penggera Pengesan Gempa menggunakan Arduino
Di sini pin akselerometer Xout dan Yout disambungkan ke pin Analog, A0, dan A1 Arduino dan untuk menghantar isyarat dari Arduino ke sistem modul Bluetooth HC-05 digunakan di sini, kerana Bluetooth berfungsi melalui Tx dan Rx sambungan pin, jadi kami menggunakan pin siri perisian D2 dan D3. Ia disambungkan menggunakan siri Perisian kerana jika kita menyambungkan Bluetooth dengan siri perkakasan dan mula mendapat bacaan melalui konsol python, ia akan menunjukkan kesalahan untuk kadar baud yang tidak sesuai kerana Bluetooth akan berkomunikasi dengan python pada kadar baud sendiri. Ketahui lebih lanjut mengenai penggunaan modul Bluetooth dengan melalui pelbagai projek berasaskan Bluetooth menggunakan pengawal mikro yang berbeza termasuk Arduino.
Di sini kami telah menggunakan tiga butang tekan - satu untuk memicu tetikus Air, dan dua lagi untuk klik kiri dan kanan seperti yang ditunjukkan pada gambar di bawah:
Aliran Proses untuk Tetikus Udara
Carta aliran menunjukkan aliran proses Tetikus Udara berasaskan Arduino:
1. Sistem ini secara berterusan memeriksa pemicu mekanikal untuk ditekan sehingga tidak ditekan, kita dapat bekerja dengan normal menggunakan tetikus komputer.
2. Apabila sistem mengesan tekan butang, kawalan untuk tetikus dipindahkan ke tetikus udara.
3. Semasa butang pemicu ditekan, sistem mula memindahkan bacaan tetikus ke komputer. Pembacaan sistem terdiri daripada bacaan pecutan, dan bacaan untuk klik kiri dan kanan.
4. Pembacaan sistem terdiri daripada aliran data 1 bait atau 8 bit, di mana tiga bit pertama terdiri daripada koordinat X, tiga bit kedua terdiri daripada koordinat Y, bit terakhir kedua adalah bit status untuk mendapatkan status klik kiri tetikus dan bit terakhir adalah bit status untuk mendapatkan status klik kanan.
5. Nilai tiga bit pertama iaitu koordinat X boleh berkisar antara 100 <= Xcord <= 999, sedangkan nilai untuk koordinat Y boleh berkisar dari 100 <= Ycord <= 800. Nilai untuk klik kanan dan klik kiri adalah nilai binari sama ada 0 atau 1 di mana 1 menunjukkan klik dibuat dan 0 klik itu tidak dibuat oleh pengguna.
6. Untuk tidak membiarkan pemantulan butang mempengaruhi kedudukan kursor, kelewatan yang diketahui selama 4 saat disimpan setelah setiap klik butang pemicu tetikus.
7. Untuk klik kanan dan kiri di tetikus udara, kita harus menekan butang tekan kiri atau kanan terlebih dahulu, dan setelah itu, kita harus menekan butang pemicu untuk bergerak ke posisi tetikus udara di mana kita mahu.
Memprogram Arduino untuk Tetikus Udara
Arduino harus diprogram untuk membaca nilai pecutan pada paksi X dan Y. Program lengkap diberikan pada akhir, di bawah ini adalah coretan penting dari kod tersebut.
Menetapkan pemboleh ubah global
Seperti yang dinyatakan sebelumnya, kami akan menghubungkan modul Bluetooth dengan pin siri perisian. Oleh itu, untuk menetapkan siri perisian, kita perlu menyatakan perpustakaan siri perisian dan menetapkan pin untuk Tx dan Rx. Dalam Arduino Nano dan Uno Pin 2 dan 3 boleh berfungsi sebagai siri perisian. Seterusnya, kami menyatakan objek Bluetooth dari pustaka bersiri perisian untuk menetapkan pin untuk Tx dan Rx.
#sertakan
Membatalkan persediaan ()
Dalam fungsi setup , kita akan menetapkan variabel untuk memberitahu program apakah mereka akan bertindak sebagai input atau output. Butang pemicu akan disiapkan sebagai input pull-up, dan klik kiri dan kanan dinyatakan sebagai input dan disiapkan sebagai Tinggi untuk membuatnya bertindak sebagai input pullup.
Tetapkan juga kadar baud untuk komunikasi bersiri dan Bluetooth ke 9600.
batal persediaan () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (trigger, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (dipimpin, OUTPUT); digitalWrite (lclick, TINGGI); digitalWrite (rclick, TINGGI); Serial.begin (9600); bluetooth.begin (9600); }
Gelung kosong ()
Oleh kerana kita memerlukan butang pemicu untuk memberitahu kapan kita perlu menghantar sistem aliran data, jadi kita menetapkan seluruh kod di dalam gelung sementara yang akan terus memantau keadaan digital pemicu penarik, kerana semakin rendah ia akan lulus lebih jauh untuk pemprosesan.
Oleh kerana kami telah memasang LED untuk memberitahu kami mengenai status sistem ketika butang pemicu ditekan, kami pada mulanya menetapkan led ke rendah di luar gelung sementara kerana keadaan lalai dan tinggi di dalam gelung sementara yang akan menyala led setiap kali butang pencetus ditekan.
Untuk membaca status butang klik kiri dan kanan, kami telah menyatakan secara global dua pemboleh ubah lclick dan rclick yang nilainya awalnya ditetapkan hingga 0.
Dan dalam gelung , tetapkan nilai pemboleh ubah tersebut mengikut status digital butang klik kiri dan kanan untuk memeriksa sama ada butang ditekan atau tidak.
Kami akan membaca nilai pin keluar X dan Y akselerometer menggunakan fungsi analogRead dan akan memetakan nilai-nilai tersebut ke ukuran layar untuk mendapatkan penunjuk tetikus bergerak ke seluruh layar. Oleh kerana ukuran layar adalah piksel di layar, kita perlu menyiapkannya dengan sewajarnya dan kerana kita memerlukan nilai output menjadi tiga digit, kita telah dengan sengaja mengatur julat untuk X sebagai 100 <= X <= 999 dan juga nilai bagi Y sebagai 100 <= Y <= 800. Ingat, piksel sedang dibaca dari sudut kiri atas iaitu sudut kiri atas mempunyai nilai (0,0), tetapi kerana kita telah menyatakan tiga digit untuk x dan y nilai kita akan dibaca dari titik (100,100).
Selanjutnya, cetak nilai koordinat dan status klik pada siri dan Bluetooth dengan bantuan fungsi Serial.print dan bluetooth.print yang mereka bantu dalam mendapatkan nilai pada monitor bersiri dan sistem anda melalui Bluetooth.
Akhirnya, kerana memantul butang satu nilai dapat diulang yang akan menyebabkan kursor tetikus berlama-lama pada satu posisi, jadi untuk menyingkirkan ini, kita harus menambahkan penundaan ini.
gelung kosong () { digitalWrite (dipimpin, RENDAH); manakala (digitalRead (trigger) == RENDAH) { digitalWrite (dipimpin, TINGGI); 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); jika (lstate == RENDAH) Serial.print (1); lain Serial.print (0); jika (rstate == RENDAH) Serial.print (1); lain Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); jika (lstate == RENDAH) bluetooth.print (1); yang lain bluetooth.print (0); jika (rstate == RENDAH) bluetooth.print (1); bluetooth.print yang lain (0); kelewatan (4000); }}
Skrip Pemandu Python
Setakat ini, kami telah menyelesaikan perkakasan dan bahagian firmwarenya, sekarang agar tetikus udara berfungsi, kami perlu mempunyai skrip pemacu yang dapat menyahkod isyarat dari tetikus udara ke pergerakan kursor, jadi untuk ini, kami telah memilih Python. Python adalah bahasa skrip dan dengan membuat skrip di sini kita bermaksud bahawa ia membantu kita untuk mengendalikan program lain, kerana di sini kita mengendalikan kursor tetikus.
Oleh itu, buka shell python anda dan pasangkan perpustakaan berikut dengan menggunakan arahan di bawah:
pip memasang siri pip memasang pyautogui
The bersiri sebuah perpustakaan untuk python yang membantu kita untuk mendapatkan data dari antara muka bersiri seperti pelabuhan com dan juga membolehkan kita memanipulasi ia manakala pyautogui adalah perpustakaan untuk python untuk mendapatkan kawalan ke atas ciri-ciri GUI, dalam kes ini, tetikus.
Sekarang mari kita pergi ke kod untuk pemacu, perkara pertama yang perlu kita lakukan ialah mengimport perpustakaan bersiri dan pyautogui, dan kemudian dari perpustakaan bersiri, kita harus menetapkan port com untuk komunikasi dengan kadar baud 9600, sama seperti Bluetooth.serial yang beroperasi di. Untuk ini, anda harus menyambungkan modul Bluetooth ke sistem anda dan kemudian dalam tetapan sistem, anda harus memeriksa port mana yang dihubungkan.
Perkara seterusnya adalah membaca komunikasi bersiri dari Bluetooth ke sistem dan memastikannya berterusan terus menyimpan kod yang lain dalam gelung berterusan dengan bantuan sementara 1.
Seperti yang dinyatakan sebelumnya bahawa Arduino mengirimkan 8 bit, 6 pertama untuk koordinat dan dua yang terakhir untuk status butang klik. Oleh itu, baca semua bit dengan bantuan ser.read dan tetapkan panjangnya menjadi 8 bit.
Seterusnya, bahagikan bit untuk koordinat kursor dan klik dengan memotongnya, dan kemudian memotong bit kursor ke koordinat X dan Y secara berasingan. Begitu juga dengan klik kiri dan kanan.
Sekarang dari komunikasi, kita mendapat rentetan bait dan kita perlu mengubahnya menjadi bilangan bulat sehingga mereka sesuai dengan koordinat, kita melakukan ini dengan menyahkodnya dan kemudian menaipnya menjadi bilangan bulat.
Sekarang untuk menggerakkan kursor kita menggunakan fungsi petoutogui moveto , yang mengambil argumen koordinat bilangan bulat dan menggerakkan kursor ke posisi itu.
Periksa seterusnya untuk klik, kami melakukan ini dengan menggunakan dua bit terakhir dan fungsi klik pyautogui, klik lalai adalah kiri satu, namun kami dapat menetapkannya ke kanan dengan menyatakan nilai butang ke kanan, kami juga dapat menentukan jumlah klik untuk aktifkan menjadi klik dua kali dengan menetapkan parameter klik menjadi 2.
Berikut adalah kod Python yang lengkap untuk dijalankan di komputer:
import siri import pyautogui ser = serial.Serial ('com3', 9600) manakala 1: k = ser.read (8) kursor = k klik = k x = kursor y = kursor l = klik r = klik xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) if l == 49: pyautogui.klik (klik = 2) elif r = = 49: pyautogui.klik (butang = 'kanan', klik = 2)
Menguji Arduino Air Mouse
Jadi untuk mengoperasikan Air Mouse, pasangkan sumber kuasa padanya. Ia boleh dari slot Arduino Nano USB atau dari bekalan kuasa terkawal 5v menggunakan 7805 IC. Kemudian jalankan skrip pemacu python dengan menetapkan port com yang disambungkan oleh Bluetooth anda. Semasa skrip berjalan, anda akan melihat kelewatan masa dalam sekelip mata Bluetooth itu bermaksud ia tersambung ke sistem anda. Kemudian untuk mengoperasikannya klik butang pemicu dan anda akan melihat kedudukan koordinat akan berubah dan jika anda mahu klik kiri atau kanan, kemudian tekan butang kiri atau kanan pertama dan butang pemicu bersama, anda akan melihat tindakan klik di lokasi kursor yang berubah.
Lihat Video kerja terperinci di bawah.