- Preduvjeti
- Kružni dijagram
- Proces procesa za zračnog miša
- Programiranje Arduina za Air Mouse
- Python skripta za upravljački program
- Testiranje zračnog miša Arduino
Jeste li se ikad pitali kako se naš svijet kreće prema uronjenoj stvarnosti. Neprestano pronalazimo nove načine i metode za interakciju s okolinom pomoću virtualne stvarnosti, mješovite stvarnosti, proširene stvarnosti itd. Svakodnevno izlaze novi uređaji s ovim brzim tehnologijama kako bi nas impresionirali svojim novim interaktivnim tehnologijama.
Ove imerzivne tehnologije koriste se u igrama, interaktivnim aktivnostima, zabavi i mnogim drugim aplikacijama. U ovom ćemo uputstvu znati o takvoj interaktivnoj metodi koja vam daje novi način interakcije sa vašim sustavom, umjesto da koristite dosadnog miša. Naši geekovi moraju znati da nekoliko godina unatrag Nintendo, tvrtka za igre na sreću, prodaje ideju 3D interaktivne metode za interakciju sa svojim konzolama uz pomoć ručnog kontrolera poznatog kao Wii kontroler. Koristi akcelerometar za pronalaženje vaših gesta za igru i bežično slanje u sustav. Ako želite znati više o ovoj tehnologiji, možete provjeriti njihov patent EP1854518B1, to će vam dati potpunu ideju o načinu na koji ova tehnologija funkcionira.

Inspirirani ovom idejom, napravit ćemo "Zračnog miša" za interakciju sa sustavima samo pomicanjem konzole u zraku, ali umjesto korištenja trodimenzionalnih referenci koordinata, koristit ćemo samo dvodimenzionalne reference koordinata tako da možemo oponašati rad računalnog miša budući da miš radi u dvije dimenzije X i Y.
Koncept koji stoji iza ovog bežičnog 3D zračnog miša vrlo je jednostavan, upotrijebit ćemo akcelerometar da bismo dobili vrijednost ubrzanja radnji i pokreta "Zračnog miša" duž x i y osi, a zatim na temelju vrijednosti akcelerometar ćemo kontrolirati kursor miša i izvoditi određene radnje uz pomoć pokretačkih programa python softvera koji rade na računalu.
Preduvjeti
- Arduino Nano (bilo koji model)
- Modul akcelerometra ADXL335
- Bluetooth HC-05 modul
- Tipke
- Python instalirano računalo
Da biste saznali više o instaliranju pythona u računalo, slijedite prethodni vodič o Arduino-Python LED Controllingu.
Kružni dijagram


Da biste upravljali svojim računalom pokretima ruke, potreban vam je akcelerometar koji daje ubrzanje duž osi X i Y i kako bi cijeli sustav bio bežičan, koristi se Bluetooth modul za bežični prijenos signala u vaš sustav.
Ovdje se koristi ADXL335 akcelerometar, to je trostruki osovinski modul zasnovan na MEMS-u koji izbacuje ubrzanje duž osi X, Y i Z, ali kao što je prethodno rečeno za upravljanje mišem trebalo bi nam ubrzanje samo duž osi X i Y. Saznajte više o korištenju ADXL335 akcelerometra s Arduinom s našim prethodnim projektima:
- Sustav za upozoravanje na nezgode na bazi Arduina koji koristi GPS, GSM i akcelerometar
- Ping Pong igra pomoću Arduina i Akcelerometra
- Robot zasnovan na akcelerometru koji kontrolira gesta pomoću Arduina
- Alarm detektora potresa pomoću Arduina
Ovdje su Xout i Yout akcelerometar spojeni na analogne, A0 i A1 pinove Arduina i za prijenos signala iz Arduina u sustav ovdje se koristi Bluetooth modul HC-05, budući da Bluetooth radi preko Tx i Rx pin veze, tako da koristimo softverske serijske pinove D2 i D3. Povezana je pomoću softverskog serijskog, jer ako Bluetooth povežemo s hardverskim serijskim i počnemo dobivati očitanja preko python konzole, prikazivat će se pogreške u brzini nepodudaranja brzine prijenosa jer bi Bluetooth komunicirao s pythonom na vlastitoj brzini prijenosa. Saznajte više o korištenju Bluetooth modula prolazeći kroz razne projekte koji se temelje na Bluetoothu koristeći različite mikrokontrolere, uključujući Arduino.
Ovdje smo koristili tri tipke - jednu za aktiviranje zračnog miša, a druge dvije za lijevi i desni klik kao što je prikazano na donjoj slici:

