- Requisits previs:
- Concepte darrere del projecte:
- Esquema de connexions:
- Programació del vostre Arduino:
- Programació de Python:
- Ordinador controlat per gestos en acció:
Recentment, els ordinadors portàtils o els ordinadors controlats per gestos són cada vegada més famosos. Aquesta tècnica s’anomena moviment de salt que ens permet controlar determinades funcions del nostre ordinador / portàtil simplement agitant la mà davant d’ell. És molt divertit i divertit fer-ho, però aquests portàtils tenen un preu molt alt. Per tant, en aquest projecte, intentem construir el nostre propi ordinador portàtil / ordinador amb control de gestos combinant el poder d’Arduino i Python.
Utilitzarem dos sensors d’ultrasons per determinar la posició de la nostra mà i controlarem un reproductor multimèdia (VLC) en funció de la posició. Ho he fet servir per demostrar, però un cop heu entès el projecte, podeu fer qualsevol cosa només canviant poques línies de codi i controlar la vostra aplicació preferida de la vostra manera preferida.
Requisits previs:
Ja hem cobert pocs projectes que combinen Arduino amb Python. Per tant, suposo que ja heu instal·lat Python i la seva biblioteca en sèrie i heu provat amb èxit alguns projectes bàsics com el LED parpellejant. Si no, no us preocupeu, podeu recórrer a aquest tutorial Arduino-Python Led Controlling i portar-vos bé. Assegureu-vos que heu instal·lat Python i la biblioteca pyserial abans de continuar.
Concepte darrere del projecte:
El concepte darrere del projecte és molt senzill. Col·locarem dos sensors d’ultrasons (EUA) a sobre del nostre monitor i llegirem la distància entre el monitor i la nostra mà mitjançant Arduino, en funció d’aquest valor de distància realitzarem certes accions. Per realitzar accions al nostre ordinador utilitzem la biblioteca Python pyautogui. Les ordres d’Arduino s’envien a l’ordinador mitjançant el port sèrie (USB). A continuació, aquestes dades seran llegides per Python que s’executa a l’ordinador i es realitzarà una acció basada en les dades llegides.
Esquema de connexions:

Per controlar l’ordinador amb gestos manuals, només cal que connecteu els dos sensors d’ultrasons amb Arduino. Sabem que el sensor nord-americà funciona amb 5V i, per tant, són alimentats pel regulador de voltatge integrat d’Arduino. L'Arduino es pot connectar al PC / ordinador portàtil per alimentar el mòdul i també per a la comunicació en sèrie. Un cop fetes les connexions, col·loqueu-les al monitor tal com es mostra a continuació. He utilitzat una cinta lateral doble per enganxar-la al monitor, però podeu utilitzar la vostra pròpia creativitat. Després d’assegurar-lo en un lloc podem procedir a la programació.


