- Előfeltételek:
- A projekt mögött álló koncepció:
- Kördiagramm:
- Az Arduino programozása:
- A Python programozása:
- Gesztus által vezérelt számítógép működés közben:
A közelmúltban a kézmozdulattal vezérelt laptopok vagy számítógépek egyre híresebbek. Ezt a technikát ugrómozgásnak hívják, amely lehetővé teszi számunkra, hogy számítógépünk / laptopunk bizonyos funkcióit úgy vezéreljük, hogy egyszerűen csak integetünk előtte a kezünknek. Nagyon jó és szórakoztató csinálni, de ezek a laptopok valóban nagyon magas áron vannak. Tehát ebben a projektben próbáljuk meg megépíteni saját gesztusvezérlő laptopunkat / számítógépünket az Arduino és a Python erejének kombinálásával.
Két ultrahangos szenzort használunk a kezünk helyzetének meghatározására, és a helyzet alapján vezérelünk egy médialejátszót (VLC). Ezt bemutatásra használtam, de miután megértette a projektet, bármit megtehet úgy, hogy csak néhány kódsort megváltoztat, és kedvenc módján vezérli kedvenc alkalmazását.
Előfeltételek:
Kevés olyan projektet ismertettünk már, amely egyesíti az Arduino-t a Python-nal. Tehát feltételezem, hogy már telepítette a Python-ot és annak soros könyvtárát, és sikeresen kipróbált néhány alapprojektet, például a villogó LED-et. Ha nem, ne aggódjon, visszatérhet erre az Arduino-Python Led Controlling oktatóanyagra, és kijön vele. Tehát a folytatás előtt ellenőrizze, hogy telepítette-e a Python és a pyserial könyvtárat.
A projekt mögött álló koncepció:
A projekt mögött álló koncepció nagyon egyszerű. Két ultrahangos (USA) érzékelőt helyezünk a monitor tetejére, és az Arduino segítségével leolvassuk a monitor és a kezünk közötti távolságot, a távolság ezen értéke alapján bizonyos műveleteket fogunk végrehajtani. A műveletek végrehajtásához számítógépünkön a Python pyautogui könyvtárat használjuk. Az Arduino parancsai soros porton (USB) keresztül érkeznek a számítógépre. Ezeket az adatokat ezután a számítógépen futó python olvassa el, és az olvasott adatok alapján egy műveletet hajtanak végre.
Kördiagramm:
A kézmozdulatokkal történő számítógép vezérléséhez egyszerűen csatlakoztassa a két ultrahangos érzékelőt az Arduino-hoz. Tudjuk, hogy az amerikai szenzorok 5 V-val működnek, ezért ezeket az Arduino fedélzeti feszültségszabályozója táplálja. Az Arduino csatlakoztatható a PC-hez / Laptophoz a modul áramellátása és a soros kommunikáció érdekében. Miután a csatlakozás elkészült, helyezze őket a monitorra az alábbiak szerint. Dupla oldalsó szalagot használtam a monitoromra való ragasztáshoz, de használhatja saját kreativitását. Miután egy helyen rögzítette, folytathatjuk a programozást.
Az Arduino programozása:
Az Arduino-t úgy kell programozni, hogy leolvassa a kéz távolságát az amerikai érzékelőtől. A teljes program az oldal végén található; közvetlenül az alábbiakban adtam meg a program magyarázatát. Ha még nem ismeri az ultrahangos szenzort, akkor csak végezze el az Arduino és ultrahangos szenzor alapú távolságmérést.
A távolság értékének kiolvasásával elérhetünk bizonyos mozdulatokkal vezérelhető műveleteket, például ebben a programban 5 műveletet programoztam demónak.
1. lépés: Ha mindkét kezét az érzékelő elé helyezi egy adott távolságra, akkor a VLC lejátszóban lévő videónak le kell játszania / szüneteltetnie.
2. lépés: Ha a jobb kezét az érzékelő elé helyezzük egy adott távolságra, akkor a videónak előre kell haladnia.
3. lépés: Ha a bal kezét az érzékelő elé helyezzük egy adott távolságra, akkor a videót vissza kell tekerni egy lépéssel.
4. lépés: Ha a jobb kezét az érzékelő elé helyezzük egy adott közeli távolságra, majd ha az érzékelő felé mozgatjuk, akkor a videónak előre kell haladnia, és ha elmozdul, akkor a videót vissza kell tekerni.
5. lépés: Ha a bal kezét az érzékelő elé helyezzük egy adott közeli távolságra, majd ha az érzékelő felé mozgatjuk, akkor a videó hangerejének növekednie kell, és ha eltávolítja, akkor a hangerőnek csökkennie kell.
Lássuk, hogyan van megírva a program a fenti műveletek végrehajtására. Tehát, mint minden program, az I / O csapok definiálásával kezdjük az alábbiak szerint. A két amerikai érzékelő a 2,3,4 és az 5 digitális érintkezőkhöz van csatlakoztatva, és az áramellátásuk + 5 V-os tűvel történik. A kiváltó csapok a kimeneti tűk, az Echo csapok pedig a bemeneti csapok.
Az Arduino és a python közötti soros kommunikáció 9600 baud sebességgel zajlik.
const int trigger1 = 2; // Az 1. Sesnor trigger int csapja echo1 = 3; // Az 1. Sesnor visszhangtűje const int trigger2 = 4; // A 2. Sesnor bekapcsolócsapja konst int echo2 = 5; // A 2. Sesnor visszavezető csapja void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Minden cselekvés befejezése előtt minden alkalommal ki kell számolnunk az érzékelő és a kéz közötti távolságot. Tehát sokszor meg kell tennünk, ami azt jelenti, hogy ezt a kódot függvényként kell használni. Írtunk egy függvényt, amelynek a kiszámítása_távolság () nevű függvénye adja vissza az érzékelő és a kéz közötti távolságot.
/ * ### Funkció a távolság kiszámításához ### * / void calc_distance (int trigger, int echo) {digitalWrite (trigger, LOW); késleltetés mikroszekundum (2); digitalWrite (trigger, HIGH); késleltetés mikroszekundum (10); digitalWrite (trigger, LOW); time_taken = pulseIn (visszhang, HIGH); dist = elvett idő * 0,034 / 2; ha (dist> 50) dist = 50; }
Belül a fő hurok mi ellenőrizzük az értéket a távolság, és hajtsa végre a műveleteket a fent említett. Előtte két változót használunk: distL és distR, amelyek frissülnek az aktuális távolságértékkel.
kiszámítja a távolságot (trigger1, echo1); distL = dist; // a bal oldali érzékelő távolságának kiszámítása kiszámítja a távolságot (trigger2, echo2); distR = dist; // megkapja a jobb oldali érzékelő távolságát
Mivel ismerjük a két érzékelő közötti távolságot, most összehasonlíthatjuk az előre definiált értékekkel, és elérhetünk bizonyos műveleteket. Például, ha mindkét kéz 40 mc távolságra van, akkor lejátszjuk / szüneteltetjük a videót. Itt a „Play / Pause” szót a soros porton keresztül küldjük el
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // mindkét kéz észlelése {Serial.println ("Lejátszás / Szünet"); késés (500);}
Ha csak a jobb oldalt helyezzük a modul elé, akkor a videót egy lépéssel előre haladjuk, és ha bal kézzel, akkor egy lépéssel visszatekerjük. A művelet alapján itt a „visszatekerés” vagy a „továbbítás” szót a soros porton keresztül küldjük el
if ((distL> 40 && distL <50) && (distR == 50)) // Bal kéz észlelése {Serial.println ("Visszatekerés"); delay (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Jobb kéz észlelése {Serial.println ("Továbbítás"); késés (500);}
A hangerő és a pálya részletes szabályozásában más módszert alkalmazunk a hamis kiváltó tényezők megelőzése érdekében. A hangerő szabályozásához kb. 15 cm távolságban, akkor vagy mozgassa az érzékelő felé, hogy csökkentse a hangerőt, és távolítsa el az érzékelőtől, hogy növelje a hangerőt. Ugyanennek a kódja az alábbiakban látható. A művelet alapján itt a „Vup” vagy „Vdown” szót a soros porton keresztül küldjük ki
// Zár balra - Vezérlési mód, ha (distL> = 13 && distL <= 17) {késleltetés (100); // Kézi tartási idő kiszámítása_távolság (trigger1, echo1); distL = dist; if (distL> = 13 && distL <= 17) {Sor.println ("Balra zárva"); míg (distL <= 40) {kiszámítja a távolságot (trigger1, echo1); distL = dist; if (distL <10) // A kéz betolt {Serial.println ("Vup"); delay (300);} if (distL> 20) // Kéz kihúzva {Serial.println ("Vdown"); késés (300);}}}}
Ugyanezt a módszert használhatjuk a jobb oldali érzékelőnél is, a videó sávjának vezérléséhez. Ez azt jelenti, hogy ha a jobb kezét az érzékelő felé mozgatjuk, akkor a film előreteker, és ha eltávolítja az érzékelőtől, akkor visszatekeri a filmet. A művelet alapján itt a „visszatekerés” vagy a „továbbítás” szót a soros porton keresztül küldjük ki
Most elolvashatja ennek a gesztus által vezérelt PC-nek az oldal végén megadott teljes kódját, és megpróbálhatja alábecsülni egészét, majd átmásolhatja Arduino IDE-jére.
A Python programozása:
A projekt python programja nagyon egyszerű. Csak egy soros kommunikációt kell létrehoznunk az Arduino-val a helyes adatátviteli sebességen keresztül, majd végre kell hajtanunk néhány alapvető billentyűzet műveletet. A python első lépése a p yautogui modul telepítése lenne. Ügyeljen arra, hogy kövesse ezt a lépést, mert a program nem fog működni pyautogui modul nélkül.
A pyautogui modul telepítése a Windows rendszerhez:
A pyautogui telepítéséhez kövesse az alábbi lépéseket. Ha más platformokat használ, akkor a lépések is nagyjából hasonlóak lesznek. Győződjön meg róla, hogy számítógépe / laptopja csatlakozik az internethez, és folytassa az alábbi lépéseket
1. lépés: Nyissa meg a Windows parancssort, és változtassa meg a könyvtárat arra a mappára, ahová a python telepítve van. Alapértelmezés szerint a parancs legyen
cd C: \ Python27
2. lépés: A python könyvtárban használja a python –m pip install –upgrade pip parancsot a pip frissítéséhez. A Pip egy olyan eszköz a pythonban, amely segít a python modulok egyszerű telepítésében. Miután frissítette ezt a modult (az alábbi képen látható módon), folytassa a következő lépéssel.
python –m pip install –upgrade pip
3. lépés: Használja a „ python –m pip install pyautogui ” parancsot a pyautogui modul telepítéséhez. Ha a folyamat sikeres, akkor az alábbihoz hasonló képernyőt kell látnia.
python –m pip install –upgrade pip
Most, hogy a pyautogui modul és a pyserial modul (telepítve az előző oktatóanyagban) sikeresen telepítve van a pythonnal, folytathatjuk a python programmal. A teljes python kódot az oktatóanyag végén adjuk meg, de ennek magyarázata a következő.
Importálja a projekt mindhárom szükséges modulját. Ezek pyautogui, soros python és idő.
# soros importálás soros kommunikációhoz importálás ideje # A késleltetési függvények használatához importáljon pyautogui
Ezután kapcsolatot létesítünk az Arduinóval a COM porton keresztül. Számítógépemen az Arduino csatlakozik a COM 18-hoz. Az Eszközkezelő segítségével keresse meg, melyik COM-porthoz csatlakozik az Arduino, és ennek megfelelően javítsa ki a következő sort.
ArduinoSerial = soros. Serial ('com18', 9600) # Hozzon létre arduinoSerialData time.sleep (2) # soros port objektumot # várjon 2 másodpercet a kommunikáció létrejöttéig
A végtelen, míg hurokban többször meghallgatjuk a COM portot, és összehasonlítjuk a kulcsszavakat minden előre definiált művel, és ennek megfelelően végezzük el a billentyűzet megnyomását.
míg 1: bejövő = str (ArduinoSerial.readline ()) # olvassa el a soros adatokat, és nyomtassa be bejövő sornyomtatásként, ha a bejövő „Lejátszás / Szünet” opció: pyautogui.typewrite (, 0,2), ha a „Visszatekerés” bejövőben: pyautogui. gyorsbillentyű ('ctrl', 'bal'), ha a 'Tovább' bejövőben: pyautogui.hotkey ('ctrl', 'jobb'), ha a 'Vup' bejövőben: pyautogui.hotkey ('ctrl', 'le'), ha ' Vdown 'bejövőben: pyautogui.hotkey (' ctrl ',' fel ')
Mint látható, egy gomb megnyomásához egyszerűen a „pyautogui.typewrite (, 0.2)” parancsot kell használnunk , amely 0,2 másodpercig lenyomja a billentyűt. Ha olyan gyorsbillentyűkre van szüksége, mint a ctrl + S, akkor a gyorsbillentyűkkel a „pyautogui.hotkey ('ctrl', 's') 'parancsot használhatja.
Azért használtam ezeket a kombinációkat, mert a VLC médialejátszón működnek. Bármilyen módon módosíthatja őket, hogy saját alkalmazásokat hozzon létre, hogy a számítógépen bármit vezérelhessen gesztusokkal.
Gesztus által vezérelt számítógép működés közben:
Hozza létre a kapcsolatokat a fentiek szerint, és töltse fel az Arduino kódot az Arduino táblára. Ezután használja az alábbi python szkriptet, és indítsa el a programot laptopján / számítógépén.
Most a VLC médialejátszó segítségével bármilyen filmet lejátszhat a számítógépén, és kezével irányíthatja a filmet, ahogy az az alábbi videóban látható.
Remélem, megértette a projektet, és élvezettel játszott vele. Ez csak egy bemutató, és kreativitásod segítségével sokkal több menő, gesztus által vezérelt dolgot tudsz felépíteni e köré. Mondja meg, hogy ez hasznos volt-e, és mit fog létrehozni ezzel a megjegyzés részben, és örömmel fogom tudni.