Proces procesa za zračnog miša
Dijagram toka prikazuje tijek procesa zračnog miša temeljenog na Arduinu:

1. Sustav kontinuirano provjerava pritiska li se mehanički okidač dok se ne pritisne i možemo normalno raditi s računalnim mišem.
2. Kad sustav otkrije pritisak gumba, kontrola miša prebačena je na zračni miš.
3. Kada se pritisne tipka okidača, sustav počinje prenositi očitanja miša na računalo. Očitavanje sustava sastoji se od očitanja akcelerometra i očitanja za lijevi i desni klik.
4. Očitavanja sustava sastoje se od protoka podataka od 1 bajta ili 8 bitova, u kojem se prva tri bita sastoje od X-koordinata, druga tri bita sastoje se od Y-koordinata, drugi zadnji bit je statusni bit za dobivanje status lijevog klika miša i zadnji bit je statusni bit za dobivanje statusa desnog klika.
5. Vrijednost prva tri bita, tj. X-koordinata može se kretati od 100 <= Xcord <= 999, dok se vrijednost za Y-koordinatu može kretati od 100 <= Ycord <= 800. Vrijednosti za desni klik i lijevi klik binarne su vrijednosti 0 ili 1 u kojima 1 označava klik i 0 da korisnik nije izvršio klik.
6. Da odbijanje gumba ne bi utjecalo na položaj kursora, čuva se poznato kašnjenje od 4 sekunde nakon svakog klika gumba okidača miša.
7. Za desni i lijevi klik u zračnom mišu prvo moramo pritisnuti lijevu ili desnu tipku, a nakon toga moramo pritisnuti gumb okidača da se pomaknemo na položaj zračnog miša tamo gdje želimo.
Programiranje Arduina za Air Mouse
Arduino treba biti programiran za očitavanje vrijednosti ubrzanja na X i Y osi. Kompletan program se daje na kraju, u nastavku su važni isječci iz koda.
Postavljanje globalnih varijabli
Kao što je prethodno rečeno, spojit ćemo Bluetooth modul sa softverskim serijskim iglama. Dakle, za postavljanje serijskog softvera moramo proglasiti biblioteku serijskog softvera i postaviti pinove za Tx i Rx. U Arduino Nano i Uno Pin 2 i 3 mogu raditi kao serijski softver. Dalje, deklariramo Bluetooth objekt iz serijske biblioteke softvera za postavljanje pin-a za Tx i Rx.
#include
Postavljanje praznine ()
U funkciji postavljanja postavit ćemo varijable kako bismo programu rekli hoće li djelovati kao ulaz ili izlaz. Gumb okidača bio bi postavljen kao ulazno povlačenje, a lijevi i desni klikovi deklarirani su kao ulazni i postavljeni kao visoki kako bi djelovali kao ulazni sklopovi.
Također postavite brzinu prijenosa za serijsku i Bluetooth komunikaciju na 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (okidač, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, IZLAZ); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Petlja praznina ()
Kao što bi nam trebao gumb okidača da bismo znali kada sustavu moramo poslati tok podataka, tako smo postavili cijeli kôd unutar while petlje koja će kontinuirano nadzirati digitalno stanje pull-up okidača, jer se spušta nisko proslijedite dalje na obradu.
Kako smo dodali LED diodu koja nas obavještava o statusu sustava kada se pritisne gumb okidača, u početku smo postavili led na low izvan while petlje kao zadanog stanja i visoko unutar while petlje koja će osvijetliti led kad god se pritisne gumb okidača.
Da bismo pročitali status gumba lijevog i desnog klika, globalno smo proglasili dvije varijable lclick i rclick čije su vrijednosti u početku postavljene na 0.
I u petlji postavite vrijednost tih varijabli prema digitalnom statusu lijevog i desnog gumba kako biste provjerili jesu li tipke pritisnute ili ne.
Čitali bismo vrijednosti X i Y izlaznih pinova akcelerometra pomoću funkcije analogRead i mapirali bismo te vrijednosti na veličinu zaslona kako bi se pokazivač miša pomicao po cijelom zaslonu. Budući da su veličina zaslona pikseli na zaslonu, moramo je postaviti u skladu s tim, a kako trebamo izlaznu vrijednost od tri znamenke, namjerno smo postavili raspon za X kao 100 <= X <= 999 i slično vrijednost za Y kao 100 <= Y <= 800. Zapamtite, pikseli se čitaju iz gornjeg lijevog kuta, tj. Gornji lijevi kut ima vrijednost (0,0), ali budući da smo deklarirali tri znamenke za x i y, naše vrijednosti bi se čitale iz točke (100.100).
Nadalje, ispišite vrijednost koordinata i status klika preko serijskog i Bluetootha uz pomoć funkcija Serial.print i bluetooth.print koje pomažu u prenošenju vrijednosti na serijski monitor i preko vašeg sustava putem Bluetootha.
Napokon, zbog odbijanja gumba može se ponoviti jedna vrijednost koja bi uzrokovala zadržavanje kursora miša na jednom položaju, pa da bismo se riješili toga, moramo dodati ovo kašnjenje.
void loop () { digitalWrite (led, LOW); while (digitalRead (okidač) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = karta (xh, 286.429.100.999); ycord = karta (yh, 282.427.100.800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); inače Serial.print (0); if (rstate == LOW) Serial.print (1); inače Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); drugo bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); inače bluetooth.print (0); kašnjenje (4000); }}
Python skripta za upravljački program
Od sada smo završili sa hardverom i njegovim firmware dijelom, sada da bi zračni miš radio, trebamo imati skriptu upravljačkog programa koja bi mogla dekodirati signale iz zračnog miša u pokrete kursora, pa smo za ovo odabrali Piton. Python je skriptni jezik i pod skriptiranjem ovdje mislimo na to da nam pomaže dobiti kontrolu nad drugim programom, jer ovdje kontroliramo kursor miša.
Dakle, otvorite svoju python ljusku i instalirajte sljedeće knjižnice pomoću naredbi u nastavku:
pip install serijski pip install pyautogui
Serijski je knjižnica za Python koji nam pomaže da biste dobili podatke iz serijskog sučelja kao što com portova i omogućuje nam da manipuliraju dok pyautogui je knjižnica za piton da biste dobili kontrolu nad GUI značajki, u ovom slučaju, miš.
Sada ćemo prijeći na kod za upravljačke programe, prvo što moramo učiniti je uvoz serijske i pyautogui biblioteke, a zatim iz serijske biblioteke moramo postaviti com port za komunikaciju brzinom prijenosa od 9600, isto kao i Bluetooth.serial radi na. Da biste to učinili, morate povezati Bluetooth modul sa svojim sustavom, a zatim u postavkama sustava morate provjeriti na koji je com port povezan.
Sljedeća stvar je čitati serijsku komunikaciju s Bluetootha u sustav i neprekidno ga držati, a ostatak koda neprekidno držite uz pomoć dok 1.
Kao što je prethodno rečeno, Arduino šalje 8 bitova, prvih 6 za koordinate, a posljednja dva za status gumba za klik. Dakle, pročitajte sve bitove uz pomoć ser.read i postavite njegovu duljinu na 8 bitova.
Zatim podijelite bitove za koordinate pokazivača i klikove tako što ćete ih presjeći, a zatim bitove kursora dalje odvojeno razdijelite na X i Y koordinate. Isto vrijedi i za lijevi i desni klik.
Sada iz komunikacije dobivamo bajtni niz i moramo ga pretvoriti u cijeli broj kako bi se mogli uklopiti u koordinate, to radimo tako da ih dekodiramo i zatim otkucamo u cijele brojeve.
Sada za pomicanje kursora koristimo funkciju pyautogui moveto , koja uzima kao argumente one cjelobrojne koordinate i pomiče kursor na taj položaj.
Sljedeća provjera za klikove, to radimo pomoću zadnja dva bita i pyautoguijevom funkcijom klika, zadani klik je lijevi, no možemo je postaviti u desnu izjavu vrijednosti gumba udesno, možemo definirati i broj klikova na postavite ga na dvoklik postavljanjem parametra klikova na 2.
Ispod je cjeloviti Python kôd koji treba pokrenuti na računalu:
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) if l == 49: pyautogui.click (clicks = 2) elif r = = 49: pyautogui.click (gumb = 'desno', klikovi = 2)
Testiranje zračnog miša Arduino
Dakle, za rad zračnog miša priključite mu izvor napajanja. Može biti iz Arduino Nano USB utora ili iz 5v reguliranog napajanja pomoću 7805 IC. Zatim pokrenite skriptu python upravljačkog programa postavljanjem com porta na koji je povezan Bluetooth. Kako se skripta izvodi, vidjet ćete vremenski zaostatak treptanja Bluetootha, što znači da je povezan s vašim sustavom. Zatim za njegovo rukovanje pritisnite gumb okidača i vidjeli biste da bi se položaj koordinata promijenio i ako želite lijevi ili desni klik, a zatim prvo pritisnite lijevi ili desni gumb i gumb okidača, vidjet ćete akciju klika na promijenjeno mjesto kursora.

Detaljan radni video pogledajte u nastavku.
