- Predpogoji
- Shema vezja
- Tok procesa za zračno miško
- Programiranje Arduina za Air Mouse
- Python Driver Script
- Testiranje Arduino Air Mouse
Ste se kdaj vprašali, kako se naš svet premika proti poglobljeni realnosti. Neprestano iščemo nove načine in metode za interakcijo z okolico z uporabo navidezne resničnosti, mešane resničnosti, razširjene resničnosti itd. Vsak dan izhajajo nove naprave s temi hitrimi tehnologijami, ki nas navdušujejo nad svojimi novimi interaktivnimi tehnologijami.
Te izjemne tehnologije se uporabljajo v igrah, interaktivnih dejavnostih, zabavi in številnih drugih aplikacijah. V tej vadnici bomo vedeli za tako interaktivno metodo, ki vam daje nov način za interakcijo s sistemom, namesto da bi uporabljali dolgočasno miško. Naši igralci bi morali vedeti, da Nintendo že nekaj let nazaj igralniško podjetje prodaja zamisel o 3D interaktivni metodi za interakcijo s svojimi konzolami s pomočjo ročnega krmilnika, znanega kot Wii krmilnik. S pomočjo merilnika pospeška poišče vaše geste za igro in jih brezžično pošlje v sistem. Če želite izvedeti več o tej tehnologiji, si lahko ogledate njihov patent EP1854518B1, tako boste dobili popolno predstavo o delovanju te tehnologije.
Navdihnjeni s to idejo bomo naredili "zračno miško" za interakcijo s sistemi samo s premikanjem konzole po zraku, toda namesto uporabe 3-dimenzionalnih referenc koordinat bomo uporabili le dvodimenzionalne reference koordinat, tako da lahko posnemamo delovanje računalniške miške, saj miška deluje v dveh dimenzijah X in Y.
Koncept te brezžične 3D zračne miške je zelo preprost, z merilnikom pospeška bomo dobili vrednost pospeška dejanj in gibov "zračne miške" vzdolž osi x in y, nato pa na podlagi vrednosti merilnik pospeška bomo nadzorovali kurzor miške in izvajali določena dejanja s pomočjo programskih gonilnikov python, ki se izvajajo v računalniku.
Predpogoji
- Arduino Nano (kateri koli model)
- Modul pospeška ADXL335
- Modul Bluetooth HC-05
- Tipke
- Python nameščen računalnik
Če želite izvedeti več o namestitvi pythona v računalnik, sledite prejšnji vadnici o nadzoru LED Arduino-Python.
Shema vezja
Za nadzor računalnika z gibi rok potrebujete merilnik pospeška, ki oddaja pospešek po osi X in Y in za brezžično povezavo celotnega sistema se uporablja modul Bluetooth za brezžični prenos signala v sistem.
Tu je uporabljen merilnik pospeška ADXL335, to je modul s tremi osmi, ki temelji na MEMS in oddaja pospešek vzdolž osi X, Y in Z, toda kot smo že povedali, za nadzor miške potrebujemo pospešek le vzdolž osi X in Y. Preberite več o uporabi merilnika pospeška ADXL335 z Arduinom pri naših prejšnjih projektih:
- Sistem za opozarjanje na nezgode na osnovi Arduina z uporabo GPS, GSM in merilnika pospeška
- Igra ping pong z uporabo Arduina in merilnika pospeška
- Robot s krmiljenjem na merilniku pospeška z uporabo Arduina
- Alarm za detektor potresa z uporabo Arduina
Tu sta zatič Xout in Yout merilnika pospeška povezana z analognimi, A0 in A1 zatiči Arduino in za prenos signalov iz Arduina v sistem je tukaj uporabljen modul Bluetooth HC-05, saj Bluetooth deluje prek Tx in Rx pin povezave, zato uporabljamo serijska zatiča D2 in D3 programske opreme. Povezan je z uporabo programske opreme serijsko, ker če Bluetooth povežemo s serijsko opremo strojne opreme in začnemo prejemati odčitke prek konzole python, se prikažejo napake v hitrosti neujemanja v hitrosti, saj bi Bluetooth komuniciral s pitonom na lastni hitrosti prenosa. Preberite več o uporabi modula Bluetooth, tako da skozi različne projekte, ki temeljijo na Bluetooth, uporabite različne mikrokrmilnike, vključno z Arduino.
Tu smo uporabili tri gumbe - enega za sprožitev miške Air in druga dva za levi in desni klik, kot je prikazano na spodnji sliki:
Tok procesa za zračno miško
Diagram poteka prikazuje procesni proces Arduino Air Mouse:
1. Sistem neprekinjeno preverja, ali je treba pritisniti mehanski sprožilec, dokler ni pritisnjen, da lahko z računalniško miško normalno delamo.
2. Ko sistem zazna pritisk gumba, se nadzor miške prenese na zračno miško.
3. Ko pritisnete sprožilni gumb, sistem začne prenašati odčitke miške v računalnik. Sistemsko odčitavanje je sestavljeno iz odčitkov merilnika pospeška ter odčitkov za levi in desni klik.
4. Sistemski odčitki so sestavljeni iz podatkovnega toka 1 bajta ali 8 bitov, pri čemer so prvi trije bitovi sestavljeni iz X-koordinat, drugi trije biti so sestavljeni iz Y-koordinat, drugi zadnji bit je statusni bit za pridobivanje stanje levega klika miške in zadnji bit je statusni bit za pridobitev stanja desnega klika.
5. Vrednost prvih treh bitov, tj. X-koordinata, se lahko giblje od 100 <= Xcord <= 999, vrednost Y-koordinate pa lahko znaša od 100 <= Ycord <= 800. Vrednosti za desni klik in levi klik sta binarni vrednosti bodisi 0 bodisi 1, pri čemer 1 pomeni, da je klik izveden, 0 pa, da uporabnik ne klikne.
6. Da odbijanje gumba ne bo vplivalo na položaj kurzorja, se po vsakem kliku sprožilnega gumba miške obdrži znana zakasnitev 4 sekunde.
7. Za desni in levi klik v zračni miški moramo najprej pritisniti levi ali desni gumb, nato pa pritisniti sprožilni gumb, da se premaknemo v položaj zračne miške, kjer želimo.
Programiranje Arduina za Air Mouse
Arduino mora biti programiran za branje vrednosti pospeška na osi X in Y. Celoten program je podan na koncu, v nadaljevanju so pomembni Delčki kode.
Nastavitev globalnih spremenljivk
Kot že rečeno, bomo modul Bluetooth povezali s serijskimi zatiči programske opreme. Za nastavitev serijske programske opreme moramo razglasiti knjižnico serijske programske opreme in nastaviti nožice za Tx in Rx. V Arduino Nano in Uno Pin 2 in 3 lahko delujeta kot serijska programska oprema. Nato v serijski knjižnici programske opreme prijavimo objekt Bluetooth za nastavitev zatiča za Tx in Rx.
#include
Nastavitev praznine ()
V nastavitveni funkciji bomo nastavili spremenljivke, ki bodo programu sporočale, ali bodo delovale kot vhod ali izhod. Gumb sprožilca bi bil nastavljen kot vhodno dvigovanje, levi in desni klik pa so deklarirani kot vhodni in nastavljeni kot visoki, da delujejo kot vhodna pullupa.
Nastavite tudi hitrost prenosa za serijsko in Bluetooth komunikacijo na 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (sprožilec, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, IZHOD); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Neveljavna zanka ()
Kot bi potrebovali gumb za sprožitev, da bi ugotovili, kdaj moramo sistemu poslati podatkovni tok, smo znotraj vmesne zanke nastavili celotno kodo, ki bo neprekinjeno spremljala digitalno stanje vlečnega sprožilca, saj bo ta nizka predati naprej za obdelavo.
Ker smo priklopili LED, da nas obvestite o stanju sistema, ko pritisnete sprožilni gumb, smo prvotno nastavili led na nizko zunaj zanke while kot privzeti pogoj in visoko znotraj while zanke, ki bo zasvetila led vsakič, ko pritisnete sprožilec.
Za branje stanja gumba za levi in desni klik smo globalno razglasili dve spremenljivki lclick in rclick, katerih vrednosti so bile prvotno nastavljene na 0.
In v zanki nastavite vrednost teh spremenljivk glede na digitalno stanje levega in desnega gumba, da preverite, ali so gumbi pritisnjeni ali ne.
Z uporabo funkcije analogRead beremo vrednosti izhodnih zatičev X in Y merilnika pospeška in bi te vrednosti preslikali na velikost zaslona, da bi se kazalec miške premikal po celotnem zaslonu. Ker je velikost zaslona v slikovnih pikah na zaslonu, jo moramo ustrezno nastaviti in ker potrebujemo izhodno vrednost, ki mora biti trimestna, smo namerno nastavili obseg za X kot 100 <= X <= 999 in podobno vrednost za Y kot 100 <= Y <= 800. Ne pozabite, da se slikovne pike berejo iz zgornjega levega kota, tj. Zgornji levi kot ima vrednost (0,0), ker pa smo razglasili tri številke za x in y, bi bile naše vrednosti odčitane s točke (100.100).
Nadalje natisnite vrednost koordinat in stanje klika na serijsko in Bluetooth s pomočjo funkcij Serial.print in bluetooth.print, ki pomagajo pri pridobivanju vrednosti na serijski monitor in prek vašega sistema prek Bluetootha.
Končno se lahko zaradi poskakovanja gumba ponovi ena sama vrednost, zaradi katere se kurzor miške zadrži nad enim položajem, zato moramo za znebitev dodati to zamudo.
void loop () { digitalWrite (led, LOW); while (digitalRead (sprožilec) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = zemljevid (xh, 286.429.100.999); ycord = zemljevid (yh, 282.427.100.800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); sicer Serial.print (0); if (rstate == LOW) Serial.print (1); sicer Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); drugače bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); sicer bluetooth.print (0); zamuda (4000); }}
Python Driver Script
Zdaj smo zaključili s strojno opremo in njenim delom vdelane programske opreme, zdaj, da zračna miška deluje, moramo imeti gonilniški skript, ki bi lahko signale iz zračne miške dekodiral v premike kurzorja, zato smo za to izbrali Python. Python je skriptni jezik in s skriptiranjem tukaj mislimo, da nam pomaga, da dobimo nadzor nad drugim programom, saj tukaj nadzorujemo miškin kazalec.
Torej odprite svojo lupino python in namestite naslednje knjižnice z uporabo spodnjih ukazov:
pip namestite serijski pip namestite pyautogui
Serijsko je knjižnica za Python, ki nam pomaga, da bi dobili podatke iz serijskih vmesnikov, kot so com pristanišča in tudi nam omogoča manipuliranje z njo pa pyautogui je knjižnica za python, da se nadzor nad funkcijami GUI, v tem primeru, miško.
Zdaj pa pojdimo na kodo gonilnikov, najprej moramo uvoziti serijsko in pyautogui knjižnico, nato pa iz serijske knjižnice moramo nastaviti komunikacijska vrata za komunikacijo s hitrostjo prenosa 9600, enako kot Bluetooth.serial deluje na. Za to morate povezati modul Bluetooth s sistemom, nato pa v sistemskih nastavitvah preveriti, na katero com vrata je povezan.
Naslednja stvar je, da preberete serijsko komunikacijo iz Bluetootha v sistem in da neprekinjeno nadaljuje, da ostane koda v neprekinjeni zanki s pomočjo, medtem ko 1.
Kot že rečeno, Arduino pošilja 8 bitov, najprej 6 za koordinate in zadnji dve za stanje gumbov. Torej preberite vse bite s pomočjo ser.read in nastavite njegovo dolžino na 8 bitov.
Nato razdelite bite za koordinate kazalke in klike tako, da jih razrežete, nato pa bitove kazalca ločite na koordinati X in Y ločeno. Enako velja za levi in desni klik.
Zdaj iz komunikacije dobimo bajtni niz in ga moramo pretvoriti v celo število, da se lahko prilegajo koordinatam, to storimo tako, da jih dekodiramo in nato vtipkamo v cela števila.
Zdaj za premikanje kurzorja uporabimo funkcijo pyautogui moveto , ki kot argumente vzame te celoštevilčne koordinate in kurzor premakne na ta položaj.
Naslednji pregled za klike naredimo tako, da uporabimo zadnja dva bita in pyautoguijevo funkcijo klika, privzeti klik je levi, lahko pa jo nastavimo v desno tako, da v desni označimo vrednost gumba, določimo lahko tudi število klikov na nastavite na dvojni klik tako, da nastavite parameter kliki na 2.
Spodaj je celotna koda Pythona, ki jo je treba zagnati v računalniku:
uvoz serijski uvoz pyautogui ser = serial.Serial ('com3', 9600), medtem ko je 1: k = ser.read (8) kurzor = k klik = k x = kazalec y = kazalec l = klik r = klik xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor), če je l == 49: pyautogui.click (kliki = 2) elif r = = 49: pyautogui.click (gumb = 'desno', kliki = 2)
Testiranje Arduino Air Mouse
Torej za upravljanje zračne miške nanjo priključite vir energije. Lahko je iz reže Arduino Nano USB ali iz 5v reguliranega napajanja z uporabo 7805 IC. Nato zaženite skript gonilnika python, tako da nastavite com vrata, s katerimi je povezan Bluetooth. Ko se skript zažene, boste videli utripanje Bluetooth-a, kar pomeni, da je povezan z vašim sistemom. Nato za upravljanje kliknite gumb sprožilca in videli bi, da bi se položaj koordinat spremenil. Če želite levi ali desni klik, nato najprej pritisnite levi ali desni gumb in sprožilni gumb, boste videli delovanje klika na spremenjena lokacija kurzorja.
Spodaj si oglejte podroben delovni video.