- Preduvjeti:
- Koncept koji stoji iza projekta:
- Kružni dijagram:
- Programiranje vašeg Arduina:
- Programiranje vašeg Pythona:
- Računalo kontrolirano gestama u akciji:
U posljednje vrijeme prijenosnici ili računala kontrolirani gestama postaju vrlo poznati. Ova se tehnika naziva Leap motion (Leap kretanje) koja nam omogućuje upravljanje određenim funkcijama na našem računalu / prijenosnom računalu jednostavnim mahanjem ruke ispred nje. Vrlo je cool i zabavno to raditi, ali cijena ovih prijenosnih računala je jako visoka. Dakle, u ovom projektu pokušajmo izgraditi vlastiti prijenosnik / računalo za kontrolu gesta kombinirajući snagu Arduina i Pythona.
Upotrijebit ćemo dva ultrazvučna senzora za određivanje položaja ruke i upravljanje multimedijskim uređajem (VLC) na temelju položaja. Koristio sam ovo za demonstraciju, ali nakon što shvatite projekt, možete učiniti sve tako da promijenite nekoliko redaka koda i kontrolirate svoju omiljenu aplikaciju na svoj omiljeni način.
Preduvjeti:
Već smo obradili nekoliko projekata koji kombiniraju Arduino i Python. Stoga pretpostavljam da ste već instalirali Python i njegovu serijsku biblioteku te da ste uspješno isprobali nekoliko osnovnih projekata poput treptanja LED-a. Ako ne, ne brinite se možete vratiti ovom vodiču za Arduino-Python Led Controlling i složiti se s njim. Stoga prije nastavka provjerite jeste li instalirali Python i pyserial knjižnicu.
Koncept koji stoji iza projekta:
Koncept koji stoji iza projekta vrlo je jednostavan. Postavit ćemo dva ultrazvučna (američka) senzora na vrh monitora i očitat ćemo udaljenost između monitora i ruke koristeći Arduino, na temelju ove vrijednosti udaljenosti izvršit ćemo određene radnje. Za izvođenje radnji na našem računalu koristimo Python pyautogui knjižnicu. Naredbe iz Arduina šalju se računalu putem serijskog priključka (USB). Te će podatke tada čitati python koji je pokrenut na računalu i na temelju pročitanih podataka izvršit će se radnja.
Kružni dijagram:

Za upravljanje računalom pokretima rukama, samo spojite dva ultrazvučna senzora s Arduinom. Znamo da američki senzori rade s 5V i stoga ih napaja ugrađeni regulator napona Arduino. Arduino se može povezati s računalom / prijenosnim računalom za napajanje modula, kao i za serijsku komunikaciju. Kad su veze gotove, postavite ih na monitor, kao što je prikazano u nastavku. Koristio sam dvostruku bočnu traku kako bih je zalijepio na monitor, ali možete se poslužiti vlastitom kreativnošću. Nakon što ga osiguramo na mjestu, možemo nastaviti s programiranjem.


