- Paunang mga kinakailangan
- Diagram ng Circuit
- Daloy ng Proseso para sa Air Mouse
- Programming ang Arduino para sa Air Mouse
- Script ng Driver sa Python
- Pagsubok sa Arduino Air Mouse
Naisip kung paano lumilipat ang ating mundo patungo sa nakaka-engganyong katotohanan. Patuloy kaming naghahanap ng mga bagong paraan at pamamaraan upang makipag-ugnay sa aming nakapalibot na paggamit ng virtual reality, halo-halong katotohanan, augmented reality atbp Mga bagong aparato ay lalabas araw-araw sa mga mabilis na teknolohiyang pacing na ito upang mapahanga kami ng kanilang mga bagong interactive na teknolohiya.
Ang mga teknolohiyang nakaka-engganyong ito ay ginagamit sa paglalaro, mga interactive na aktibidad, libangan at maraming iba pang mga application. Sa tutorial na ito, malalaman namin ang tungkol sa isang interactive na pamamaraan na magbibigay sa iyo ng isang bagong paraan upang makipag-ugnay sa iyong system sa halip na gumamit ng isang mainip na mouse. Ang aming mga geeks sa paglalaro ay dapat na nalalaman na ilang taon sa likod ng Nintendo isang kumpanya ng paglalaro ay nagbebenta ng isang ideya ng isang 3D interactive na pamamaraan upang makipag-ugnay sa kanilang mga console sa tulong ng isang hand Controller na kilala bilang Wii controller. Gumagamit ito ng accelerometer upang hanapin ang iyong mga kilos para sa isang laro at ipadala ito sa system nang wireless. Kung nais mong malaman ang tungkol sa teknolohiyang ito maaari mong suriin ang kanilang patent EP1854518B1, bibigyan ka nito ng isang kumpletong ideya kung paano gumagana ang teknolohiyang ito.
May inspirasyon ng ideyang ito na gagawa kami ng isang "Air mouse", upang makipag-ugnay sa mga system sa pamamagitan lamang ng paglipat ng console sa hangin, ngunit sa halip na gumamit ng 3-dimensional na mga sanggunian ng coordinate, gagamitin lamang namin ang 2-dimensional na mga sanggunian ng coordinate kaya maaari naming gayahin ang mga pagkilos ng computer mouse dahil ang mouse ay gumagana sa dalawang sukat X at Y.
Ang konsepto sa likod ng Wireless 3D Air Mouse na ito ay napaka-simple, gagamit kami ng isang accelerometer upang makuha ang halaga ng pagpabilis ng mga pagkilos at paggalaw ng "Air mouse" kasama ang x at y-axis, at pagkatapos ay batay sa mga halaga ng makokontrol namin ang mouse cursor at magsagawa ng ilang mga pagkilos sa tulong ng mga driver ng sawa ng software na tumatakbo sa computer.
Paunang mga kinakailangan
- Arduino Nano (anumang modelo)
- Accelerometer ADXL335 Module
- Module ng Bluetooth HC-05
- Itulak ang mga pindutan
- Na-install na computer ng Python
Upang matuto nang higit pa tungkol sa pag-install ng sawa sa computer sundin ang nakaraang tutorial sa Arduino-Python LED Controlling.
Diagram ng Circuit
Upang makontrol ang iyong computer gamit ang mga paggalaw ng iyong kamay kailangan mo ng isang accelerometer na nagbibigay ng pagpabilis kasama ang X at Y-axis at upang gawing wireless ang buong system isang Bluetooth module ay ginagamit upang ilipat ang signal nang wireless sa iyong system.
Dito ginagamit ang isang ADXL335 accelerometer, ito ay isang module na batay sa MEMS na triple axis module na naglalabas ng pagpabilis kasama ang X, Y, at Z-axis ngunit tulad ng sinabi sa dati para sa pagkontrol sa mouse kakailanganin lamang namin ang pagpabilis kasama ang X at Y-axis. Matuto nang higit pa tungkol sa paggamit ng ADXL335 accelerometer kasama ang Arduino sa aming mga nakaraang proyekto:
- Arduino Batay sa Sasakyan aksidente Alerto System gamit ang GPS, GSM at Accelerometer
- Ping Pong Game gamit ang Arduino at Accelerometer
- Kinokontrol na Batas ng Accelerometer na Kamay na Kinokontrol na Robot gamit ang Arduino
- Lindol Detector Alarm gamit ang Arduino
Dito ang Xout at Yout pin ng accelerometer ay konektado sa Analog, A0, at A1 pin ng Arduino at para sa paglilipat ng mga signal mula sa Arduino sa system Bluetooth module HC-05 ay ginagamit dito, dahil gumagana ang Bluetooth sa Tx at Rx mga koneksyon sa pin, kaya gumagamit kami ng mga serial serial software na D2 at D3. Nakakonekta ito gamit ang serial ng Software dahil kung ikonekta namin ang Bluetooth sa serial serial at simulang makuha ang mga pagbasa sa python console ay magpapakita ito ng mga error para sa mismatch baud rate dahil ang Bluetooth ay nakikipag-usap sa sawa sa sarili nitong baud rate. Matuto nang higit pa tungkol sa paggamit ng module ng Bluetooth sa pamamagitan ng pagdaan sa iba't ibang mga proyekto batay sa Bluetooth na gumagamit ng iba't ibang mga microcontroller kabilang ang Arduino.
Ginamit namin dito ang tatlong mga pindutan ng push - isa para sa pag-trigger ng Air mouse, at iba pang dalawa para sa kaliwa at kanang pag-click tulad ng ipinakita sa imahe sa ibaba:
Daloy ng Proseso para sa Air Mouse
Ipinapakita ng tsart ng daloy ang daloy ng proseso ng Arduino based Air Mouse:
1. Patuloy na sinusuri ng system ang pagpindot ng mekanikal hanggang sa hindi ito napindot ay maaari tayong mag-ehersisyo nang normal gamit ang mga computer mouse.
2. Kapag nakita ng system ang pindot ng pindutan, ang kontrol para sa mouse ay inilipat sa air mouse.
3. Habang pinindot ang pindutan ng gatilyo ay nagsisimula ang system na ilipat ang mga pagbabasa ng mouse sa computer. Ang pagbasa ng system ay binubuo ng mga pagbasa ng accelerometer, at ang mga pagbasa para sa kaliwa at kanang pag-click.
4. Ang mga pagbasa ng system ay binubuo ng stream ng data ng 1 byte o 8 bits, kung saan ang unang tatlong bits ay binubuo ng mga X-coordinate, pangalawang tatlong bits ay binubuo ng mga Y-coordinate, ang pangalawang huling bit ay ang status bit para sa pagkuha ang katayuan ng kaliwang pag-click ng mouse at ang huling bit ay ang status bit para sa pagkuha ng katayuan ng tamang pag-click.
5. Ang halaga ng unang tatlong piraso ie X-coordinate ay maaaring saklaw mula sa 100 <= Xcord <= 999, samantalang ang halaga para sa Y-coordinate ay maaaring saklaw mula sa 100 <= Ycord <= 800. Ang mga halaga para sa tamang pag-click at kaliwang pag-click ay ang mga binary na halaga alinman sa 0 o 1 kung saan ang 1 ay nagpapahiwatig na ang pag-click ay ginawa at 0 na ang pag-click ay hindi ginawa ng gumagamit.
6. Upang hindi hayaan ang pag-bouncing ng pindutan na nakakaapekto sa posisyon ng cursor isang kilalang pagkaantala ng 4 na segundo ay itinatago pagkatapos ng bawat pag-click ng pindutan ng pag-trigger ng mouse.
7. Para sa kanan at kaliwang pag-click sa air mouse, kailangan muna nating pindutin ang alinman sa kaliwa o kanang pindutan, at pagkatapos nito, kailangan nating pindutin ang pindutan ng gatilyo upang lumipat sa posisyon ng air mouse kung saan natin nais.
Programming ang Arduino para sa Air Mouse
Dapat iprogram ang Arduino upang mabasa ang mga halaga ng pagpabilis sa X at Y-axis. Ang kumpletong programa ay ibinibigay sa dulo, sa ibaba ay ang mga mahalagang mga snippet mula sa code.
Pagse-set up ng mga global variable
Tulad ng dati nang sinabi ay bubulutin namin ang module ng Bluetooth gamit ang mga serial serial na software. Kaya upang maitakda ang serial ng software kailangan naming ideklara ang library ng serial ng software at i-set up ang mga pin para sa Tx at Rx. Sa Arduino Nano at Uno Pin 2 at 3 ay maaaring gumana bilang isang serial ng software. Susunod, idineklara namin ang object ng Bluetooth mula sa serial software ng software upang i-set up ang pin para sa Tx at Rx.
# isama
I-void ang setup ()
Sa pag- andar ng pag- setup , itatakda namin ang mga variable upang masabi sa programa kung sila ay kikilos bilang input o output. Ang trigger button ay maitatakda bilang input pull-up, at ang kaliwa at kanang pag-click ay idineklarang input at i-set up bilang Mataas upang sila ay kumilos bilang mga pull pullup.
Itakda din ang baud rate para sa serial at komunikasyon sa Bluetooth sa 9600.
walang bisa ang pag-setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (gatilyo, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Void loop ()
Tulad ng kakailanganin namin ng pindutan ng pag-trigger upang masabi kung kailan namin kailangang ipadala sa system ang stream ng data, kaya't na-set up namin ang buong code sa loob ng habang loop na patuloy na susubaybayan ang estado ng digital ng pull-up na gatilyo, dahil mababa ito ipasa ito nang malayo para sa pagproseso.
Tulad ng naidikit namin ng isang LED upang ipaalam sa amin ang katayuan ng system kung kailan pinindot ang pindutan ng pag-trigger, una naming itinakda ang humantong sa mababang labas ng habang loop dahil ito ay default na kondisyon at mataas sa loob ng habang loop na kung saan ay sindihan ang led tuwing pinipindot ang pindutan ng gatilyo.
Upang mabasa ang katayuan ng kaliwa at kanang pindutan ng pag- click sa buong mundo ay idineklara namin ang dalawang variable na lclick at rclick na ang mga halaga ay paunang na-set up sa 0.
At sa loop , itakda ang halaga ng mga variable na iyon alinsunod sa digital na katayuan ng kaliwa at kanang pindutan ng pag-click upang suriin kung ang mga pindutan ay pinindot o hindi.
Babasahin namin ang mga halaga ng X at Y out pin ng accelerometer gamit ang function na analogRead at ipapakilala ang mga halagang iyon sa laki ng screen upang makuha ang mouse pointer na lumilipat sa buong screen. Dahil ang laki ng screen ay ang mga pixel sa screen, kailangan naming i-set up ito nang naaayon at dahil kailangan namin ang halaga ng output na maging tatlong mga digit na sinadya naming i-set up ang saklaw para sa X bilang 100 <= X <= 999 at katulad ng halaga para sa Y bilang 100 <= Y <= 800. Tandaan, ang mga pixel ay binabasa mula sa kaliwang sulok sa tuktok ibig sabihin, ang tuktok na kaliwang sulok ay may halaga (0,0), ngunit dahil idineklara namin ang tatlong mga digit para sa x at y ang aming mga halaga ay mababasa mula sa punto (100,100).
Dagdag dito, i-print ang halaga ng mga coordinate at ang katayuan ng pag-click sa serial at Bluetooth sa tulong ng Serial.print at bluetooth.print na mga pagpapaandar na tinutulungan nila sa pagkuha ng mga halaga sa serial monitor at sa iyong system sa pamamagitan ng Bluetooth.
Sa wakas, dahil sa pag-bouncing ng isang pindutan ng isang solong halaga ay maaaring ulitin na kung saan ay magiging sanhi ng isang mouse cursor na magtagal sa isang solong posisyon, kaya upang mapupuksa ito kailangan nating idagdag ang pagka-antala na ito.
void loop () { digitalWrite (led, LOW); habang (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = mapa (xh, 286,429,100,999); ycord = mapa (yh, 282,427,100,800); Serial.print (xcord); Serial.print (ycord); kung (lstate == LOW) Serial.print (1); iba pa Serial.print (0); kung (rstate == LOW) Serial.print (1); iba pa Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); kung (lstate == LOW) bluetooth.print (1); iba pa bluetooth.print (0); kung (rstate == LOW) bluetooth.print (1); iba pa bluetooth.print (0); pagkaantala (4000); }}
Script ng Driver sa Python
Tulad ng ngayon, nakumpleto na namin ang hardware at ang bahagi ng firmware nito, ngayon upang makuha ang air mouse na gumagana na kailangan namin upang magkaroon ng isang script ng driver na maaaring mag-decode ng mga signal mula sa air mouse sa mga paggalaw ng cursor, kaya para dito, pinili namin Sawa. Ang Python ay isang wika ng scripting at sa pamamagitan ng pag-script dito nais naming sabihin na makakatulong ito sa amin na makuha ang kontrol ng iba pang programa, dahil dito namin kinokontrol ang cursor ng mouse.
Kaya buksan ang iyong shell ng sawa at kunin ang mga sumusunod na aklatan na naka-install gamit ang mga utos sa ibaba:
pip install serial pip install pyautogui
Ang serial ay isang silid -aklatan para sa sawa na makakatulong sa amin na makuha ang data mula sa mga serial interface tulad ng com port at hinahayaan din kaming manipulahin ito samantalang ang pyautogui ay library para sa python upang makontrol ang mga tampok na GUI, sa kasong ito, mouse.
Ngayon ay makarating tayo sa code para sa mga driver, ang unang bagay na kailangan nating gawin ay ang pag-import ng mga serial at pyautogui na aklatan, at pagkatapos mula sa serial library, kailangan nating itakda ang com port para sa komunikasyon na may baud rate na 9600, ang kapareho ng Bluetooth.serial ay tumatakbo sa. Para sa mga ito kailangan mong konektado ang module ng Bluetooth sa iyong system at pagkatapos ay sa mga setting ng system kailangan mong suriin kung aling com port ito nakakonekta.
Susunod na bagay ay basahin ang serial na komunikasyon mula sa Bluetooth patungo sa system at panatilihin itong patuloy na panatilihin ang natitirang code sa isang tuluy-tuloy na loop sa tulong ng habang 1.
Tulad ng sinabi dati na ang Arduino ay nagpapadala ng 8 bit, una 6 para sa mga coordinate at ang huling dalawa para sa katayuan ng mga pindutan ng pag-click. Kaya basahin ang lahat ng mga piraso sa tulong ng ser.read at i-set up ang haba nito sa 8 bits.
Susunod, hatiin ang mga piraso para sa mga coordinate ng cursor at mga pag-click sa pamamagitan ng paghiwa sa kanila, at pagkatapos ay karagdagang hiwain ang mga cursor bits sa magkakaugnay na X at Y. Parehas sa kaliwa at kanang pag-click.
Ngayon mula sa komunikasyon, nakakakuha kami ng isang byte string at kailangan naming i-convert ito sa isang integer upang magkasya sila para sa mga coordinate, ginagawa namin ito sa pamamagitan ng pagde-decode sa kanila at pagkatapos ay i-type ang mga ito sa mga integer.
Ngayon upang ilipat ang cursor ginagamit namin ang pyautogui moveto function, na tumatagal ng mga argumento ng mga integer coordinate at ilipat ang cursor sa posisyon na iyon.
Susunod na suriin para sa mga pag-click, ginagawa namin ito sa pamamagitan ng paggamit ng huling dalawang piraso at pag-andar ng pyautogui, ang default na pag-click ay naiwan isa, subalit maaari naming itakda ito sa kanan sa pamamagitan ng pagdedeklara ng halaga ng pindutan sa kanan, maaari rin nating tukuyin ang bilang ng mga pag-click sa itakda ito sa isang dobleng pag-click sa pamamagitan ng pagse-set up ng parameter ng mga pag-click sa 2.
Nasa ibaba ang kumpletong Python code na tatakbo sa computer:
import serial import pyautogui ser = serial.Serial ('com3', 9600) habang 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) kung l == 49: pyautogui.click (pag-click = 2) elif r = = 49: pyautogui.click (button = 'kanan', mga pag-click = 2)
Pagsubok sa Arduino Air Mouse
Kaya para sa pagpapatakbo ng Air Mouse maglakip ng isang mapagkukunan ng kuryente dito. Maaari itong mula sa Arduino Nano USB slot o mula sa 5v na kinokontrol na supply ng kuryente gamit ang 7805 IC. Pagkatapos ay patakbuhin ang python driver script sa pamamagitan ng pagtatakda ng com port kung saan nakakonekta ang iyong Bluetooth. Habang tumatakbo ang script makikita mo ang isang oras lag sa pagpitik ng Bluetooth nangangahulugan ito na konektado ito sa iyong system. Pagkatapos para sa pagpapatakbo i-click ang pindutan ng pag-trigger at makikita mo ang posisyon ng mga coordinate na magbabago at kung nais mo ang kaliwa o kanang pag-click, pagkatapos ay pindutin muna ang kaliwa o kanang pindutan at mag-trigger ng pindutan nang magkasama, makikita mo ang pagkilos ng pag-click sa isang nabago na lokasyon ng cursor.
Suriin ang detalyadong gumaganang Video sa ibaba.