- Išankstinės sąlygos:
- Projekto koncepcija:
- Grandinės schema:
- „Arduino“ programavimas:
- „Python“ programavimas:
- Veiksmais valdomas gestais valdomas kompiuteris:
Neseniai labai garsėja nešiojamieji kompiuteriai ar kompiuteriai, valdomi gestais. Ši technika vadinama „Šuolio judesiu“, kuri leidžia mums valdyti tam tikras kompiuterio / nešiojamojo kompiuterio funkcijas, paprasčiausiai mojuojant ranka priešais jį. Tai padaryti yra labai šaunu ir smagu, tačiau šie nešiojamieji kompiuteriai yra tikrai labai brangūs. Taigi šiame projekte pabandykime sukurti savo gestų valdymo nešiojamąjį kompiuterį / kompiuterį, sujungdami „Arduino“ ir „Python“ galią.
Mes naudosime du ultragarso jutiklius, kad nustatytume rankos padėtį ir valdytume laikmenų grotuvą (VLC) pagal padėtį. Naudojau tai demonstravimui, bet kai suprasite projektą, galite padaryti viską, tiesiog pakeisdami kelias kodo eilutes ir mėgstamiausiu būdu valdydami mėgstamą programą.
Išankstinės sąlygos:
Mes jau apėmėme keletą projektų, kuriuose „Arduino“ derinamas su „Python“. Taigi manau, kad jūs jau įdiegėte „Python“ ir jo nuosekliąją biblioteką ir sėkmingai išbandėte keletą pagrindinių projektų, pvz., Mirksi LED. Jei ne, nesijaudinkite, galite grįžti į šią „Arduino-Python Led Controlling“ mokymo programą ir su ja susitvarkyti. Taigi prieš tęsdami įsitikinkite, kad įdiegėte „Python“ ir „pyserial“ biblioteką.
Projekto koncepcija:
Projekto koncepcija yra labai paprasta. Ant savo monitoriaus uždėsime du ultragarso (JAV) jutiklius ir naudodami „Arduino“ perskaitysime atstumą tarp monitoriaus ir rankos, remdamiesi šia atstumo verte, atliksime tam tikrus veiksmus. Norėdami atlikti veiksmus savo kompiuteryje, naudojame „Python pyautogui“ biblioteką. „Arduino“ komandos siunčiamos į kompiuterį per nuoseklųjį prievadą (USB). Tada šiuos duomenis perskaitys python, kuris veikia kompiuteryje, ir, remiantis perskaitytais duomenimis, bus atliktas veiksmas.
Grandinės schema:
Norėdami valdyti asmeninį kompiuterį naudodami rankų gestus, tiesiog prijunkite du ultragarso jutiklius su „Arduino“. Mes žinome, kad JAV jutikliai dirba su 5 V, todėl juos maitina laive esantis „Arduino“ įtampos reguliatorius. „Arduino“ gali būti prijungtas prie kompiuterio / nešiojamojo kompiuterio, kad būtų galima maitinti modulį ir taip pat palaikyti nuoseklųjį ryšį. Atlikę ryšius, padėkite juos į savo monitorių, kaip parodyta žemiau. Aš naudoju dvigubą šoninę juostą, kad galėčiau ją užklijuoti ant savo monitoriaus, bet jūs galite naudoti savo kūrybiškumą. Užtikrinę jį vietoje, galime tęsti programavimą.
„Arduino“ programavimas:
„Arduino“ turėtų būti užprogramuota skaityti rankos atstumą nuo JAV jutiklio. Visa programa pateikiama šio puslapio pabaigoje; šiek tiek žemiau aš pateikiau programos paaiškinimą. Jei dar nesinaudojote ultragarso jutikliu, tiesiog atlikite „Arduino“ ir „ultragarsinio jutiklio atstumo matavimą“.
Skaitydami atstumo vertę galime pasiekti tam tikrus veiksmus, kuriuos reikia valdyti gestais, pavyzdžiui, šioje programoje 5 veiksmus užprogramavau kaip demonstracinę versiją.
1 veiksmas: kai abi rankos yra pastatytos prieš jutiklį tam tikru atstumu, vaizdo įrašas VLC grotuve turėtų leisti / pristabdyti.
2 veiksmas: kai dešinioji ranka yra pastatyta prieš jutiklį tam tikru atstumu, vaizdo įrašas turėtų judėti į priekį vienu žingsniu.
3 veiksmas: kai kairė ranka pastatyta prieš jutiklį tam tikru atstumu, vaizdo įrašas turėtų atsukti vieną žingsnį.
4 veiksmas: kai dešinioji ranka pastatyta prieš jutiklį tam tikru atstumu, o tada, jei juda link jutiklio, vaizdo įrašas turėtų greitai judėti į priekį, o jei atitolęs, vaizdo įrašas turėtų atsukti atgal.
5 veiksmas: Kai kairė ranka pastatoma prieš jutiklį tam tikru atstumu, o tada, jei juda link jutiklio, vaizdo įrašo garsumas turėtų padidėti, o atitolinus - garsumas turėtų sumažėti.
Pažiūrėkime, kaip programa yra parašyta atlikti minėtus veiksmus. Taigi, kaip ir visas programas, mes pradedame apibrėždami I / O kaiščius, kaip parodyta žemiau. Du JAV jutikliai yra prijungti prie skaitmeninių kaiščių 2,3,4 ir 5 ir yra maitinami + 5 V kaiščiu. Trigerio kaiščiai yra išvesties kaištis, o aido kaiščiai - įvesties kaiščiai.
Nuoseklus ryšys tarp „Arduino“ ir „python“ vyksta 9600 perdavimo greičiu.
const int paleidiklis1 = 2; // 1-osios „Sesnor“ sąrankos kaištis const int echo1 = 3; // 1-osios „Sesnor“ aido kaištis const int trigeris2 = 4; // 2-osios „Sesnor“ sąrankos kaištis „const int echo2 = 5“; pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigeris2, OUTPUT); pinMode (echo2, INPUT); }
Prieš baigdami bet kokį veiksmą, kiekvieną kartą turime apskaičiuoti atstumą tarp jutiklio ir plaštakos. Taigi mes turime tai padaryti daug kartų, o tai reiškia, kad šis kodas turėtų būti naudojamas kaip funkcija. Mes parašėme funkciją pavadinti apskaičiuoti atstumą (), kuri grąžins mums atstumą tarp jutiklio ir rankos.
/ * ### Funkcija atstumui apskaičiuoti ### * / void apskaičiuoti atstumą (int trigeris, int echo) {digitalWrite (sukelti, LOW); vėlavimasMikrosekundės (2); „digitalWrite“ (trigeris, AUKŠTAS); vėlavimasMikrosekundės (10); „digitalWrite“ (trigeris, LOW); time_taken = pulseIn (aidas, AUKŠTAS); dist = laikas paimtas * 0,034 / 2; jei (dist> 50) dist = 50; }
Pagrindinės kilpos viduje mes patikriname atstumo vertę ir atliekame aukščiau minėtus veiksmus. Prieš tai mes naudojame du kintamuosius distL ir distR, kurie atnaujinami pagal dabartinę atstumo vertę.
apskaičiuoti atstumą (trigeris1, aidas1); distL = dist; // gauti atstumą nuo kairio jutiklio apskaičiuoti atstumą (trigeris2, aidas2); distR = dist; // gauti dešiniojo jutiklio atstumą
Kadangi žinome atstumą tarp abiejų jutiklių, dabar galime jį palyginti su iš anksto nustatytomis reikšmėmis ir atlikti tam tikrus veiksmus. Pavyzdžiui, jei abi rankos pastatytos 40 mc atstumu, mes atkuriame / pristabdome vaizdo įrašą. Čia žodis „Paleisti / pristabdyti“ bus išsiųstas per nuoseklųjį prievadą
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Aptikti abi rankas {Serial.println ("Play / Pause"); vėlavimas (500);}
Jei priešais modulį dedama tik dešinioji ranka, vaizdo įrašą pasukame vienu žingsniu į priekį, o jei kairę - atsukame vienu žingsniu. Remiantis veiksmu, čia žodis „Atsukti atgal“ arba „Pirmyn“ bus išsiųstas per nuoseklųjį prievadą
if ((distL> 40 && distL <50) && (distR == 50)) // Aptikti kairę ranką {Serial.println ("Atsukti atgal"); delay (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Aptikti dešiniąją ranką {Serial.println ("Pirmyn"); vėlavimas (500);}
Priešui išsamiai kontroliuojant garsumą ir kelią, mes naudojame kitą metodiką, kad išvengtume klaidingų veiksnių. Norėdami reguliuoti garsumą, kairę ranką turime pastatyti apytiksliai. 15 cm atstumu galite judinti jutiklio link, kad sumažintumėte garsumą, kad padidintumėte garsumą. To paties kodas parodytas žemiau. Remiantis veiksmu, čia žodis „Vup“ arba „Vdown“ bus išsiųstas per nuoseklųjį prievadą
// Užrakinti kairę - valdymo režimas, jei (distL> = 13 && distL <= 17) {delsa (100); // Rankos laikymo laiko apskaičiavimo atstumas (trigeris1, aidas1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("kairė užrakinta"); o (distL <= 40) {apskaičiuoti atstumą (trigeris1, aidas1); distL = dist; if (distL <10) // Ranka įstumta {Serial.println ("Vup"); delay (300);} if (distL> 20) // Ranka ištraukta {Serial.println ("Vdown"); delsa (300);}}}}
Dešinės pusės jutikliui taip pat galime naudoti tą patį metodą vaizdo įrašo takeliui valdyti. Tai yra, jei mes judėsime dešiniąja ranka link jutiklio, tai greitai pasuks filmą į priekį, o jei atitolsite nuo jutiklio, jis atsuks filmą. Remiantis veiksmu, čia žodis „Atsukti atgal“ arba „Pirmyn“ bus išsiųstas per nuoseklųjį prievadą
Dabar galite perskaityti visą šio gestais valdomo kompiuterio kodą, pateiktą puslapio pabaigoje, pabandyti jį nepakankamai įvertinti ir nukopijuoti į „Arduino IDE“.
„Python“ programavimas:
Šio projekto python programa yra labai paprasta. Mes tiesiog turime užmegzti nuoseklų ryšį su „Arduino“ per teisingą duomenų perdavimo greitį ir tada atlikti keletą pagrindinių klaviatūros veiksmų. Pirmasis žingsnis su „python“ būtų „ p yautogui“ modulio įdiegimas . Būtinai atlikite šį veiksmą, nes programa neveiks be pyautogui modulio.
„Pyautogui“ modulio diegimas „Windows“:
Atlikite toliau nurodytus veiksmus, kad įdiegtumėte „ pyautogui “ langams. Jei naudojate kitas platformas, veiksmai taip pat bus daugiau ar mažiau panašūs. Įsitikinkite, kad jūsų kompiuteris / nešiojamas kompiuteris yra prijungtas prie interneto, ir atlikite toliau nurodytus veiksmus
1 žingsnis: Atidarykite „Windows“ komandų eilutę ir pakeiskite katalogą į aplanką, kuriame įdiegėte python. Pagal nutylėjimą komanda turėtų būti
cd C: \ Python27
2 žingsnis: Python kataloge naudokite komandą python –m pip install –upgrade pip, kad atnaujintumėte savo pip. „Pip“ yra „Python“ įrankis, kuris padeda mums lengvai įdiegti „Python“ modulius. Atnaujinus šį modulį (kaip parodyta paveikslėlyje žemiau), pereikite prie kito žingsnio.
python –m pip install –atnaujinti pip
3 žingsnis: Norėdami įdiegti pyautogui modulį, naudokite komandą „ python –m pip install pyautogui “. Kai procesas bus sėkmingas, turėtumėte pamatyti ekraną, panašų į tai, kaip nurodyta toliau.
python –m pip install –atnaujinti pip
Dabar, kai „ pyautogui“ modulis ir „ pyserial“ modulis (įdiegti ankstesnėje mokymo programoje) sėkmingai įdiegti kartu su „python“, galime tęsti „python“ programą. Visas pitono kodas pateikiamas mokymo programos pabaigoje, tačiau to paaiškinimas yra toks.
Importuokime visus tris šiam projektui reikalingus modulius. Jie yra pyautogui, serijinis pitonas ir laikas.
importuoti serijinį #Serial, importuotą nuosekliojo ryšio importavimo laikui #Reikia naudoti delsos funkcijas importuoti pyautogui
Toliau mes nustatome ryšį su „Arduino“ per COM prievadą. Mano kompiuteryje „Arduino“ yra prijungtas prie „COM 18.“. Naudodami įrenginių tvarkytuvę raskite, prie kurio COM prievado prijungtas jūsų „Arduino“, ir atitinkamai pataisykite šią eilutę.
ArduinoSerial = serial.Serial ('com18', 9600) #Create nuoseklaus prievado objektas vadinamas arduinoSerialData time.sleep (2) #palaukite 2 sekundes, kol ryšys bus užmegztas.
„Infinite while loop“ viduje mes pakartotinai klausomės COM prievado ir lyginame raktinius žodžius su bet kokiais iš anksto suklastotais kūriniais ir atitinkamai paspaudžiame klaviatūros plokštes.
o 1: gaunamas = str (ArduinoSerial.readline ()) #skaityti serijos duomenis ir atsispausdinti kaip gaunamus eilučius, jei gaunant gaunasi „Paleisti / pristabdyti“: pyautogui.typewrite (, 0,2), jei gaunamas „Atsukti atgal“: pyautogui. spartusis klavišas ('ctrl', 'kairė'), jei gaunamas 'Pirmyn': pyautogui.hotkey ('ctrl', 'dešinė'), jei 'Vup' gaunamas: pyautogui.hotkey ('ctrl', 'žemyn'), jei ' Vdown 'gaunamuose: pyautogui.hotkey (' ctrl ',' aukštyn ')
Kaip matote, norėdami paspausti klavišą, tiesiog turime naudoti komandą „pyautogui.typewrite (, 0.2)“, kuri paspaus klavišo tarpą 0,2 sek. Jei jums reikia sparčiųjų klavišų, pvz., „Ctrl“ + S, galite naudoti sparčiojo klavišo komandą „pyautogui.hotkey ('ctrl', 's')“.
Aš naudojau šiuos derinius, nes jie veikia VLC laikmenų grotuve, galite juos pritaikyti bet kokiu būdu, kad sukurtumėte savo programas, kad galėtumėte valdyti bet ką kompiuteryje gestais.
Veiksmais valdomas gestais valdomas kompiuteris:
Atlikite jungtis, kaip apibrėžta aukščiau, ir įkelkite „Arduino“ kodą į savo „Arduino“ lentą. Tada naudokite žemiau esantį python scenarijų ir paleiskite programą savo nešiojamajame kompiuteryje.
Dabar galite žaisti bet kurį filmą savo kompiuteryje naudodami VLC laikmenų leistuvą ir naudodamiesi ranka valdykite filmą, kaip parodyta toliau pateiktame vaizdo įraše.
Tikiuosi, kad supratote projektą ir patiko su juo žaisti. Tai tik demonstracinė versija ir galite panaudoti savo kūrybiškumą, kad sukurtumėte daug daugiau šaunių gestų valdomų dalykų. Praneškite man, ar tai buvo naudinga ir ką sukursite naudodami tai komentarų skyriuje, ir aš mielai tai sužinosiu.