Programació del vostre Arduino:
L’Arduino s’ha de programar per llegir la distància de la mà del sensor dels EUA. El programa complet es dóna al final d'aquesta pàgina; just a sota he donat l'explicació del programa. Si no coneixeu el sensor ultrasònic, només cal que passeu per la mesura de distància basada en el sensor ultrasònic i Arduino.
Llegint el valor de la distància podem arribar a certes accions que es poden controlar amb gestos, per exemple en aquest programa he programat 5 accions com a demostració.
Acció 1: Quan les dues mans es col·loquen cap amunt davant del sensor a una distància particular, el vídeo del reproductor VLC s'ha de reproduir / posar en pausa.
Acció 2: quan es col·loca la mà dreta davant del sensor a una distància molt llarga, el vídeo ha de avançar ràpidament un pas.
Acció 3: Quan es col·loca la mà esquerra davant del sensor a una distància molt particular, el vídeo hauria de rebobinar un pas.
Acció 4: Quan es col·loca la mà dreta davant del sensor a una distància propera particular i, si es mou cap al sensor, el vídeo hauria d’avançar ràpidament i, si s’allunya, el vídeo hauria de rebobinar.
Acció 5: Quan es col·loca la mà esquerra davant del sensor a una distància propera particular i, si es mou cap al sensor, el volum de vídeo hauria d'augmentar i, si s'allunya, el volum hauria de disminuir.
Vegem com està escrit el programa per realitzar les accions anteriors. Per tant, com tots els programes, comencem per definir els pins d'E / S com es mostra a continuació. Els dos sensors nord-americans estan connectats als pins digitals 2,3,4 i 5 i s’alimenten amb pin de + 5V. Els pins de disparador són pins de sortida i els pins de ressò són pins d’entrada.
La comunicació en sèrie entre Arduino i Python té lloc a una velocitat en bauds de 9600.
const int trigger1 = 2; // Pin de desencadenament de 1a Sesnor const int echo1 = 3; // Pin de ressò del primer Sesnor const int trigger2 = 4; // Pin de disparador de 2nd Sesnor const int echo2 = 5; // Pin de ressonació de 2nd Sesnor void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Cal calcular la distància entre el sensor i la mà cada vegada abans de concloure sobre qualsevol acció. Per tant, ho hem de fer moltes vegades, cosa que significa que aquest codi s’hauria d’utilitzar com a funció. Hem escrit una funció anomenada calculate_distance () que ens retornarà la distància entre el sensor i la mà.
/ * ### Funció per calcular la distància ### * / void calculate_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (activador, ALT); delayMicroseconds (10); digitalWrite (activador, BAIX); time_taken = pulseIn (eco, HIGH); dist = time_taken * 0,034 / 2; si (dist> 50) dist = 50; }
Dins del nostre principal llaç que xec pel valor de la distància i realitzar les accions esmentades anteriorment. Abans utilitzem dues variables distL i distR que s’actualitzen amb el valor de distància actual.
calcular_distància (activador1, eco1); distL = dist; // obtenir la distància del sensor esquerre calculate_distance (trigger2, echo2); distR = dist; // obtenir la distància del sensor adequat
Com que coneixem la distància entre ambdós sensors, ara podem comparar-la amb valors predefinits i arribar a determinades accions. Per exemple, si les dues mans es col·loquen a una distància de 40 mc, reproduïm / pausem el vídeo. Aquí s'enviarà la paraula "Reprodueix / Pausa" a través del port sèrie
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Detecta les dues mans {Serial.println ("Reprodueix / Pausa"); retard (500);}
Si la mà dreta només es col·loca davant del mòdul, avançem ràpidament el vídeo per un pas i, si es tracta de la mà esquerra, rebobinem per un pas. En funció de l'acció, aquí s'enviarà la paraula "Rebobinar" o "Reenviar" a través del port sèrie
if ((distL> 40 && distL <50) && (distR == 50)) // Detecta la mà esquerra {Serial.println ("Rebobinar"); delay (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Detecta la mà dreta {Serial.println ("Endavant"); retard (500);}
Per controlar amb detall el volum i el seguiment, fem servir una metodologia diferent per evitar falsos desencadenants. Per controlar el volum hem de col·locar la mà esquerra aprox. A una distància de 15 cm, podeu desplaçar-lo cap al sensor per disminuir el volum de l'allunyament del sensor per augmentar el volum. A continuació es mostra el codi del mateix. En funció de l'acció, aquí s'enviarà la paraula "Vup" o "Vdown" a través del port sèrie
// Bloqueja a l’esquerra: mode de control si (distL> = 13 && distL <= 17) {delay (100); // Temps de manteniment de la mà calculate_distance (trigger1, echo1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Esquerre bloquejat"); while (distL <= 40) {calculate_distance (trigger1, echo1); distL = dist; if (distL <10) // Empressió manual a {Serial.println ("Vup"); delay (300);} if (distL> 20) // Traït a mà {Serial.println ("Vdown"); retard (300);}}}}
També podem utilitzar el mateix mètode per al sensor lateral dret per controlar la pista del vídeo. És a dir, si movem la mà dreta cap al sensor, avançarà ràpidament la pel·lícula i, si l’allunyeu del sensor, rebobinarà la pel·lícula. En funció de l'acció, aquí s'enviarà la paraula "Rebobinar" o "Reenviar" a través del port sèrie
Ara podeu llegir el codi complet d’aquest PC controlat per gestos que es dóna al final de la pàgina i provar de subestimar-lo en conjunt i, a continuació, copiar-lo al vostre IDE Arduino.
Programació de Python:
El programa Python per a aquest projecte és molt senzill. Només hem d’establir una comunicació en sèrie amb Arduino mitjançant la velocitat de transmissió correcta i després realitzar algunes accions bàsiques amb el teclat. El primer pas amb python seria instal·lar el mòdul p yautogui . Assegureu-vos de seguir aquest pas perquè el programa no funcionarà sense el mòdul pyautogui.
Instal·lació del mòdul pyautogui per a Windows:
Seguiu els passos següents per instal·lar pyautogui per a Windows. Si feu servir altres plataformes, els passos també seran més o menys similars. Assegureu-vos que el vostre ordinador / portàtil estigui connectat a Internet i continueu amb els passos següents
Pas 1: obriu l'indicador d'ordres de Windows i canvieu el directori a la carpeta on heu instal·lat python. Per defecte, l'ordre hauria de ser
cd C: \ Python27
Pas 2: dins del directori python, utilitzeu l'ordre python –m pip install –upgrade pip per actualitzar el vostre pip. Pip és una eina en Python que ens ajuda a instal·lar mòduls Python fàcilment. Un cop actualitzat aquest mòdul (tal com es mostra a la imatge següent), continueu amb el pas següent.
python –instal·lar pip pip –actualitzar pip
Pas 3: feu servir l'ordre " python –m pip install pyautogui " per instal·lar el mòdul pyautogui. Quan el procés tingui èxit, hauríeu de veure una pantalla similar a la següent.
python –instal·lar pip pip –actualitzar pip

