- Cerințe prealabile:
- Conceptul din spatele proiectului:
- Diagrama circuitului:
- Programarea Arduino:
- Programarea Python-ului:
- Computer controlat prin gesturi în acțiune:
Recent , laptopurile sau computerele controlate prin gesturi devin foarte faimoase. Această tehnică se numește mișcare salt, care ne permite să controlăm anumite funcții de pe computerul / laptopul nostru, fluturând pur și simplu mâna în fața sa. Este foarte mișto și distractiv să o faci, dar aceste laptopuri au un preț foarte mare. Așadar, în acest proiect, să încercăm să ne construim propriul Laptop / Computer de control al gesturilor prin combinarea Puterii Arduino și Python.
Vom folosi doi senzori cu ultrasunete pentru a determina poziția mâinii noastre și pentru a controla un player media (VLC) pe baza poziției. Am folosit acest lucru pentru demonstrație, dar după ce ați înțeles proiectul, puteți face orice schimbând doar câteva linii de cod și controlând aplicația preferată în modul preferat.
Cerințe prealabile:
Am acoperit deja câteva proiecte care combină Arduino cu Python. Deci, presupun că ați instalat deja Python și biblioteca sa serială și ați încercat cu succes câteva proiecte de bază, cum ar fi LED-ul intermitent. Dacă nu, nu vă faceți griji că vă puteți întoarce la acest tutorial Arduino-Python Led Controlling și să vă înțelegeți cu el. Deci, asigurați-vă că ați instalat Python și biblioteca pyserial înainte de a continua.
Conceptul din spatele proiectului:
Conceptul din spatele proiectului este foarte simplu. Vom plasa doi senzori cu ultrasunete (SUA) deasupra monitorului și vom citi distanța dintre monitor și mâna noastră folosind Arduino, pe baza acestei valori a distanței vom efectua anumite acțiuni. Pentru a efectua acțiuni pe computerul nostru, folosim biblioteca Python pyautogui. Comenzile de la Arduino sunt trimise la computer prin portul serial (USB). Aceste date vor fi apoi citite de python care rulează pe computer și pe baza datelor citite se va efectua o acțiune.
Diagrama circuitului:
Pentru a controla computerul cu gesturi de mână, trebuie doar să conectați cei doi senzori cu ultrasunete cu Arduino. Știm că senzorii americani funcționează cu 5V și, prin urmare, sunt alimentați de regulatorul de tensiune de la Arduino. Arduino poate fi conectat la computer / laptop pentru alimentarea modulului și, de asemenea, pentru comunicații seriale. Odată ce conexiunile sunt terminate, plasați-le pe monitor, așa cum se arată mai jos. Am folosit o bandă dublă laterală pentru a o lipi pe monitor, dar vă puteți folosi propria creativitate. După fixarea acestuia într-un loc putem continua cu Programarea.
Programarea Arduino:
Arduino ar trebui să fie programat pentru a citi distanța mâinii de la senzorul SUA. Programul complet este dat la sfârșitul acestei pagini; chiar mai jos am dat explicația pentru program. Dacă sunteți nou în senzorul cu ultrasunete, treceți doar prin măsurarea distanței bazate pe senzorul Arduino și ultrasonic.
Citind valoarea distanței putem ajunge la anumite acțiuni care trebuie controlate cu gesturi, de exemplu în acest program am programat 5 acțiuni ca o demonstrație.
Acțiunea 1: Când ambele mâini sunt așezate înaintea senzorului la o anumită distanță, atunci videoclipul din playerul VLC ar trebui să fie redat / întrerupt.
Acțiunea 2: Când mâna dreaptă este așezată înaintea senzorului la o anumită distanță, videoclipul ar trebui să avanseze rapid cu un pas.
Acțiunea 3: Când mâna stângă este plasată înaintea senzorului la o anumită distanță, videoclipul ar trebui să deruleze un pas înapoi.
Acțiunea 4: Când mâna dreaptă este așezată înaintea senzorului la o anumită distanță apropiată și apoi, dacă este deplasată spre senzor, videoclipul trebuie să avanseze rapid și, dacă este îndepărtat, videoclipul ar trebui să deruleze înapoi.
Acțiunea 5: Când mâna stângă este așezată înaintea senzorului la o anumită distanță apropiată și apoi, dacă este deplasată către senzor, volumul videoclipului ar trebui să crească și, dacă este îndepărtat, volumul ar trebui să scadă.
Să vedem cum este scris programul pentru a efectua acțiunile de mai sus. Deci, ca toate programele, începem cu definirea pinilor I / O așa cum se arată mai jos. Cei doi senzori americani sunt conectați la pinii digitali 2,3,4 și 5 și sunt alimentați cu pin + 5V. Pinii de declanșare sunt pinii de ieșire și pinii Echo sunt pinii de intrare.
Comunicarea în serie între Arduino și python are loc la o rată de baud de 9600.
const int trigger1 = 2; // Trigger pin of 1st Sesnor const int echo1 = 3; // Echo pin of 1st Sesnor const int trigger2 = 4; // Trigger pin of 2nd Sesnor const int echo2 = 5; // Echo pin of 2nd Sesnor void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Trebuie să calculăm de fiecare dată distanța dintre senzor și mână înainte de a încheia orice acțiune. Deci trebuie să o facem de multe ori, ceea ce înseamnă că acest cod ar trebui să fie folosit ca o funcție. Am scris o funcție numită calculate_distance () care ne va întoarce distanța dintre senzor și mână.
/ * ### Funcția de calcul a distanței ### * / void calculate_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (trigger, HIGH); delayMicroseconds (10); digitalWrite (declanșator, LOW); time_taken = pulseIn (ecou, HIGH); dist = time_taken * 0,034 / 2; dacă (dist> 50) dist = 50; }
În interiorul nostru principal bucla vom verifica valoarea distanței și de a efectua acțiunile menționate mai sus. Înainte de aceasta, folosim două variabile distL și distR care se actualizează cu valoarea curentă a distanței.
calculate_distance (trigger1, echo1); distL = dist; // obțineți distanța senzorului din stânga calculate_distance (trigger2, echo2); distR = dist; // obțineți distanța senzorului potrivit
Deoarece cunoaștem distanța dintre ambii senzori, acum o putem compara cu valori predefinite și putem ajunge la anumite acțiuni. De exemplu, dacă ambele mâini sunt plasate la o distanță de 40 mc, atunci redăm / întrerupem videoclipul. Aici cuvântul „Redare / Pauză” va fi trimis prin portul serial
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Detectează ambele mâini {Serial.println ("Play / Pause"); întârziere (500);}
Dacă mâna dreaptă este plasată singură în fața modulului, vom avansa rapid videoclipul cu un singur pas și dacă este mâna stângă derulăm cu un singur pas. Pe baza acțiunii, aici cuvântul „Rewind” sau „Forward” va fi trimis prin portul serial
if ((distL> 40 && distL <50) && (distR == 50)) // Detectează mâna stângă {Serial.println ("Rewind"); delay (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Detectează mâna dreaptă {Serial.println ("Înainte"); întârziere (500);}
Pentru a controla detaliat volumul și urmărirea, folosim o metodologie diferită pentru a preveni declanșatoarele false. Pentru a controla volumul trebuie să plasăm mâna stângă aprox. La o distanță de 15 cm, atunci îl puteți muta spre senzor pentru a micșora volumul, îndepărtați-l de senzor pentru a crește volumul. Codul pentru același lucru este prezentat mai jos. Pe baza acțiunii, aici cuvântul „Vup” sau „Vdown” va fi trimis prin portul serial
// Blocare stânga - Mod control dacă (distL> = 13 && distL <= 17) {întârziere (100); // Hand Hold Time calculate_distance (trigger1, echo1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Stânga blocat"); while (distL <= 40) {calculate_distance (trigger1, echo1); distL = dist; if (distL <10) // Mână împinsă în {Serial.println ("Vup"); delay (300);} if (distL> 20) // Mână scoasă {Serial.println ("Vdown"); întârziere (300);}}}}
Putem utiliza aceeași metodă și pentru senzorul din dreapta, pentru a controla pista videoclipului. Asta dacă mutăm mâna dreaptă spre senzor, va înainta rapid filmul și dacă îl îndepărtați de senzor, acesta va derula înapoi filmul. Pe baza acțiunii, aici cuvântul „Rewind” sau „Forward” va fi trimis prin portul serial
Acum puteți citi peste codul complet pentru acest computer controlat prin gesturi dat la sfârșitul paginii și încercați să-l subestimați în întregime și apoi să-l copiați în IDE-ul dvs. Arduino.
Programarea Python-ului:
Programul Python pentru acest proiect este foarte simplu. Trebuie doar să stabilim o comunicare în serie cu Arduino prin rata de transmisie corectă și apoi să efectuăm câteva acțiuni de bază de la tastatură. Primul pas cu python ar fi instalarea modulului p yautogui . Asigurați-vă că urmați acest pas, deoarece programul nu va funcționa fără modul pyautogui.
Instalarea modulului pyautogui pentru Windows:
Urmați pașii de mai jos pentru a instala pyautogui pentru Windows. Dacă utilizați alte platforme, pașii vor fi, de asemenea, mai mult sau mai puțin similari. Asigurați-vă că computerul / laptopul dvs. este conectat la internet și continuați cu pașii de mai jos
Pasul 1: Deschideți promptul de comandă Windows și schimbați directorul în folderul în care ați instalat python. În mod implicit, comanda ar trebui să fie
cd C: \ Python27
Pasul 2: În interiorul directorului dvs. python utilizați comanda python –m pip install –upgrade pip pentru a vă actualiza pip. Pip este un instrument în Python care ne ajută să instalăm cu ușurință modulele Python. Odată ce acest modul este actualizat (așa cum se arată în imaginea de mai jos), continuați cu pasul următor.
python –p pip install –upgrade pip
Pasul 3: Utilizați comanda „ python –m pip install pyautogui ” pentru a instala modulul pyautogui. Odată ce procesul are succes, ar trebui să vedeți un ecran similar cu cel de mai jos.
python –p pip install –upgrade pip
Acum că modulul pyautogui și modulul pyserial (instalat în tutorialul anterior) au fost instalate cu succes cu python, putem continua cu programul python. Codul complet Python este dat la sfârșitul tutorialului, dar explicația pentru acesta este următoarea.
Să importăm toate cele trei module necesare pentru acest proiect. Sunt pyautogui, piton serial și timp.
import serial #Serial importat pentru comunicare serial timp de import # Necesar pentru a utiliza funcțiile de întârziere import pyautogui
Apoi stabilim conexiunea cu Arduino prin portul COM. În computerul meu, Arduino este conectat la COM 18. Folosiți managerul de dispozitive pentru a găsi la ce port COM este conectat Arduino și corectați următoarea linie în consecință.
ArduinoSerial = serial.Serial ("com18", 9600) #Create Serial port object called arduinoSerialData time.sleep (2) # așteptați 2 secunde pentru ca comunicarea să se stabilească
În interiorul buclei infinite while , ascultăm în mod repetat portul COM și comparăm cuvintele cheie cu orice lucrări pre-sfidate și facem apăsarea tastaturii corespunzătoare.
în timp ce 1: incoming = str (ArduinoSerial.readline ()) #citește datele seriale și tipărește-le ca linie tipărește intrare dacă 'Play / Pause' în intrare: pyautogui.typewrite (, 0.2) dacă 'Rewind' în intrare: pyautogui. tastă rapidă ('ctrl', 'stânga') dacă 'Redirecționează' în intrare: pyautogui.hotkey ('ctrl', 'dreapta') dacă 'Vup' în intrare: pyautogui.hotkey ('ctrl', 'jos') dacă ' Vdown 'în intrare: pyautogui.hotkey (' ctrl ',' sus ')
După cum puteți vedea, pentru a apăsa o tastă trebuie pur și simplu să folosim comanda „pyautogui.typewrite (, 0.2)” care va apăsa spațiul tastelor timp de 0.2 sec . Dacă aveți nevoie de taste rapide, cum ar fi ctrl + S, puteți utiliza comanda de tastă rapidă „pyautogui.hotkey ('ctrl', 's')”.
Am folosit aceste combinații, deoarece funcționează pe VLC media player, le puteți modifica în orice mod doriți să creați propriile aplicații pentru a controla orice lucru din computer cu gesturi.
Computer controlat prin gesturi în acțiune:
Realizați conexiunile definite mai sus și încărcați codul Arduino pe placa dvs. Arduino. Apoi utilizați scriptul python de mai jos și lansați programul pe laptop / computer.
Acum puteți reda orice film de pe computer folosind VLC media player și puteți folosi mâna pentru a controla filmul așa cum se arată în videoclipul de mai jos.
Sper că ați înțeles proiectul și v-a plăcut să vă jucați cu el. Acesta este doar un demo și vă puteți folosi creativitatea pentru a construi mai multe chestii controlate de gesturi mai interesante în jurul acestui aspect. Spuneți-mi dacă acest lucru a fost util și ce veți crea folosind acest lucru în secțiunea de comentarii și voi fi bucuros să îl știu.