- Requisits previs
- Esquema de connexions
- Flux de procés per al ratolí Air
- Programació de l'Arduino per Air Mouse
- Script de controlador Python
- Prova del ratolí Arduino Air
Mai us heu preguntat com s’està avançant el nostre món cap a la realitat immersiva. Estem contínuament trobant noves formes i mètodes per interactuar amb el nostre entorn mitjançant la realitat virtual, la realitat mixta, la realitat augmentada, etc. Cada dia surten nous dispositius amb aquestes tecnologies de ritme ràpid per impressionar-nos per les seves noves tecnologies interactives.
Aquestes tecnologies immersives s’utilitzen en jocs, activitats interactives, entreteniment i moltes altres aplicacions. En aquest tutorial, coneixerem aquest mètode interactiu que us ofereix una nova manera d’interactuar amb el vostre sistema en lloc d’utilitzar un ratolí avorrit. Els nostres geeks de jocs han de saber que fa uns anys que Nintendo una empresa de videojocs ven la idea d’un mètode interactiu en 3D per interactuar amb les seves consoles amb l’ajuda d’un controlador de mà conegut com a controlador Wii. Utilitza l’ acceleròmetre per localitzar els vostres gestos per a un joc i enviar-lo al sistema sense fils. Si voleu saber més sobre aquesta tecnologia, podeu consultar la seva patent EP1854518B1, això us donarà una idea completa del funcionament d'aquesta tecnologia.

Inspirats en aquesta idea, farem un "ratolí d'aire", per interactuar amb els sistemes només movent la consola a l'aire, però en lloc d'utilitzar referències de coordenades tridimensionals, només utilitzarem referències de coordenades bidimensionals. podem imitar les accions del ratolí de l’ordinador ja que el ratolí funciona en dues dimensions X i Y.
El concepte que hi ha darrere d’aquest ratolí d’aire sense fil 3D és molt senzill, utilitzarem un acceleròmetre per obtenir el valor de l’acceleració de les accions i moviments del “ratolí d’aire” al llarg de l’eix x i y, i després basat en els valors de a l’acceleròmetre controlarem el cursor del ratolí i realitzarem algunes accions amb l’ajuda dels controladors de programari python que s’executen a l’ordinador.
Requisits previs
- Arduino Nano (qualsevol model)
- Mòdul acceleròmetre ADXL335
- Mòdul Bluetooth HC-05
- Polsadors
- Ordinador instal·lat per Python
Per obtenir més informació sobre com instal·lar Python a l'ordinador, seguiu el tutorial anterior sobre el control LED Arduino-Python.
Esquema de connexions


Per controlar l’ordinador amb els moviments de la mà, necessiteu un acceleròmetre que doni l’acceleració al llarg dels eixos X i Y i per fer que el sistema siga inalàmbric, s’utilitza un mòdul Bluetooth per transferir el senyal sense fils al vostre sistema.
Aquí s’utilitza un acceleròmetre ADXL335, és un mòdul de triple eix basat en MEMS que genera l’acceleració al llarg dels eixos X, Y i Z, però, com s’ha dit anteriorment per controlar el ratolí, només necessitaríem l’acceleració al llarg dels eixos X i Y. Obteniu més informació sobre l’ús de l’ acceleròmetre ADXL335 amb Arduino amb els nostres projectes anteriors:
- Sistema d’alerta d’accidents de vehicles basat en Arduino mitjançant GPS, GSM i acceleròmetre
- Joc de Ping Pong amb Arduino i Accelerometer
- Robot controlat per gest manual basat en acceleròmetre mitjançant Arduino
- Alarma del detector de terratrèmols mitjançant Arduino
Aquí el pin Xout i Yout de l’ acceleròmetre estan connectats als pins Analog, A0 i A1 d’Arduino i per transmetre els senyals de l’Arduino al sistema s’utilitza el mòdul Bluetooth HC-05, ja que el Bluetooth funciona a través de Tx i Rx connexions de pins, de manera que fem servir els pins de sèrie D2 i D3 del programari. Es connecta mitjançant el programari de sèrie, perquè si connectem el Bluetooth amb el maquinari de sèrie i comencem a obtenir les lectures a la consola de Python, es mostraran errors per a la velocitat de transmissió no coincident, ja que el Bluetooth es comunicaria amb el Python per la seva pròpia velocitat de transmissió. Obteniu més informació sobre l’ús del mòdul Bluetooth passant per diversos projectes basats en Bluetooth mitjançant diferents microcontroladors, inclòs Arduino.
Aquí hem utilitzat tres botons polsadors: un per activar el ratolí Air i altres dos per fer clic esquerre i dret com es mostra a la imatge següent:

Flux de procés per al ratolí Air
El diagrama de flux mostra el flux de procés del ratolí basat en Arduino:

1. El sistema comprova contínuament si es prem el disparador mecànic fins que no es prem, podem treballar amb normalitat amb el ratolí de l'ordinador.
2. Quan el sistema detecta prémer el botó, el control del ratolí es transfereix al ratolí d'aire.
3. Quan es prem el botó d'activació, el sistema comença a transferir les lectures del ratolí a l'ordinador. La lectura del sistema consisteix en les lectures de l’acceleròmetre i les lectures del clic esquerre i del dret.
4. Les lectures del sistema consisteixen en un flux de dades d'1 byte o 8 bits, en què els primers tres bits consisteixen en coordenades X, el segon tres bits consisteix en coordenades Y, el segon últim bit és el bit d'estat per obtenir l'estat del clic esquerre del ratolí i l'últim bit és el bit d'estat per obtenir l'estat del clic dret.
5. El valor dels tres primers bits, és a dir, coordenada X pot oscil·lar entre 100 <= Xcord <= 999, mentre que el valor de la coordenada Y pot variar entre 100 <= Ycord <= 800. Els valors del clic dret i del clic esquerre són els valors binaris 0 o 1 en què 1 indica que s'ha fet el clic i 0 que l'usuari no ha fet aquest clic.
6. Per no deixar que el botó del botó afecti la posició del cursor, es manté un retard conegut de 4 segons després de cada clic del botó d'activació del ratolí.
7. Per fer clic amb el botó dret i esquerre del ratolí, primer hem de prémer el botó esquerre o dret i, després d'això, hem de prémer el botó d'activació per desplaçar-nos a la posició del ratolí d'aire on vulguem.
Programació de l'Arduino per Air Mouse
L’Arduino s’ha de programar per llegir els valors d’acceleració en els eixos X i Y. El programa complet es dóna al final, a continuació es mostren els fragments importants del codi.
Configuració de les variables globals
Com s'ha dit anteriorment, connectarem el mòdul Bluetooth amb els pins de sèrie del programari. Per tant, per configurar la sèrie de programari, hem de declarar la biblioteca de sèrie de programari i configurar els pins per Tx i Rx. A Arduino Nano i Uno el Pin 2 i 3 poden funcionar com a programari de sèrie. A continuació, declarem l'objecte Bluetooth de la biblioteca en sèrie del programari per configurar el pin per a Tx i Rx.
#incloure
Configuració buida ()
A la funció de configuració , establirem les variables per dir al programa si actuaran com a entrada o sortida. El botó d’activació s’establiria com a extracció d’entrada i els clics esquerre i dret es declararan com a entrada i es configuraran com a Alt per fer-los actuar com a desplegables d’entrada.
També definiu la velocitat de transmissió per a la comunicació sèrie i Bluetooth a 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); }
Bucle buit ()
A mesura que necessitaríem botó de tret de dir quan hem d'enviar el sistema de flux de dades, de manera que hem creat tot el codi dins el temps de bucle que supervisarà contínuament l'estat digital de l'gallet de pull-up, ja que passa a nivell baix que ho farà passeu-lo més enllà per al processament.
Com hem adjuntat un LED per fer-nos saber l'estat de el sistema per quan es prem el botó de tret, que inicialment establert el dut a baixa fora de l' temps de bucle ja que és condició predeterminada i alta dins de l' temps de bucle que es il·luminarà el LED sempre que es prem el botó de disparador.
Per llegir l'estat dels botons de clic esquerre i dret hem declarat globalment dues variables lclick i rclick els valors dels quals inicialment estaven configurats a 0.
I al bucle , establiu el valor d'aquestes variables segons l'estat digital del botó de clic esquerre i dret per comprovar si es premen o no els botons.
Llegiríem els valors dels pins X i Y de l’acceleròmetre mitjançant la funció analogRead i assignaríem aquests valors a la mida de la pantalla per aconseguir que el punter del ratolí es mogués per tota la pantalla. Com que la mida de la pantalla són els píxels de la pantalla, hem de configurar-la en conseqüència i, com que el valor de sortida és de tres dígits, hem establert deliberadament l’interval de la X com a 100 <= X <= 999 i de manera similar valor de la Y com a 100 <= Y <= 800. Recordeu que els píxels es llegeixen des de la cantonada superior esquerra, és a dir, que la cantonada superior esquerra té el valor (0,0), però, ja que hem declarat tres dígits per a les x i, els nostres valors es llegirien des del punt (100.100).
A més, imprimiu el valor de les coordenades i l'estat del clic sobre la sèrie i Bluetooth amb l'ajut de les funcions Serial.print i bluetooth.print que us ajuden a obtenir els valors al monitor sèrie i al vostre sistema mitjançant Bluetooth.
Finalment, a causa del botó d'un botó, es pot repetir un valor únic que faria que el cursor del ratolí es quedés sobre una sola posició, de manera que per desfer-nos d'això hem d'afegir aquest retard.
bucle buit () { digitalWrite (led, BAIX); while (digitalRead (trigger) == BAIX) { 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 == BAIX) Serial.print (1); else Serial.print (0); if (rstate == BAIX) Serial.print (1); else Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == BAIX) bluetooth.print (1); en cas contrari bluetooth.print (0); if (rstate == BAIX) bluetooth.print (1); else bluetooth.print (0); retard (4000); }}
Script de controlador Python
A partir d’ara, hem completat amb el maquinari i la seva part de firmware, ara per fer funcionar el ratolí d’aire necessitem tenir un script de control que pugui descodificar els senyals del ratolí d’aire en els moviments del cursor, de manera que hem escollit Python. Python és un llenguatge de seqüència d’ordres i, per aquí, volem dir que ens ajuda a controlar l’altre programa, ja que aquí controlem el cursor del ratolí.
Obriu el vostre intèrpret d’ordres de Python i instal·leu les biblioteques següents mitjançant les ordres següents:
pip install serial pip install pyautogui
El serial és una biblioteca per a Python que ens ajuda a obtenir les dades d’interfícies en sèrie com ara ports com i també ens permet manipular-les mentre que pyautogui és una biblioteca per a Python per obtenir control sobre les funcions de la GUI, en aquest cas, el ratolí.
Ara anem al codi dels controladors, el primer que hem de fer és importar les biblioteques sèrie i pyautogui i, des de la biblioteca sèrie, hem d’establir el port de com per a la comunicació amb una velocitat de transmissió de 9600, igual que Bluetooth.serial funciona a. Per a això, heu de connectar el mòdul Bluetooth al vostre sistema i, a continuació, a la configuració del sistema heu de comprovar a quin port de connexió està connectat.
El següent és llegir la comunicació en sèrie des del Bluetooth al sistema i mantenir-la en funcionament, mantenir la resta de codi en un bucle continu amb l'ajuda del moment 1.
Com s'ha dit anteriorment, Arduino envia 8 bits, els primers 6 per a les coordenades i els dos últims per a l'estat dels botons de clic. Per tant, llegiu tots els bits amb l’ajuda de ser.read i configureu la seva longitud a 8 bits.
A continuació, dividiu els bits de les coordenades i els clics del cursor dividint-los i, a continuació, talleu els bits del cursor en coordenades X i Y per separat. El mateix passa amb el clic esquerre i dret.
Ara, des de la comunicació, obtenim una cadena de bytes i hem de convertir-la en un enter per tal que encaixin a les coordenades, ho fem descodificant-les i, tot seguit, tipificant-les en enters.
Ara, per moure el cursor, fem servir la funció pyautogui moveto , que pren com a arguments aquestes coordenades senceres i mou el cursor a aquesta posició.
A continuació, comproveu els clics, ho fem utilitzant els dos darrers bits i la funció de clic de pyautogui, el seu clic per defecte és esquerre, però podem establir-lo a la dreta declarant el valor del botó a la dreta, també podem definir el nombre de clics a configureu-lo amb un doble clic configurant el paràmetre de clics a 2.
A continuació es mostra el codi complet de Python que s’executarà a l’ordinador:
importació d'importació en sèrie pyautogui ser = serial.Serial ('com3', 9600) mentre que 1: k = ser.read (8) cursor = k clic = k x = cursor y = cursor l = clic r = clic 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 (button = 'right', clicks = 2)
Prova del ratolí Arduino Air
Així doncs, per fer funcionar el ratolí Air, poseu-hi una font d’energia. Pot ser des de la ranura USB Arduino Nano o des de la font d'alimentació regulada de 5v mitjançant 7805 IC. A continuació, executeu l'script del controlador de Python configurant el port de com a què està connectat el vostre Bluetooth. A mesura que s'executa l'script, veureu un retard de temps en parpellejar el Bluetooth, vol dir que està connectat al vostre sistema. A continuació, per fer-lo clic, feu clic al botó d'activació i veureu que canviaria la posició de les coordenades i, si voleu fer clic esquerre o dret, premeu primer el botó esquerre i dret i el botó d'activació junts, veureu l'acció del clic a una ubicació canviat del cursor.

Consulteu el vídeo de treball detallat a continuació.