Ara que el mòdul pyautogui i el mòdul pyserial (instal·lats al tutorial anterior) s’han instal·lat correctament amb el python, podem continuar amb el programa python. El codi complet de Python es dóna al final del tutorial, però l'explicació del mateix és la següent.
Importem els tres mòduls necessaris per a aquest projecte. Són pyautogui, pitó de sèrie i temps.
importació de sèrie #Serial importada per a la comunicació de sèrie Temps d'importació # Necessari per utilitzar funcions de retard d'importació de pyautogui
A continuació, establim la connexió amb l'Arduino a través del port COM. Al meu ordinador, Arduino està connectat a COM 18. Utilitzeu el gestor de dispositius per trobar a quin port COM està connectat el vostre Arduino i corregiu la línia següent en conseqüència.
ArduinoSerial = serial.Serial ('com18', 9600) #Create Serial port object anomenat arduinoSerialData time.sleep (2) #esperar 2 segons perquè s'estableixi la comunicació
Dins del bucle infinit mentre escoltem repetidament el port COM i comparem les paraules clau amb qualsevol obra predefinida i fem que el teclat premi en conseqüència.
mentre que 1: incoming = str (ArduinoSerial.readline ()) #llegeix les dades de sèrie i imprimeix-les com a línia imprimeix entrants si "Reprodueix / Pausa" a l'entrada: pyautogui.typewrite (, 0.2) si "Rebobina" a l'entrada: pyautogui tecla ràpida ('ctrl', 'esquerra') si 'Reenvia' a l'entrada: pyautogui.hotkey ('ctrl', 'dreta') si 'Vup' a l'entrada: pyautogui.hotkey ('ctrl', 'avall') si ' Vdown 'a l'entrada: pyautogui.hotkey (' ctrl ',' up ')
Com podeu veure, per prémer una tecla, simplement hem d’utilitzar l’ordre “pyautogui.typewrite (, 0.2)” que premrà l’espai de la tecla durant 0.2 segons. Si necessiteu tecles d'accés directe com ctrl + S, podeu utilitzar l'ordre de tecla d'accés directe "pyautogui.hotkey ('ctrl', 's')".
He utilitzat aquestes combinacions perquè funcionen al reproductor multimèdia VLC, podeu modificar-les de la forma que vulgueu per crear les vostres pròpies aplicacions per controlar qualsevol cosa de l'ordinador amb gestos.
Ordinador controlat per gestos en acció:
Feu les connexions tal com es defineix més amunt i pengeu el codi Arduino a la vostra placa Arduino. A continuació, utilitzeu l'script python següent i inicieu el programa al vostre ordinador portàtil / ordinador.
Ara podeu reproduir qualsevol pel·lícula a l'ordinador mitjançant el reproductor multimèdia VLC i utilitzar la mà per controlar la pel·lícula tal com es mostra al vídeo que es mostra a continuació.

Espero que hagueu entès el projecte i us hagi agradat jugar amb ell. Aquesta és només una demostració i podeu fer servir la vostra creativitat per crear coses molt més controlades per gestos. Feu-me saber si us ha estat útil i què crearà amb això a la secció de comentaris i estaré encantat de saber-ho.
