- Condiții prealabile
- Diagrama circuitului
- Flux de proces pentru mouse-ul Air
- Programarea Arduino pentru Air Mouse
- Script de driver Python
- Testarea mouse-ului Arduino Air
Ne-am întrebat vreodată cum lumea noastră se îndreaptă spre realitatea captivantă. Găsim continuu noi modalități și metode de a interacționa cu mediul înconjurător folosind realitatea virtuală, realitatea mixtă, realitatea augmentată etc. Dispozitive noi ies în fiecare zi cu aceste tehnologii de ritm rapid pentru a ne impresiona prin noile lor tehnologii interactive.
Aceste tehnologii captivante sunt utilizate în jocuri, activități interactive, divertisment și multe alte aplicații. În acest tutorial, vom afla despre o astfel de metodă interactivă care vă oferă o nouă modalitate de a interacționa cu sistemul dvs. în loc să utilizați un mouse plictisitor. Geekii noștri de jocuri trebuie să știe că, cu câțiva ani în urmă, Nintendo o companie de jocuri vinde o idee despre o metodă interactivă 3D pentru a interacționa cu consolele lor cu ajutorul unui controler portabil cunoscut sub numele de controler Wii. Folosește accelerometrul pentru a localiza gesturile pentru un joc și pentru a-l trimite la sistem fără fir. Dacă doriți să aflați mai multe despre această tehnologie, puteți consulta brevetul EP1854518B1, acest lucru vă va oferi o idee completă despre modul în care funcționează această tehnologie.
Inspirați de această idee vom face un „mouse aer”, pentru a interacționa cu sistemele doar mutând consola în aer, dar în loc să folosim referințe de coordonate tridimensionale, vom folosi doar referințe de coordonate bidimensionale, astfel încât putem imita acțiunile mouse-ului computerului, deoarece mouse-ul funcționează în două dimensiuni X și Y.
Conceptul din spatele acestui mouse 3D 3D wireless este foarte simplu, vom folosi un accelerometru pentru a obține valoarea accelerației acțiunilor și mișcărilor „mouse-ului aerian” de-a lungul axelor x și y, apoi pe baza valorilor accelerometrul vom controla cursorul mouse-ului și vom efectua anumite acțiuni cu ajutorul driverelor software Python care rulează pe computer.
Condiții prealabile
- Arduino Nano (orice model)
- Modulul accelerometru ADXL335
- Modul Bluetooth HC-05
- Apasa butoanele
- Calculator instalat Python
Pentru a afla mai multe despre instalarea python în computer, urmați tutorialul anterior despre Arduino-Python LED Controlling.
Diagrama circuitului
Pentru a vă controla computerul cu mișcările mâinii, aveți nevoie de un accelerometru care să dea accelerația de-a lungul axelor X și Y și pentru ca întregul sistem să fie fără fir, se utilizează un modul Bluetooth pentru a transfera semnalul wireless la sistemul dvs.
Aici se folosește un accelerometru ADXL335, este un modul cu trei axe bazat pe MEMS care transmite accelerația de-a lungul axelor X, Y și Z, dar așa cum am spus anterior pentru controlul mouse-ului, ar fi nevoie de accelerație doar de-a lungul axelor X și Y. Aflați mai multe despre utilizarea accelerometrului ADXL335 cu Arduino cu proiectele noastre anterioare:
- Sistem de alertă a accidentelor vehiculului bazat pe Arduino, care utilizează GPS, GSM și accelerometru
- Joc de Ping Pong folosind Arduino și Accelerometer
- Robot controlat prin gesturi de mână bazat pe accelerometru folosind Arduino
- Alarmă detector cutremur folosind Arduino
Aici pinul Xout și Yout al accelerometrului sunt conectați la pinii analogici, A0 și A1 ai Arduino și pentru transmiterea semnalelor de la Arduino la sistem Modulul Bluetooth HC-05 este utilizat aici, deoarece Bluetooth funcționează peste Tx și Rx conexiuni pin, deci folosim pinii seriali software D2 și D3. Este conectat utilizând serialul software deoarece, dacă conectăm Bluetooth-ul cu serialul hardware și începem să obținem citirile pe consola python, acesta ar arăta erori pentru rata de baud de nepotrivire, deoarece Bluetooth ar comunica cu python pe propria sa rată de baud. Aflați mai multe despre utilizarea modulului Bluetooth parcurgând diferite proiecte bazate pe Bluetooth folosind diferite microcontrolere, inclusiv Arduino.
Aici am folosit trei butoane - unul pentru declanșarea mouse-ului Air și alte două pentru clic stânga și dreapta așa cum se arată în imaginea de mai jos:
Flux de proces pentru mouse-ul Air
Diagrama de flux arată fluxul procesului Air Mouse bazat pe Arduino:
1. Sistemul verifică continuu dacă declanșatorul mecanic trebuie apăsat până când nu este apăsat, putem lucra normal cu mouse-ul computerului.
2. Când sistemul detectează apăsarea butonului, comanda pentru mouse a fost transferată la mouse-ul cu aer.
3. Când butonul de declanșare este apăsat, sistemul începe să transfere citirile mouse-ului pe computer. Citirea sistemului constă din citirile accelerometrului și citirile pentru clicul stâng și dreapta.
4. Citirile sistemului constau din fluxul de date de 1 octet sau 8 biți, în care primii trei biți constau din coordonatele X, al doilea trei biți constau din coordonatele Y, al doilea ultim bit este bitul de stare pentru obținerea starea clicului stâng al mouse-ului și ultimul bit este bitul de stare pentru obținerea stării clicului dreapta.
5. Valoarea primilor trei biți, adică coordonata X poate varia de la 100 <= Xcord <= 999, în timp ce valoarea pentru coordonata Y poate varia de la 100 <= Ycord <= 800. Valorile pentru clic dreapta și clic stânga sunt valorile binare fie 0, fie 1 în care 1 indică faptul că se face clic și 0 acel clic nu este făcut de utilizator.
6. Pentru a nu permite săriturile butonului să afecteze poziția cursorului, se păstrează o întârziere cunoscută de 4 secunde după fiecare clic al butonului de declanșare al mouse-ului.
7. Pentru clic dreapta și stânga în mouse-ul aerian, trebuie mai întâi să apăsăm butonul stânga sau dreapta și, după aceea, trebuie să apăsăm butonul de declanșare pentru a ne deplasa în poziția mouse-ului aerian unde dorim.
Programarea Arduino pentru Air Mouse
Arduino ar trebui să fie programat pentru a citi valorile de accelerație pe axa X și Y. Programul complet este dat la final, mai jos sunt fragmente importante din cod.
Configurarea variabilelor globale
După cum sa spus anterior, vom conecta modulul Bluetooth cu pinii seriali ai software-ului. Deci, pentru a seta serialul software, trebuie să declarăm biblioteca serialului software și să configurăm pinii pentru Tx și Rx. În Arduino Nano și Uno Pin 2 și 3 pot funcționa ca un software de serie. Apoi, declarăm obiectul Bluetooth din biblioteca serială a software-ului pentru a configura pinul pentru Tx și Rx.
#include
Configurare nulă ()
În funcția de configurare , vom seta variabilele pentru a spune programului dacă vor acționa ca intrare sau ieșire. Butonul de declanșare ar fi configurat ca pull-up de intrare, iar clicurile stânga și dreapta sunt declarate ca input și configurat ca High pentru a le face să acționeze ca pullup-uri de intrare.
De asemenea, setați rata de transmisie pentru comunicațiile seriale și Bluetooth la 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (trigger, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Bucla vid ()
Deoarece ar fi nevoie de butonul de declanșare pentru a spune când trebuie să trimitem fluxul de date sistemului, așa că configurăm întregul cod în interiorul buclei while , care va monitoriza continuu starea digitală a declanșatorului pull-up, pe măsură ce scade, va treceți-o mai departe pentru procesare.
Deoarece am atașat un LED pentru a ne anunța starea sistemului pentru când este apăsat butonul de declanșare, inițial setați ledul la scăzut în afara buclei while , deoarece este starea implicită și la înalt în interiorul buclei while , care va aprinde ledul ori de câte ori este apăsat butonul de declanșare.
Pentru a citi starea butoanelor de clic stânga și dreapta, am declarat la nivel global două variabile lclick și rclick ale căror valori au fost inițial setate la 0.
Și în buclă , setați valoarea acelor variabile în funcție de starea digitală a butonului de clic stânga și dreapta pentru a verifica dacă butoanele sunt sau nu apăsate.
Vom citi valorile pinilor X și Y ai accelerometrului utilizând funcția analogRead și am mapa acele valori la dimensiunea ecranului pentru a face ca indicatorul mouse-ului să se deplaseze pe întregul ecran. Deoarece dimensiunea ecranului este pixelii de pe ecran, trebuie să o setăm în mod corespunzător și, deoarece avem nevoie de valoarea de ieșire pentru a fi de trei cifre, am stabilit în mod deliberat intervalul pentru X ca 100 <= X <= 999 și în mod similar valoare pentru Y ca 100 <= Y <= 800. Amintiți-vă, pixelii sunt citiți din colțul din stânga sus, adică colțul din stânga sus are valoarea (0,0), dar din moment ce am declarat trei cifre pentru x și y valorile noastre ar fi citite din punctul (100,100).
Mai mult, imprimați valoarea coordonatelor și starea clicului pe serial și Bluetooth cu ajutorul funcțiilor Serial.print și bluetooth.print care vă ajută să obțineți valorile pe monitorul serial și pe sistemul dvs. prin Bluetooth.
În cele din urmă, datorită saltului unui buton, se poate repeta o singură valoare care ar determina ca cursorul mouse-ului să rămână peste o singură poziție, așa că pentru a scăpa de aceasta trebuie să adăugăm această întârziere.
bucla void () { digitalWrite (led, LOW); while (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = hartă (xh, 286.429.100.999); ycord = hartă (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); altceva bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); else bluetooth.print (0); întârziere (4000); }}
Script de driver Python
Începând de acum, am terminat cu partea hardware și firmware-ul său, acum, pentru ca mouse-ul să funcționeze, trebuie să avem un script de driver care să poată decoda semnalele de la mouse-ul de aer în mișcările cursorului, așa că pentru aceasta am ales Piton. Python este un limbaj de scripting și prin scripting aici vrem să spunem că ne ajută să obținem controlul celuilalt program, deoarece aici controlăm cursorul mouse-ului.
Deci, deschideți shell-ul Python și instalați următoarele biblioteci instalate folosind comenzile de mai jos:
pip install serial pip install pyautogui
Serial este o bibliotecă pentru piton care ne ajută pentru a obține date de la interfețe seriale, cum ar fi porturile com și, de asemenea, ne permite să - l manipuleze întrucât pyautogui este bibliotecă pentru python pentru a obține controlul asupra caracteristicilor GUI, în acest caz, mouse - ul.
Acum, să trecem la codul pentru drivere, primul lucru pe care trebuie să-l facem este să importăm bibliotecile seriale și pyautogui și apoi din biblioteca serială, trebuie să setăm portul com pentru comunicație cu o rată de transmisie de 9600, la fel ca Bluetooth.serial funcționează la. Pentru aceasta trebuie să conectați modulul Bluetooth la sistemul dvs. și apoi în setările de sistem trebuie să verificați la ce port de comutare este conectat.
Următorul lucru este să citiți comunicarea serială de la Bluetooth la sistem și să o mențineți continuu, păstrați restul de cod într-o buclă continuă cu ajutorul timpului 1.
După cum sa spus anterior, Arduino trimite 8 biți, primii 6 pentru coordonate și ultimii doi pentru starea butoanelor de clic. Deci, citiți toți biții cu ajutorul ser.read și setați lungimea acestuia la 8 biți.
Apoi, împărțiți biții pentru coordonatele și clicurile cursorului tăindu-le, apoi tăiați în continuare biții cursorului în coordonatele X și Y separat. Același lucru este valabil și pentru clicul stâng și dreapta.
Acum, din comunicare, obținem un șir de octeți și trebuie să-l convertim într-un număr întreg, astfel încât să se potrivească coordonatelor, facem acest lucru decodificându-le și apoi introducându-le în numere întregi.
Acum, pentru a muta cursorul, folosim funcția pyautogui moveto , care ia ca argumente acele coordonate întregi și mută cursorul în acea poziție.
Apoi verificați clicurile, facem acest lucru folosind ultimii doi biți și funcția de clic a lui pyautogui, clicul implicit este unul stâng, cu toate acestea îl putem seta în dreapta declarând valoarea butonului în dreapta, putem defini și numărul de clicuri pentru setați-l la un dublu clic setând parametrul clicuri la 2.
Mai jos este codul complet Python care trebuie rulat pe computer:
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 (buton = „dreapta”, clicuri = 2)
Testarea mouse-ului Arduino Air
Deci, pentru operarea mouse-ului Air, atașați-l la o sursă de alimentare. Poate fi de la slotul Arduino Nano USB sau de la sursa de alimentare reglată de 5v folosind 7805 IC. Apoi rulați scriptul driverului python setând portul de comutare la care este conectat Bluetooth. Pe măsură ce scriptul rulează, veți vedea un decalaj de timp în clipirea Bluetooth, înseamnă că este conectat la sistemul dvs. Apoi, pentru operare, faceți clic pe butonul de declanșare și veți vedea că poziția coordonatelor se va schimba și dacă doriți să faceți clic stânga sau dreapta, apoi apăsați mai întâi butonul stânga sau dreapta și butonul de declanșare împreună, veți vedea acțiunea clicului la o locație modificată a cursorului.
Verificați videoclipul detaliat de lucru de mai jos.