- Predpogoji:
- Koncept projekta:
- Shema vezja:
- Programiranje vašega Arduina:
- Programiranje vašega Pythona:
- Računalnik s krmiljenjem v akciji:
V zadnjem času prenosniki ali računalniki, ki jih nadzorujejo geste, postajajo zelo znani. Ta tehnika se imenuje Leap motion, ki nam omogoča nadzor določenih funkcij na našem računalniku / prenosniku, tako da preprosto zamahnemo z roko pred njim. To je zelo kul in zabavno, vendar imajo ti prenosniki resnično visoko ceno. Torej, v tem projektu poskusimo zgraditi lasten prenosni računalnik / računalnik s krmiljenjem z gestami, tako da združimo moč Arduina in Pythona.
Z dvema ultrazvočnimi senzorji bomo določili položaj roke in na podlagi položaja nadzorovali predvajalnik predstavnosti (VLC). To sem uporabil za predstavitev, toda ko ste razumeli projekt, lahko naredite kar koli, tako da spremenite nekaj vrstic kode in na svoj najljubši način nadzirate svojo najljubšo aplikacijo.
Predpogoji:
Zajeli smo že nekaj projektov, ki združujejo Arduino s Pythonom. Predvidevam, da ste že namestili Python in njegovo serijsko knjižnico ter uspešno preizkusili nekaj osnovnih projektov, kot je utripajoča LED. V nasprotnem primeru ne skrbite, lahko se vrnete na to vadnico Arduino-Python Led Controlling in se z njo strinjate. Preden nadaljujete, se prepričajte, da ste namestili knjižnico Python in pyserial.
Koncept projekta:
Koncept projekta je zelo preprost. Na vrh monitorja bomo postavili dva ultrazvočna (ZDA) senzorja in z uporabo Arduina odčitali razdaljo med monitorjem in roko, na podlagi te vrednosti razdalje bomo izvedli določena dejanja. Za izvajanje dejanj v našem računalniku uporabljamo knjižnico Python pyautogui. Ukazi iz Arduina se pošljejo v računalnik prek serijskih vrat (USB). Te podatke bo nato prebral python, ki se izvaja v računalniku, in na podlagi prebranih podatkov bo izvedeno dejanje.
Shema vezja:
Če želite računalnik upravljati z gibi z roko, preprosto povežite dva ultrazvočna senzorja z Arduino. Vemo, da ameriški senzor deluje s 5V, zato ga napaja vgrajeni regulator napetosti Arduino. Arduino je mogoče priključiti na osebni računalnik / prenosni računalnik za napajanje modula in tudi za serijsko komunikacijo. Ko so povezave končane, jih položite na monitor, kot je prikazano spodaj. Za lepljenje na monitor sem uporabil dvojni stranski trak, vendar lahko uporabite svojo ustvarjalnost. Ko ga pritrdimo na mestu, lahko nadaljujemo s programiranjem.
Programiranje vašega Arduina:
Arduino mora biti programiran tako, da odčitava razdaljo roke od ameriškega senzorja. Celoten program je podan na koncu te strani; tik spodaj sem podal razlago programa. Če še ne uporabljate ultrazvočnega senzorja, preprosto preberite Arduino in ultrazvočno merjenje razdalje na osnovi senzorja.
Z odčitavanjem vrednosti razdalje lahko pridemo do določenih dejanj, ki jih je mogoče nadzorovati s kretnjami, na primer v tem programu sem 5 dejanj programiral kot predstavitev.
Ukrep 1: Ko sta obe roki postavljeni pred senzor na določeni oddaljeni razdalji, se mora video v predvajalniku VLC predvajati / zaustaviti.
Ukrep 2: Ko je desna roka postavljena pred senzor na določeni oddaljenosti, mora video posneti korak naprej.
Ukrep 3: Ko je leva roka postavljena pred senzor na določeni oddaljenosti, mora videoposnetek previti en korak nazaj.
Ukrep 4: Ko je desna roka postavljena pred senzor na določeni bližnji razdalji in potem, če se premakne proti senzorju, naj se video pospeši naprej, v primeru, da se odmakne, pa nazaj.
Ukrep 5: Ko levo roko postavite pred senzor na določeno bližnjo razdaljo in nato, če se premaknete proti senzorju, se mora glasnost videoposnetka povečati, če se odmakne, pa se mora glasnost zmanjšati.
Poglejmo, kako je napisan program za izvajanje zgornjih dejanj. Tako kot vsi programi začnemo z definiranjem V / I zatičev, kot je prikazano spodaj. Oba ameriška senzorja sta priključena na digitalni nožici 2,3,4 in 5 in se napajata s + 5V zatičem. Sprožilni zatiči so izhodni zatiči, odmevni zatiči pa vhodni zatiči.
Serijska komunikacija med Arduinom in pythonom poteka s hitrostjo prenosa 9600.
const int sprožilec1 = 2; // Sprožilni zatič 1. Sesnorjeve const int echo1 = 3; // odmevni zatič prvega Sesnorjevega const int sprožilca2 = 4; // Sprožilni zatič 2. Sesnor const int echo2 = 5; // Odmevni zatič 2. Sesnor void setup () {Serial.begin (9600); pinMode (sprožilec1, IZHOD); pinMode (echo1, INPUT); pinMode (sprožilec2, IZHOD); pinMode (echo2, INPUT); }
Preden zaključimo katero koli akcijo, moramo vsakič izračunati razdaljo med senzorjem in roko. Torej moramo to storiti večkrat, kar pomeni, da je treba to kodo uporabiti kot funkcijo. Napisali smo funkcijo z imenom izračunaj_daljavo (), ki nam bo vrnila razdaljo med senzorjem in roko.
/ * ### Funkcija za izračun razdalje ### * / void izračuna_dalja (int sprožilec, int echo) {digitalWrite (sprožilec, LOW); delayMicroseconds (2); digitalWrite (sprožilec, VISOKO); delayMicroseconds (10); digitalWrite (sprožilec, LOW); time_taken = pulseIn (echo, HIGH); dist = zaseženi čas * 0,034 / 2; če je (dist> 50) dist = 50; }
Znotraj naše glavno zanko smo preveriti vrednosti razdalje in opravlja dejanja zgoraj omenjenih. Pred tem uporabimo dve spremenljivki distL in distR, ki se posodobita s trenutno vrednostjo razdalje.
izračuna_dalja (sprožilec1, odmev1); distL = dist; // dobimo razdaljo levega senzorja izračuna_dalja (sprožilec2, odmev2); distR = dist; // dobimo razdaljo desnega senzorja
Ker poznamo razdaljo med senzorjema, jo lahko zdaj primerjamo z vnaprej določenimi vrednostmi in pridemo do določenih dejanj. Na primer, če sta obe roki postavljeni na razdalji 40 mc, predvajamo / zaustavimo video. Tu bo beseda »Predvajanje / premor« poslana prek serijskih vrat
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Zaznaj obe roki {Serial.println ("Predvajanje / premor"); zamuda (500);}
Če je pred modulom postavljena samo Desna roka, video pospešimo za en korak, če je leva, pa za en korak. Glede na dejanje bo tukaj beseda "Previjanje nazaj" ali "Naprej" poslana skozi serijska vrata
if ((distL> 40 && distL <50) && (distR == 50)) // Zaznaj levo roko {Serial.println ("Previjanje nazaj"); zamuda (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Zaznaj desno roko {Serial.println ("Forward"); zamuda (500);}
Za podroben nadzor glasnosti in skladbe uporabljamo drugačno metodologijo, da preprečimo napačne sprožilce. Za nadzor glasnosti moramo postaviti levo roko pribl. Na razdalji 15 cm ga lahko premaknete proti senzorju, da zmanjšate glasnost, premaknite ga stran od senzorja, da povečate glasnost. Koda za isto je prikazana spodaj. Glede na dejanje bo tu beseda "Vup" ali "Vdown" poslana skozi serijska vrata
// Zakleni levo - način nadzora, če (distL> = 13 && distL <= 17) {delay (100); // Čas zadrževanja roke izračuna_dalja (sprožilec1, odmev1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Left Locked"); while (distL <= 40) {izračuna_dalja (sprožilec1, odmev1); distL = dist; if (distL <10) // Roka potisnjena v {Serial.println ("Vup"); delay (300);} if (distL> 20) // Roka izvlečena {Serial.println ("Vdown"); zamuda (300);}}}}
Isti način lahko uporabimo tudi za desni bočni senzor za nadzor posnetka videoposnetka. To je, če premaknemo desno roko proti senzorju, bo film pospešil naprej, če pa ga odmaknemo od senzorja, bo film previl nazaj. Glede na dejanje bo tukaj beseda "Previjanje nazaj" ali "Naprej" poslana skozi serijska vrata
Zdaj lahko preberete celotno kodo za ta računalnik z nadzorom kretenj, ki je podan na koncu strani, in jo poskusite podceniti kot celoto ter nato kopirati v svoj Arduino IDE.
Programiranje vašega Pythona:
Program python za ta projekt je zelo preprost. Vzpostaviti moramo serijsko komunikacijo z Arduinom s pravilno hitrostjo prenosa in nato izvesti nekaj osnovnih dejanj na tipkovnici. Prvi korak s pythonom bi bil namestitev modula p yautogui . Upoštevajte ta korak, ker program ne bo deloval brez modula pyautogui.
Namestitev modula pyautogui za Windows:
Sledite spodnjim korakom za namestitev pyautogui za Windows. Če uporabljate druge platforme, bodo koraki tudi bolj ali manj podobni. Prepričajte se, da je računalnik / prenosni računalnik povezan z internetom in nadaljujte s spodnjimi koraki
1. korak: Odprite ukazni poziv sistema Windows in spremenite imenik v mapo, v katero ste namestili python. Privzeto mora biti ukaz
cd C: \ Python27
2. korak: V imeniku python uporabite ukaz python –m pip install –upgrade pip za nadgradnjo pipa. Pip je orodje v pythonu, ki nam pomaga enostavno namestiti python module. Ko je ta modul nadgrajen (kot je prikazano na spodnji sliki), nadaljujte z naslednjim korakom.
python –m pip namesti –nadgradi pip
3. korak: Za namestitev modula pyautogui uporabite ukaz » python –m pip install pyautogui «. Ko je postopek uspešen, se spodaj prikaže zaslon, podoben temu.
python –m pip namesti –nadgradi pip
Zdaj, ko sta modul pyautogui in pyserial modul (nameščen v prejšnji vadnici) uspešno nameščena s pythonom, lahko nadaljujemo s programom python. Popolna python koda je podan na koncu učbenika, ampak razlaga za isto je, kot sledi.
Uvozimo vse tri potrebne module za ta projekt. So pyautogui, serijski piton in čas.
import serial #Serial import for Serial communication import time #Required to use delay functions import pyautogui
Nato vzpostavimo povezavo z Arduinom prek vrat COM. V mojem računalniku je Arduino povezan s COM 18. Z upraviteljem naprav poiščite, na katera COM vrata je povezan vaš Arduino, in ustrezno popravite naslednjo vrstico.
ArduinoSerial = serial.Serial ('com18', 9600) # Ustvari objekt serijskih vrat, imenovan arduinoSerialData time.sleep (2) # počakajte 2 sekundi, da se komunikacija vzpostavi
Znotraj neskončne zanke while večkrat poslušamo vrata COM in ključne besede primerjamo z vsemi vnaprej določenimi deli in skladno s tem pritiskamo na tipkovnico.
medtem ko je 1: vhodno = str (ArduinoSerial.readline ()) # preberite serijske podatke in jih natisnite kot vrstico vhodno, če je v predvajanju: pyautogui.typewrite (, 0,2), če je previjanje nazaj v dohodnem: pyautogui. bližnjica ('ctrl', 'left'), če je 'Forward' v dohodnem: pyautogui.hotkey ('ctrl', 'right'), če je 'Vup' v dohodnem: pyautogui.hotkey ('ctrl', 'down') if ' V down 'v dohodnem: pyautogui.hotkey (' ctrl ',' up ')
Kot lahko vidite, moramo za pritisk na tipko preprosto uporabiti ukaz "pyautogui.typewrite (, 0,2)", ki bo pritiskal na tipko za 0,2 sekunde. Če potrebujete bližnjične tipke, kot je ctrl + S, lahko uporabite ukaz bližnjične tipke "pyautogui.hotkey ('ctrl', 's')".
Te kombinacije sem uporabil, ker delujejo na predvajalniku medijev VLC, lahko jih prilagodite na kakršen koli način, da ustvarite lastne programe za nadzor kar koli v računalniku s kretnjami.
Računalnik s krmiljenjem v akciji:
Vzpostavite povezave, kot je določeno zgoraj, in naložite kodo Arduino na ploščo Arduino. Nato uporabite spodnji skript python in zaženite program na prenosnem računalniku.
Zdaj lahko v računalniku predvajate kateri koli film z predvajalnikom medijev VLC in z roko upravljate film, kot je prikazano v spodnjem videoposnetku.
Upam, da ste projekt razumeli in ste se z njim radi igrali. To je samo predstavitev in s svojo ustvarjalnostjo lahko okoli tega ustvarite veliko bolj kul stvari, nadzorovane z gestami. Sporočite mi, ali je bilo to koristno in kaj boste ustvarili z uporabo tega v oddelku za komentarje in z veseljem bom vedel.