Programiranje vašeg Arduina:
Arduino bi trebao biti programiran da očitava udaljenost ruke od američkog senzora. Kompletan program se daje na kraju ove stranice; odmah ispod dao sam objašnjenje za program. Ako ste novi u ultrazvučnom senzoru, samo prođite kroz Arduino i ultrazvučni senzor na temelju mjerenja udaljenosti.
Očitavanjem vrijednosti udaljenosti možemo doći do određenih radnji kojima ćemo upravljati gestama, na primjer u ovom programu programirao sam 5 radnji kao demonstraciju.
Akcija 1: Kada su obje ruke postavljene prije senzora na određenoj udaljenosti, videozapis u VLC playeru trebao bi se reproducirati / zaustaviti.
2. radnja: Kada se desna ruka postavi ispred senzora na određenoj udaljenosti, videozapis treba premotati jedan korak unaprijed.
3. akcija: Kada se lijeva ruka postavi gore ispred senzora na određenoj udaljenosti, videozapis bi se trebao premotati jedan korak.
4. radnja: Kada se desna ruka postavi ispred senzora na određenoj bliskoj udaljenosti, a zatim ako se pomakne prema senzoru, videozapis treba premotati prema naprijed, a ako se odmakne, video se mora premotati unatrag.
Djelovanje 5: Kada se lijeva ruka postavi ispred senzora na određenoj bliskoj udaljenosti, a zatim ako se premjesti prema senzoru, glasnoća videozapisa treba se povećati, a ako se odmakne, glasnoća se mora smanjiti.
Pogledajmo kako je program napisan za izvođenje gore navedenih radnji. Dakle, kao i svi programi počinjemo s definiranjem I / O pinova kao što je prikazano u nastavku. Dva američka senzora spojena su na digitalne pinove 2,3,4 i 5 i napajaju se s + 5V pinom. Okidačke igle su izlazni zatik, a eho-zatiči su ulazne.
Serijska komunikacija između Arduina i pythona odvija se brzinom prijenosa od 9600.
const int okidač1 = 2; // Okidački klin 1. Sesnor const int echo1 = 3; // Odjek klina 1. Sesnor const int okidač2 = 4; // Okidački pin drugog Sesnor const int echo2 = 5; // Echo pin drugog Sesnor void setup () {Serial.begin (9600); pinMode (okidač1, IZLAZ); pinMode (echo1, INPUT); pinMode (okidač2, IZLAZ); pinMode (echo2, INPUT); }
Moramo izračunati udaljenost između senzora i kazaljke svaki put prije nego što završimo bilo koju radnju. Dakle, moramo to učiniti mnogo puta, što znači da bi se ovaj kôd trebao koristiti kao funkcija. Napisali smo funkciju pod nazivom izračunaj_daljinu () koja će nam vratiti udaljenost između senzora i kazaljke.
/ * ### Funkcija za izračunavanje udaljenosti ### * / void izračunaj_daljinu (int okidač, int eho) {digitalWrite (okidač, LOW); delayMicroseconds (2); digitalWrite (okidač, VISOKO); delayMicroseconds (10); digitalWrite (okidač, LOW); zauzeto vrijeme = pulseIn (eho, HIGH); dist = zauzeto vrijeme * 0,034 / 2; ako je (dist> 50) dist = 50; }
Unutar našeg glavnog petlju smo provjeriti vrijednosti udaljenosti i obavljaju radnje gore navedenih. Prije toga koristimo dvije varijable distL i distR koje se ažuriraju s trenutnom vrijednošću udaljenosti.
izračunati_daljinu (okidač1, odjek1); distL = dist; // dobiti udaljenost lijevog senzora izračunati_daljinu (okidač2, eho2); distR = dist; // dobivanje udaljenosti desnog senzora
Budući da znamo udaljenost između oba senzora, sada je možemo usporediti s unaprijed definiranim vrijednostima i doći do određenih radnji. Na primjer, ako su obje ruke postavljene na udaljenost od 40 mc, tada reproduciramo / pauziramo video. Ovdje će se riječ „Reproducirati / zaustaviti“ poslati putem serijskog porta
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Otkrivanje obje ruke {Serial.println ("Reprodukcija / pauza"); kašnjenje (500);}
Ako se ispred modula stavi samo Desna ruka, video premotavamo unaprijed za jedan korak, a ako je lijeva, premotavamo za jedan korak. Na temelju radnje, ovdje će se riječ "Premotati unazad" ili "Naprijed" poslati putem serijskog porta
if ((distL> 40 && distL <50) && (distR == 50)) // Otkrivanje lijeve ruke {Serial.println ("Premotavanje unatrag"); kašnjenje (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Otkrivanje desne ruke {Serial.println ("Naprijed"); kašnjenje (500);}
Protivnik detaljne kontrole glasnoće i zapisa koristimo drugačiju metodologiju kako bismo spriječili lažne okidače. Za kontrolu glasnoće moramo staviti lijevu ruku cca. Na udaljenosti od 15 cm možete je pomaknuti prema senzoru da biste smanjili glasnoću, odmaknite je od senzora da biste povećali glasnoću. Kôd za isti prikazan je u nastavku. Na temelju akcije ovdje će se riječ "Vup" ili "Vdown" poslati putem serijskog porta
// Zaključaj lijevo - način upravljanja ako (distL> = 13 && distL <= 17) {delay (100); // Vrijeme zadržavanja ruke izračunati_daljinu (okidač1, odjek1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Lijevo zaključano"); while (distL <= 40) {izračunati_daljinu (okidač1, odjek1); distL = dist; if (distL <10) // Ruka gurnuta u {Serial.println ("Vup"); kašnjenje (300);} if (distL> 20) // Ruka izvučena {Serial.println ("Vdown"); kašnjenje (300);}}}}
Istu metodu možemo koristiti i za desni bočni senzor za kontrolu zapisa videozapisa. To jest, ako pomaknemo desnu ruku prema senzoru, film će brzo premotati unaprijed, a ako ga odmaknete od senzora, film će premotati unatrag. Na temelju radnje, ovdje će se riječ "Premotati unazad" ili "Naprijed" poslati putem serijskog porta
Sada možete pročitati cjeloviti kôd za ovo računalo kontrolirano gestama na kraju stranice i pokušati ga podrazumijevati kao cjelinu, a zatim kopirati na svoj Arduino IDE.
Programiranje vašeg Pythona:
Program python za ovaj projekt vrlo je jednostavan. Moramo uspostaviti serijsku komunikaciju s Arduinom putem ispravne brzine prijenosa, a zatim izvršiti neke osnovne radnje na tipkovnici. Prvi korak s pythonom bio bi instaliranje modula p yautogui . Obavezno slijedite ovaj korak jer program neće raditi bez modula pyautogui.
Instaliranje pyautogui modula za Windows:
Slijedite korake u nastavku da biste instalirali pyautogui za Windows. Ako koristite druge platforme, koraci će također biti manje-više slični. Provjerite je li vaše računalo / prijenosno računalo povezano s internetom i slijedite korake u nastavku
Korak 1: Otvorite Windows Command prompt i promijenite direktorij u mapu u koju ste instalirali python. Prema zadanim postavkama naredba bi trebala biti
cd C: \ Python27
Korak 2: Unutar vašeg python direktorija upotrijebite naredbu python –m pip install –upgrade pip da biste nadogradili svoj pip. Pip je alat u pythonu koji nam pomaže da lako instaliramo python module. Nakon što se ovaj modul nadogradi (kao što je prikazano na slici dolje) prijeđite na sljedeći korak.
python –m pip install - nadograditi pip
Korak 3: Upotrijebite naredbu “ python –m pip install pyautogui ” za instalaciju pyautogui modula. Nakon što postupak uspije, trebali biste vidjeti zaslon sličan ovome u nastavku.
python –m pip install - nadograditi pip

