- Prasyarat:
- Konsep di sebalik projek:
- Rajah Litar:
- Memprogram Arduino anda:
- Memprogram Python anda:
- Komputer yang Dikawal Gerakan Beraksi:
Baru-baru ini Laptop atau komputer yang dikawal oleh Gesture menjadi sangat terkenal. Teknik ini dipanggil Leap motion yang membolehkan kita mengawal fungsi tertentu di komputer / Laptop kita dengan hanya melambaikan tangan kita di hadapannya. Ia sangat keren dan menyeronokkan untuk melakukannya, tetapi komputer riba ini berharga sangat tinggi. Oleh itu, dalam projek ini mari kita cuba membina Laptop / Komputer kawalan Gerak isyarat kita sendiri dengan menggabungkan Power of Arduino dan Python.
Kami akan menggunakan dua sensor Ultrasonik untuk menentukan kedudukan tangan kami dan mengawal pemain media (VLC) berdasarkan kedudukannya. Saya telah menggunakan ini untuk demonstrasi, tetapi setelah anda memahami projek ini, anda boleh melakukan apa-apa dengan hanya menukar beberapa baris kod dan mengawal aplikasi kegemaran anda dengan cara kegemaran anda.
Prasyarat:
Kami telah merangkumi beberapa projek yang menggabungkan Arduino dengan Python. Oleh itu, saya menganggap bahawa anda telah memasang Python dan pustaka bersirinya dan telah berjaya mencuba beberapa projek asas seperti LED yang berkedip. Sekiranya tidak, jangan risau anda boleh kembali ke tutorial Arduino-Python Led Controlling ini dan ikuti dengannya. Oleh itu, pastikan anda telah memasang Python dan pyserial library sebelum meneruskan.
Konsep di sebalik projek:
Konsep di sebalik projek ini sangat mudah. Kami akan meletakkan dua sensor Ultrasonik (AS) di atas monitor kami dan akan membaca jarak antara monitor dan tangan kami menggunakan Arduino, berdasarkan nilai jarak ini, kami akan melakukan tindakan tertentu. Untuk melakukan tindakan di komputer, kami menggunakan perpustakaan Python pyautogui. Perintah dari Arduino dihantar ke komputer melalui port bersiri (USB). Data ini kemudian akan dibaca oleh python yang berjalan di komputer dan berdasarkan data yang dibaca tindakan akan dilakukan.
Rajah Litar:
Untuk mengawal PC dengan Hand Gestures, sambungkan dua sensor Ultrasonik dengan Arduino. Kami tahu sensor AS berfungsi dengan 5V dan oleh itu mereka dikuasakan oleh pengatur voltan Arduino. Arduino boleh disambungkan ke PC / Laptop untuk menghidupkan modul dan juga untuk komunikasi Serial. Setelah sambungan selesai letakkan di monitor anda seperti gambar di bawah. Saya telah menggunakan pita sisi dua untuk melekatkannya pada monitor saya tetapi anda boleh menggunakan kreativiti anda sendiri. Setelah mendapatkannya di tempat, kita dapat meneruskan Pengaturcaraan.
Memprogram Arduino anda:
Arduino harus diprogramkan untuk membaca jarak tangan dari sensor AS. Program lengkap diberikan di akhir halaman ini; betul-betul di bawah ini saya telah memberikan penjelasan untuk program ini. Sekiranya anda baru menggunakan sensor Ultrasonik, cukup melalui Pengukuran Jarak Berdasarkan Sensor Arduino & Ultrasonik.
Dengan membaca nilai jarak kita dapat mencapai tindakan tertentu yang dapat dikendalikan dengan gerak isyarat, misalnya dalam program ini saya telah memprogramkan 5 tindakan sebagai demo.
Tindakan 1: Apabila kedua-dua tangan diletakkan di hadapan sensor pada jarak yang jauh maka video dalam pemain VLC harus Main / Jeda.
Tindakan 2: Apabila tangan kanan diletakkan di hadapan sensor pada jarak yang jauh, maka video harus Maju Selangkah selangkah.
Tindakan 3: Apabila tangan kiri diletakkan di hadapan sensor pada jarak yang jauh, maka video harus Mundur satu langkah.
Tindakan 4: Apabila tangan kanan diletakkan di hadapan sensor pada jarak dekat tertentu dan kemudian jika digerakkan ke arah sensor, video harus bergerak maju ke hadapan dan jika dipindahkan, video harus Mundur.
Tindakan 5: Apabila tangan kiri diletakkan di hadapan sensor pada jarak dekat tertentu dan kemudian jika digerakkan ke arah sensor, jumlah video harus meningkat dan jika digerakkan, kelantangannya harus Turun.
Mari kita lihat bagaimana program ini ditulis untuk melakukan tindakan di atas. Oleh itu, seperti semua program, kita mulakan dengan menentukan pin I / O seperti gambar di bawah. Kedua-dua sensor AS disambungkan ke pin Digital 2,3,4 dan 5 dan dikuasakan oleh pin + 5V. Pin pemicu adalah pin output dan pin Echo adalah pin input.
Komunikasi bersiri antara Arduino dan python berlaku pada kadar baud 9600.
const int trigger1 = 2; // Pin pencetus Sesnor const int int echo1 = 3; // Pin gema Sesnor const int int trigger2 = 4; // Pin pencetus Sesnor const ke-2 int echo2 = 5; // Pin gema penyediaan kekosongan Sesnor ke-2 () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Kita perlu mengira jarak antara Sensor dan tangan setiap kali sebelum membuat sebarang tindakan. Oleh itu, kita harus melakukannya berkali-kali, yang bermaksud kod ini harus digunakan sebagai fungsi. Kami telah menulis fungsi bernama calcul_distance () yang akan mengembalikan jarak antara sensor dan tangan.
/ * ### Fungsi untuk mengira jarak ### * / batal hitung_jarak (int trigger, int echo) {digitalWrite (trigger, LOW); kelewatanMikrodetik (2); digitalWrite (pencetus, TINGGI); kelewatanMikrodetik (10); digitalWrite (pencetus, RENDAH); time_taken = pulseIn (gema, TINGGI); dist = time_taken * 0.034 / 2; jika (dist> 50) dist = 50; }
Di dalam gelung utama kami, kami memeriksa nilai jarak dan melakukan tindakan yang disebutkan di atas. Sebelum itu kita menggunakan dua pemboleh ubah distL dan distR yang akan dikemas kini dengan nilai jarak semasa.
hitung_jarak (trigger1, echo1); distL = dist; // dapatkan jarak sensor kiri hitung_jarak (pencetus2, echo2); distR = dist; // dapatkan jarak sensor kanan
Oleh kerana kita mengetahui jarak antara kedua sensor, kita sekarang dapat membandingkannya dengan nilai yang telah ditentukan dan mencapai tindakan tertentu. Contohnya jika kedua-dua tangan diletakkan pada jarak 40 mc maka kita memainkan / menjeda video. Di sini perkataan "Main / Jeda" akan dihantar melalui port bersiri
jika ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Kesan kedua-dua tangan {Serial.println ("Main / Jeda"); kelewatan (500);}
Sekiranya tangan Kanan sahaja diletakkan sebelum modul maka kita akan meneruskan video dengan satu langkah dan jika tangan kiri kita mundur satu langkah. Berdasarkan tindakan tersebut, di sini kata "Rewind" atau "Forward" akan dikirim melalui port bersiri
if ((distL> 40 && distL <50) && (distR == 50)) // Kesan Tangan Kiri {Serial.println ("Rewind"); kelewatan (500);} jika ((distR> 40 && distR <50) && (distL == 50)) // Kesan Tangan Kanan {Serial.println ("Maju"); kelewatan (500);}
Mengendalikan volume dan lagu yang terperinci, kami menggunakan metodologi yang berbeza untuk mengelakkan pencetus palsu. Untuk mengawal kelantangan kita mesti meletakkan tangan kiri lebih kurang Pada jarak 15 cm, maka anda dapat menggerakkannya ke arah sensor untuk menurunkan volume memindahkannya dari sensor untuk meningkatkan kelantangan. Kod untuk yang sama ditunjukkan di bawah. Berdasarkan tindakan tersebut, di sini kata "Vup" atau "Vdown" akan dikirim melalui port bersiri
// Kunci Kiri - Mod Kawalan jika (distL> = 13 && distL <= 17) {kelewatan (100); // Waktu Pegangan Tangan mengira_jarak (pencetus1, gema1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Kiri Dikunci"); sementara (distL <= 40) {calcul_distance (trigger1, echo1); distL = dist; if (distL <10) // Tangan ditolak di {Serial.println ("Vup"); kelewatan (300);} jika (distL> 20) // Tangan ditarik keluar {Serial.println ("Vdown"); kelewatan (300);}}}}
Kita juga boleh menggunakan kaedah yang sama untuk sensor sisi kanan, untuk mengawal trek video. Iaitu jika kita menggerakkan tangan kanan ke sensor, ia akan memajukan filem dengan pantas dan jika anda menjauhkannya dari sensor, ia akan memutar balik filem. Berdasarkan tindakan tersebut, di sini kata "Rewind" atau "Forward" akan dikirim melalui port bersiri
Anda kini boleh membaca kod lengkap untuk PC yang dikawal gerak isyarat ini yang diberikan di akhir halaman dan cuba merumuskannya secara keseluruhan dan kemudian menyalinnya ke Arduino IDE anda.
Memprogram Python anda:
Program python untuk projek ini sangat mudah. Kita hanya perlu membuat komunikasi bersiri dengan Arduino melalui kadar baud yang betul dan kemudian melakukan beberapa tindakan asas papan kekunci. Langkah pertama dengan python ialah memasang modul p yautogui . Pastikan anda mengikuti langkah ini kerana program ini tidak akan berfungsi tanpa modul pyautogui.
Memasang modul pyautogui untuk windows:
Ikuti langkah di bawah untuk memasang pyautogui for windows. Sekiranya anda menggunakan platform lain, langkahnya juga akan serupa. Pastikan komputer / Komputer anda disambungkan ke internet dan teruskan langkah di bawah
Langkah 1: Buka arahan Perintah Windows dan ubah direktori ke folder di mana anda telah memasang python. Secara lalai perintahnya seharusnya
cd C: \ Python27
Langkah 2: Di dalam direktori python anda gunakan arahan python –m pip install –upgrade pip untuk menaik taraf pip anda. Pip adalah alat dalam python yang membantu kita memasang modul python dengan mudah. Setelah modul ini ditingkatkan (seperti yang ditunjukkan dalam gambar di bawah) teruskan ke langkah seterusnya.
python –m pip install –upgrade pip
Langkah 3: Gunakan arahan " python –m pip install pyautogui " untuk memasang modul pyautogui. Setelah prosesnya berjaya, anda akan melihat skrin yang serupa dengan di bawah ini.
python –m pip install –upgrade pip
Sekarang bahawa pyautogui modul dan pyserial modul (dipasang di tutorial sebelumnya) berjaya dipasang dengan python, kita boleh meneruskan program ular sawa. The kod python lengkap diberikan pada akhir tutorial tetapi penjelasan yang sama adalah seperti berikut.
Mari kita mengimport ketiga-tiga modul yang diperlukan untuk projek ini. Mereka adalah pyautogui, python bersiri dan masa.
siri import #Serial diimport untuk komunikasi masa komunikasi Serial #Diperlukan untuk menggunakan fungsi kelewatan import pyautogui
Seterusnya kami menjalin hubungan dengan Arduino melalui port COM. Di komputer saya, Arduino disambungkan ke COM 18. Gunakan pengurus peranti untuk mencari port COM mana Arduino anda disambungkan dan betulkan baris berikut dengan sewajarnya.
ArduinoSerial = serial.Serial ('com18', 9600) #Create Serial port objek yang disebut arduinoSerialData time.sleep (2) # tunggu selama 2 saat agar komunikasi dapat dibuat
Di dalam loop sementara yang tidak terhingga, kami berulang kali mendengarkan port COM dan membandingkan kata-kata kunci dengan sebarang karya yang telah ditentang dan membuat penekanan papan kekunci sesuai.
sementara 1: masuk = str (ArduinoSerial.readline ()) # membaca data bersiri dan mencetaknya sebagai cetakan baris masuk jika 'Main / Jeda' masuk: pyautogui.typewrite (, 0.2) jika 'Rewind' masuk: pyautogui hotkey ('ctrl', 'kiri') jika 'Maju' dalam masuk: pyautogui.hotkey ('ctrl', 'kanan') jika 'Vup' masuk: pyautogui.hotkey ('ctrl', 'bawah') jika ' Vdown 'masuk: pyautogui.hotkey (' ctrl ',' up ')
Seperti yang anda lihat, untuk menekan kekunci, kita hanya perlu menggunakan perintah "pyautogui.typewrite (, 0.2)" yang akan menekan ruang kekunci selama 0.2sec. Sekiranya anda memerlukan butang panas seperti ctrl + S, maka anda boleh menggunakan arahan kunci panas "pyautogui.hotkey ('ctrl', 's')".
Saya telah menggunakan kombinasi ini kerana ia berfungsi pada pemain media VLC, anda boleh mengubahnya dengan cara yang anda suka untuk membuat aplikasi anda sendiri untuk mengawal apa sahaja di komputer dengan gerak isyarat.
Komputer yang Dikawal Gerakan Beraksi:
Buat sambungan seperti yang dinyatakan di atas dan muat naik kod Arduino di papan Arduino anda. Kemudian gunakan skrip python di bawah dan lancarkan program di komputer riba / komputer anda.
Sekarang anda boleh memainkan filem apa pun di komputer anda menggunakan pemain media VLC dan menggunakan tangan anda untuk mengawal filem seperti yang ditunjukkan dalam video yang diberikan di bawah.
Harap anda memahami projek ini dan seronok bermain dengannya. Ini hanyalah demo dan anda boleh menggunakan kreativiti anda untuk membina lebih banyak perkara yang dikendalikan oleh isyarat yang lebih menarik. Beritahu saya jika ini berguna dan apa yang akan anda hasilkan menggunakan ini di bahagian komen dan saya dengan senang hati akan mengetahuinya.