- Podmienky
- Schéma zapojenia
- Priebeh procesu pre vzduchovú myš
- Programovanie Arduina pre Air Mouse
- Skript ovládača Python
- Testovanie myši Arduino Air
Už ste niekedy premýšľali, ako náš svet smeruje k pohlcujúcej realite. Neustále nachádzame nové spôsoby a metódy interakcie s okolím pomocou virtuálnej reality, zmiešanej reality, rozšírenej reality atď. Nové zariadenia prichádzajú s týmito technológiami rýchlej stimulácie každý deň, aby na nás zapôsobili svojimi novými interaktívnymi technológiami.
Tieto pohlcujúce technológie sa používajú pri hrách, interaktívnych činnostiach, zábave a mnohých ďalších aplikáciách. V tomto výučbe sa dozvieme niečo o takej interaktívnej metóde, ktorá vám poskytne nový spôsob interakcie s vašim systémom namiesto použitia nudnej myši. Naši herní nadšenci musia vedieť, že pred niekoľkými rokmi herná spoločnosť Nintendo predala myšlienku interaktívnej 3D metódy interakcie s ich konzolami pomocou ručného ovládača známeho ako ovládač Wii. Používa akcelerometer na nájdenie vašich gest pre hru a bezdrôtové odoslanie do systému. Ak sa chcete dozvedieť viac informácií o tejto technológii, môžete si pozrieť ich patent EP1854518B1, ktorý vám poskytne úplnú predstavu o tom, ako táto technológia funguje.
Inšpirovaný touto myšlienkou urobíme „ vzdušnú myš“, ktorá bude interagovať so systémami iba pohybom konzoly vo vzduchu, ale namiesto použitia trojrozmerných súradnicových odkazov budeme používať iba dvojrozmerné súradnicové odkazy, takže môžeme napodobniť činnosť počítačovej myši, pretože myš pracuje v dvoch rozmeroch X a Y.
Koncept tejto bezdrôtovej myši 3D Air Mouse je veľmi jednoduchý. Na získanie hodnoty akcelerácie akcií a pohybov „myši Air“ pozdĺž osi x a y použijeme akcelerometer. Na základe hodnôt akcelerometer budeme ovládať kurzor myši a vykonávať určité akcie pomocou softvérových ovládačov pythonu bežiacich na počítači.
Podmienky
- Arduino Nano (akýkoľvek model)
- Modul akcelerometra ADXL335
- Modul Bluetooth HC-05
- Tlačidlá
- Počítač nainštalovaný v Pythone
Ak sa chcete dozvedieť viac o inštalácii pythonu do počítača, postupujte podľa predchádzajúceho tutoriálu o ovládaní LED Arduino-Python.
Schéma zapojenia
Ak chcete ovládať počítač pohybmi svojej ruky, potrebujete akcelerometer, ktorý udáva zrýchlenie pozdĺž osi X a Y. Na zabezpečenie bezdrôtového prenosu celého systému sa na bezdrôtový prenos signálu do vášho systému používa modul Bluetooth.
Tu sa používa akcelerometer ADXL335, je to trojitý osový modul založený na MEMS, ktorý vydáva akceleráciu pozdĺž osi X, Y a Z, ale ako už bolo povedané, pri ovládaní myši by sme potrebovali akceleráciu iba pozdĺž osi X a Y. Zistite viac o používaní akcelerometra ADXL335 s Arduinom v našich predchádzajúcich projektoch:
- Systém varovania o nehode vozidla založený na Arduine pomocou GPS, GSM a akcelerometra
- Ping Pong hra pomocou Arduina a akcelerometra
- Robot riadený gestami pomocou akcelerometra pomocou Arduina
- Alarm detektora zemetrasenia pomocou Arduina
Tu sú kolíky akcelerometra Xout a Yout pripojené k pinom Analog, A0 a A1 Arduina a na prenos signálov z Arduina do systému sa tu používa modul Bluetooth HC-05, pretože Bluetooth funguje cez Tx a Rx pinové pripojenia, takže používame softvérové sériové piny D2 a D3. Je pripojený pomocou sériového softvéru, pretože ak pripojíme Bluetooth k hardvérovému sériovému portu a začneme čítať údaje cez konzolu pythonu, zobrazilo by chyby pre nesúladovú prenosovú rýchlosť, pretože Bluetooth by komunikoval s pythonom podľa vlastnej prenosovej rýchlosti. Dozviete sa viac o používaní modulu Bluetooth absolvovaním rôznych projektov založených na technológii Bluetooth pomocou rôznych mikrokontrolérov vrátane Arduina.
Tu sme použili tri tlačidlá - jedno na spustenie myši Air a ďalšie dve na ľavé a pravé kliknutie, ako je to znázornené na nasledujúcom obrázku:
Priebeh procesu pre vzduchovú myš
Vývojový diagram zobrazuje procesný tok Air Mouse na báze Arduino:
1. Systém nepretržite kontroluje stlačenie mechanickej spúšte, kým nie je stlačené, takže môžeme normálne pracovať s počítačovou myšou.
2. Keď systém zistí stlačenie tlačidla, ovládací prvok myši sa prevedie na vzdušnú myš.
3. Po stlačení spúšťacieho tlačidla systém začne prenášať údaje z myši do počítača. Čítanie systému pozostáva z nameraných hodnôt akcelerometra a nameraných hodnôt pre ľavé a pravé kliknutie.
4. Systémové čítania pozostávajú z dátového toku s veľkosťou 1 bajtu alebo 8 bitov, v ktorom prvé tri bity pozostávajú zo súradníc X, druhé tri bity pozostávajú zo súradníc Y, druhý posledný bit je stavový bit na získanie stav ľavého kliknutia myši a posledný bit je stavový bit na získanie stavu pravého kliknutia.
5. Hodnota prvých troch bitov, tj. Súradnica X, sa môže pohybovať od 100 <= Xcord <= 999, zatiaľ čo hodnota pre súradnicu Y sa môže pohybovať od 100 <= Ycord <= 800. Hodnoty pre pravé a ľavé kliknutie sú binárne hodnoty buď 0 alebo 1, v ktorých 1 znamená, že došlo ku kliknutiu a 0, že kliknutie nebolo vykonané používateľom.
6. Aby odrážanie tlačidla nemalo vplyv na polohu kurzora, po každom kliknutí na spúšťacie tlačidlo myši sa zachováva známe oneskorenie 4 sekundy.
7. Pre pravé a ľavé kliknutie vo vzdušnej myši musíme najskôr stlačiť buď ľavé alebo pravé tlačidlo a potom stlačiť spúšť, aby sme sa presunuli do polohy vzdušnej myši, kde chceme.
Programovanie Arduina pre Air Mouse
Arduino by malo byť naprogramované na čítanie hodnôt zrýchlenia v osiach X a Y. Kompletný program je uvedený na konci, ďalej sú dôležité úryvky z kódexu.
Nastavenie globálnych premenných
Ako už bolo povedané, modul Bluetooth zapojíme pomocou softvérových sériových pinov. Takže pre nastavenie sériového softvéru musíme deklarovať knižnicu sériového softvéru a nastaviť piny pre Tx a Rx. V Arduino môžu Nano a Uno Pin 2 a 3 fungovať ako softvérový seriál. Ďalej deklarujeme objekt Bluetooth zo softvérovej sériovej knižnice, aby sme nastavili kolík pre Tx a Rx.
#include
Nastavenie neplatnosti ()
Vo funkcii nastavenia nastavíme premenné tak, aby povedali programu, či budú fungovať ako vstup alebo výstup. Spúšťacie tlačidlo by bolo nastavené ako vstupné pull-up a ľavé a pravé kliknutie sú deklarované ako vstupné a nastavené ako vysoké, aby fungovali ako vstupné pullupy.
Tiež nastavte prenosovú rýchlosť pre sériovú komunikáciu a komunikáciu Bluetooth na 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (spúšťač, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, VÝSTUP); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Neplatná slučka ()
Pretože by sme potrebovali spúšťacie tlačidlo, aby sme zistili, kedy potrebujeme odoslať systému dátový tok, nastavili sme celý kód do while cyklu, ktorý bude nepretržite monitorovať digitálny stav pull-up spúšťača, pretože bude nízky, bude odovzdať ďalej na spracovanie.
Ako sme už v prílohe LED sa dajte nám vedieť o stave systému pri každom stlačení tlačidla spúšte, sme pôvodne nastaviť viedlo k minimu mimo while slučku ako východiskového stavu, v ktorom je vysoká vnútri while slučka, ktorá sa rozsvieti LED dióda vždy, keď je stlačené tlačidlo spúšte.
Na prečítanie stavu ľavého a pravého tlačidla sme globálne deklarovali dve premenné lclick a rclick, ktorých hodnoty boli pôvodne nastavené na 0.
A v slučke nastavte hodnotu týchto premenných podľa digitálneho stavu ľavého a pravého tlačidla na kliknutie a skontrolujte, či sú tlačidlá stlačené alebo nie.
Čítali by sme hodnoty X a Y kolíkov akcelerometra pomocou funkcie analogRead a mapovali by sme tieto hodnoty na veľkosť obrazovky, aby sa ukazovateľ myši pohyboval po celej obrazovke. Pretože veľkosť obrazovky sú pixely na obrazovke, musíme ju príslušne nastaviť a keďže potrebujeme, aby výstupná hodnota bola tri číslice, zámerne sme nastavili rozsah pre X ako 100 <= X <= 999 a podobne aj hodnota pre Y ako 100 <= Y <= 800. Pamätajte, že pixely sa čítajú z ľavého horného rohu, tj. Ľavý horný roh má hodnotu (0,0), ale keďže sme deklarovali tri číslice pre x a y, naše hodnoty by sa načítali z bodu (100,100).
Ďalej vytlačte hodnotu súradníc a stav kliknutia cez sériové rozhranie a Bluetooth pomocou funkcií Serial.print a bluetooth.print, ktoré pomáhajú pri získavaní hodnôt na sériovom monitore a vo vašom systéme cez Bluetooth.
Nakoniec môže dôjsť v dôsledku odrazu tlačidla k jednej hodnote, ktorá by spôsobila, že kurzor myši zotrvá nad jednou pozíciou. Aby sme sa toho zbavili, musíme pridať toto oneskorenie.
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 = mapa (xh, 286 429 100 999); ycord = mapa (yh, 282 427 100 800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); else Serial.print (0); if (rstate == LOW) Serial.print (1); else Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); inak bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); else bluetooth.print (0); oneskorenie (4 000); }}
Skript ovládača Python
Odteraz sme dokončili hardvér a jeho firmvérovú časť. Aby sme mohli pracovať so vzduchovou myšou, musíme mať skript ovládača, ktorý dokáže dekódovať signály zo vzduchovej myši do pohybov kurzora, preto sme si vybrali Python. Python je skriptovací jazyk a skriptovaním tu myslíme, že nám pomáha získať kontrolu nad iným programom, pretože tu ovládame kurzor myši.
Takže otvorte svoj pythonovský shell a nainštalujte si nasledujúce knižnice pomocou nižšie uvedených príkazov:
nainštalovať sériové pip nainštalovať pyautogui
Serial je knižnica pre Python, ktorý nám pomáha k získaniu dát zo sériového rozhrania ako COM porty a tiež nám umožňuje manipulovať s ním, zatiaľ čo pyautogui je knižnica pre Python získať kontrolu nad funkcií GUI, v tomto prípade myší.
Teraz poďme na kód pre ovládače, prvá vec, ktorú musíme urobiť, je import sériových a pyautogui knižníc, a potom zo sériovej knižnice musíme nastaviť komunikačný port pre komunikáciu s prenosovou rýchlosťou 9600, rovnaké ako Bluetooth.serial funguje na. K tomu musíte pripojiť modul Bluetooth k vášmu systému a potom v nastaveniach systému skontrolovať, ku ktorému portu je pripojený.
Ďalšou vecou je čítať sériovú komunikáciu z Bluetooth do systému a udržiavať ju neustále v chode. Zvyšok kódu udržiavať v nepretržitej slučke pomocou while 1.
Ako už bolo povedané, Arduino vysiela 8 bitov, prvých 6 pre súradnice a posledné dva pre stav tlačidiel klikania. Prečítajte si teda všetky bity pomocou ser.read a nastavte ich dĺžku na 8 bitov.
Ďalej rozdeľte bity pre súradnice kurzora a kliknutia ich rozrezaním a potom ďalej rozdeľte kurzorové bity na súradnice X a Y zvlášť. To isté platí pre ľavé a pravé kliknutie.
Teraz z komunikácie dostávame bajtový reťazec a musíme ho previesť na celé číslo, aby sa zmestili do súradníc, urobíme to ich dekódovaním a následným obsadením do celých čísel.
Teraz na presun kurzora použijeme funkciu pyautogui moveto , ktorá vezme ako argumenty tieto celočíselné súradnice a presunie kurzor na túto pozíciu.
Ďalej skontrolujte kliknutia, urobíme to pomocou posledných dvoch bitov a funkcie kliknutia pyautogui, jeho predvolené kliknutie je ľavé, ale môžeme ho nastaviť doprava deklarovaním hodnoty tlačidla doprava, môžeme tiež definovať počet kliknutí do nastavte to na dvojité kliknutie nastavením parametra kliknutia na 2.
Ďalej je uvedený kompletný kód Pythonu, ktorý sa má spustiť v počítači:
import serial import pyautogui ser = serial.Serial ('com3', 9600) while 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) ak l == 49: pyautogui.click (kliknutia = 2) elif r = = 49: pyautogui.click (button = 'right', clicks = 2)
Testovanie myši Arduino Air
Pre prevádzku Air Mouse k nej pripojte zdroj energie. Môže to byť zo slotu USB Arduino Nano USB alebo z regulovaného napájacieho zdroja 5v pomocou 7805 IC. Potom spustite skript ovládača pythonu nastavením komunikačného portu, ku ktorému je pripojené vaše Bluetooth. Počas spustenia skriptu by ste v blikaní Bluetooth videli časové oneskorenie, čo znamená, že je pripojené k vášmu systému. Potom pre jeho obsluhu kliknite na spúšťacie tlačidlo a videli by ste, že by sa zmenila poloha súradníc. Ak chcete kliknúť doľava alebo doprava, potom stlačte súčasne ľavé alebo pravé tlačidlo a spúšťacie tlačidlo, akciu kliknutia by ste videli na zmenené umiestnenie kurzora.
Skontrolujte podrobné pracovné video nižšie.