Sada kada su modul pyautogui i pyserial modul (instalirani u prethodnom vodiču) uspješno instalirani s pythonom, možemo nastaviti s programom python. Kompletan piton kod je dano na kraju udžbenik, ali objašnjenje za isti je kao što slijedi.
Uvezimo sva tri potrebna modula za ovaj projekt. Oni su pyautogui, serijski piton i vrijeme.
import serial # Serija uvezena za vrijeme uvoza serijske komunikacije # Obavezno koristiti funkcije odgode import pyautogui
Dalje uspostavljamo vezu s Arduinom putem COM porta. Na mom računalu Arduino je povezan na COM 18. Upotrijebite upravitelj uređaja da biste pronašli na koji COM port je povezan vaš Arduino i u skladu s tim ispravite sljedeći redak.
ArduinoSerial = serial.Serial ('com18', 9600) # Stvori objekt serijskog porta pod nazivom arduinoSerialData time.sleep (2) # pričekaj 2 sekunde da se komunikacija uspostavi
Unutar beskonačne while petlje opetovano slušamo COM priključak i uspoređujemo ključne riječi s bilo kojim unaprijed zadanim radovima i u skladu s tim vršimo pritiske na tipkovnici.
dok je 1: dolazno = str (ArduinoSerial.readline ()) # pročitajte serijske podatke i ispišite ih kao ispis redaka dolazno ako je "Reproduciraj / zaustavi" u dolaznom: pyautogui.typewrite (, 0,2) ako je "Premotaj unatrag" u dolaznom: pyautogui. prečac ('ctrl', 'left') ako je 'Proslijedi' u dolaznom: pyautogui.hotkey ('ctrl', 'desno') ako je 'Vup' u dolaznom: pyautogui.hotkey ('ctrl', 'dolje') ako ' Vdown 'u dolaznom: pyautogui.hotkey (' ctrl ',' up ')
Kao što vidite, za pritiskanje tipke jednostavno moramo upotrijebiti naredbu "pyautogui.typewrite (, 0,2)" koja će pritisnuti prostor tipke za 0,2 sek. Ako su vam potrebne vruće tipke poput ctrl + S, tada možete upotrijebiti naredbu internetske tipke “pyautogui.hotkey ('ctrl', 's')”.
Koristio sam ove kombinacije jer djeluju na VLC media playeru, možete ih prilagoditi na bilo koji način kako želite stvoriti vlastite programe za upravljanje bilo čime na računalu gestama.
Računalo kontrolirano gestama u akciji:
Uspostavite veze kako je gore definirano i prenesite Arduino kôd na svoju Arduino ploču. Zatim upotrijebite donju skriptu python i pokrenite program na svom prijenosnom računalu.
Sada možete reproducirati bilo koji film na računalu pomoću VLC media playera i rukom kontrolirati film kao što je prikazano u donjem video zapisu.

Nadam se da ste razumjeli projekt i uživali igrati se s njim. Ovo je samo demonstracija i možete upotrijebiti svoju kreativnost da biste oko toga stvorili puno više cool pokreta kontroliranih gestama. Javite mi je li ovo bilo korisno i što ćete stvoriti pomoću ovoga u odjeljku za komentare i rado ću to znati.
