- Predpoklady:
- Koncepcia projektu:
- Schéma zapojenia:
- Programovanie vášho Arduina:
- Programovanie vášho Pythonu:
- Počítač riadený gestami v akcii:
V poslednej dobe sú veľmi známe notebooky alebo počítače ovládané gestami. Táto technika sa nazýva Skok v pohybe, ktorý nám umožňuje ovládať určité funkcie na našom počítači / notebooku jednoduchým mávnutím ruky pred ním. Robiť to je veľmi cool a zábavné, ale tieto notebooky majú skutočne veľmi vysokú cenu. V tomto projekte si teda skúsme zostaviť vlastný laptop / počítač s ovládaním gestami kombináciou výkonu Arduino a Python.
Pomocou dvoch ultrazvukových senzorov určíme polohu našej ruky a na základe polohy budeme ovládať prehrávač médií (VLC). Použil som to na ukážku, ale keď pochopíte projekt, môžete urobiť čokoľvek, stačí zmeniť pár riadkov kódu a ovládať obľúbenú aplikáciu obľúbeným spôsobom.
Predpoklady:
Už sme sa venovali niekoľkým projektom, ktoré kombinujú Arduino a Python. Takže predpokladám, že ste si už nainštalovali Python a jeho sériovú knižnicu a úspešne ste vyskúšali niekoľko základných projektov, ako je blikanie LED. Ak nie, nebojte sa, môžete sa vrátiť k tomuto výukovému programu Arduino-Python Led Controlling a vychádzať s ním. Pred pokračovaním sa teda uistite, že máte nainštalovanú knižnicu Python a pyserial.
Koncepcia projektu:
Koncept, ktorý stojí za projektom, je veľmi jednoduchý. Na náš monitor umiestnime dva ultrazvukové (US) snímače a pomocou Arduina budeme čítať vzdialenosť medzi monitorom a našou rukou, na základe tejto hodnoty vzdialenosti vykonáme určité akcie. Na vykonávanie akcií na našom počítači používame knižnicu Python pyautogui. Príkazy z Arduina sa do počítača odosielajú cez sériový port (USB). Tieto údaje potom načíta python, ktorý je spustený na počítači a na základe načítaných údajov sa vykoná akcia.
Schéma zapojenia:
Ak chcete počítač ovládať gestami ruky, jednoducho pripojte dva ultrazvukové senzory k Arduinu. Vieme, že americký senzor pracuje s 5V, a preto sú napájané z palubného regulátora napätia Arduino. Arduino je možné pripojiť k PC / notebooku na napájanie modulu a tiež na sériovú komunikáciu. Po dokončení pripojení ich umiestnite na monitor, ako je to znázornené nižšie. Prilepil som ho na monitor pomocou obojstrannej pásky, ale môžete použiť svoju vlastnú kreativitu. Po zaistení na mieste môžeme pokračovať v programovaní.
Programovanie vášho Arduina:
Arduino by malo byť naprogramované tak, aby snímalo vzdialenosť ruky od amerického snímača. Kompletný program je uvedený na konci tejto stránky; hneď nižšie som uviedol vysvetlenie programu. Ak ste v oblasti ultrazvukového senzora nováčikom, stačí prejsť meraním vzdialenosti na základe Arduina a ultrazvukového senzora.
Čítaním hodnoty vzdialenosti môžeme dospieť k určitým akciám, ktoré sa majú ovládať gestami, napríklad v tomto programe som naprogramoval 5 akcií ako ukážku.
Akcia 1: Keď sú obe ruky hore pred snímačom v príliš veľkej vzdialenosti, malo by sa video vo VLC prehrávači prehrať / pozastaviť.
Akcia 2: Keď je pravá ruka položená pred snímačom v obzvlášť veľkej vzdialenosti, malo by sa video posunúť o jeden krok dopredu.
Akcia 3: Ak je ľavá ruka položená pred snímačom v obzvlášť veľkej vzdialenosti, malo by sa video vrátiť o jeden krok dozadu.
Akcia 4: Keď je pravá ruka položená pred snímačom v obzvlášť blízkej vzdialenosti a potom, ak sa pohybuje smerom k senzoru, video by sa malo rýchlo posúvať dopredu a ak sa pohybuje preč, video by sa malo pretočiť späť.
Akcia 5: Keď je ľavá ruka položená pred snímačom v obzvlášť blízkej vzdialenosti a potom, ak sa pohybuje smerom k snímaču, mala by sa zvýšiť hlasitosť videa a ak sa posuniete preč, mala by sa znížiť hlasitosť.
Pozrime sa, ako je program napísaný na vykonávanie vyššie uvedených akcií. Tak ako všetky programy, aj tu začíname definovaním I / O pinov, ako je uvedené nižšie. Dva americké senzory sú pripojené k digitálnym pinom 2,3,4 a 5 a sú napájané kolíkom + 5V. Spúšťacie piny sú výstupné piny a piny Echo sú vstupné piny.
Sériová komunikácia medzi Arduinom a pythonom prebieha pri prenosovej rýchlosti 9600.
const int trigger1 = 2; // Trigger pin 1. Sesnor const int echo1 = 3; // Echo pin 1. Sesnor const int trigger2 = 4; // Trigger pin 2. Sesnor const int echo2 = 5; // Echo pin 2. Sesnor void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Pred vykonaním akejkoľvek akcie musíme zakaždým vypočítať vzdialenosť medzi senzorom a rukou. Musíme to teda urobiť mnohokrát, čo znamená, že tento kód by sa mal použiť ako funkcia. Napísali sme funkciu s názvom count_distance (), ktorá nám vráti vzdialenosť medzi snímačom a rukou.
/ * ### Funkcia na výpočet vzdialenosti ### * / void count_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (spúšťač, VYSOKÝ); delayMicroseconds (10); digitalWrite (trigger, LOW); time_taken = pulseIn (echo, HIGH); dist = time_taken * 0,034 / 2; if (dist> 50) dist = 50; }
Vnútri našej hlavnej slučke sme skontrolovať hodnotu vzdialenosti a vykonávať akcie uvedené vyššie. Predtým použijeme dve premenné distL a distR, ktoré sa aktualizujú o aktuálnu hodnotu vzdialenosti.
vypočítať_vzdialenosť (trigger1, echo1); distL = dist; // získať vzdialenosť ľavého snímača vypočítať_vzdialenosť (trigger2, echo2); distR = dist; // získať vzdialenosť pravého snímača
Pretože poznáme vzdialenosť medzi oboma senzormi, môžeme ju teraz porovnať s preddefinovanými hodnotami a dospieť k určitým akciám. Napríklad, ak sú obe ruky umiestnené vo vzdialenosti 40 mc, video prehráme / pozastavíme. Sem sa prostredníctvom sériového portu odošle slovo „Prehrať / Pozastaviť“
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Detect both hands {Serial.println ("Play / Pause"); oneskorenie (500);}
Ak je pred modul umiestnená samotná pravá ruka, video rýchlo posunieme vpred o jeden krok a ak je ľavá ruka, pretočíme späť o jeden krok. Na základe akcie bude tu prostredníctvom sériového portu odoslané slovo „Rewind“ alebo „Forward“
if ((distL> 40 && distL <50) && (distR == 50)) // Detect Left Hand {Serial.println ("Rewind"); delay (500);} if ((distR> 40 && distR <50) && (distL == 50)) // Detect Right Hand {Serial.println ("Forward"); oneskorenie (500);}
Nepriateľ podrobne kontroluje hlasitosť a stopu, používame inú metodiku, aby sme zabránili falošným spúšťačom. Na reguláciu hlasitosti musíme položiť ľavú ruku cca. Vo vzdialenosti 15 cm ho potom môžete posunúť smerom k senzoru, aby ste znížili hlasitosť, a posunutím smerom od senzora zvýšiť hlasitosť. Kód rovnakého kódu je uvedený nižšie. Na základe akcie bude tu prostredníctvom sériového portu odoslané slovo „Vup“ alebo „Vdown“
// Lock Left - Control Mode if (distL> = 13 && distL <= 17) {delay (100); // Doba držania v ruke výpočet_vzdialenosť (trigger1, echo1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Left Locked"); while (distL <= 40) {vypočítať_vzdialenosť (trigger1, echo1); distL = dist; if (distL <10) // Ručné zasunutie {Serial.println ("Vup"); delay (300);} if (distL> 20) // Ruka vytiahnutá {Serial.println ("Vdown"); meškanie (300);}}}}
Rovnakú metódu môžeme použiť aj pre pravý snímač, aby sme riadili stopu videa. To znamená, že ak posunieme pravú ruku k senzoru, film sa rýchlo posunie dopredu a ak ho posuniete ďalej od senzora, film sa posunie dozadu. Na základe akcie bude tu prostredníctvom sériového portu odoslané slovo „Rewind“ alebo „Forward“
Teraz si môžete prečítať kompletný kód pre tento počítač s ovládaním gestami uvedený na konci stránky a pokúsiť sa mu porozumieť ako celku a potom ho skopírovať do svojho Arduino IDE.
Programovanie vášho Pythonu:
Program python pre tento projekt je veľmi jednoduchý. Musíme len nadviazať sériovú komunikáciu s Arduinom prostredníctvom správnej prenosovej rýchlosti a potom vykonať niekoľko základných činností klávesnice. Prvým krokom v prípade pythonu by bola inštalácia modulu p yautogui . Určite postupujte podľa tohto kroku, pretože program nebude fungovať bez modulu pyautogui.
Inštalácia modulu pyautogui pre Windows:
Podľa nasledujúcich pokynov nainštalujete program pyautogui pre Windows. Ak používate iné platformy, kroky budú tiež viac-menej podobné. Uistite sa, že je váš počítač / notebook pripojený k internetu a postupujte podľa krokov uvedených nižšie
Krok 1: Otvorte príkazový riadok systému Windows a zmeňte adresár na priečinok, do ktorého ste nainštalovali python. Predvolene by mal byť príkaz
cd C: \ Python27
Krok 2: Vo vnútri svojho adresára python použite príkaz python –m pip install –upgrade pip na aktualizáciu vášho pipu . Pip je nástroj v pythone, ktorý nám pomáha ľahko nainštalovať moduly pythonu. Po aktualizácii tohto modulu (ako je znázornené na obrázku nižšie) pokračujte ďalším krokom.
python –m pip install –upgrade pip
Krok 3: Pomocou príkazu „ python –m pip install pyautogui “ nainštalujte modul pyautogui. Akonáhle je proces úspešný, mali by ste vidieť obrazovku podobnú tejto nižšie.
python –m pip install –upgrade pip
Teraz, keď sú modul pyautogui a pyseriálny modul (nainštalované v predchádzajúcom tutoriáli) úspešne nainštalované s pythonom , môžeme pokračovať v programe python. Kompletné python kód je uvedený na konci tohto výukového programu, ale vysvetlenie pre rovnaké je nasledujúci.
Dovoľte nám importovať všetky tri požadované moduly pre tento projekt. Sú to pyautogui, sériový pytón a čas.
import serial #Serial imported for Serial communication import time #Required to use delay functions import pyautogui
Ďalej nadviažeme spojenie s Arduinom cez port COM. V mojom počítači je Arduino pripojené k COM 18. Pomocou správcu zariadení vyhľadajte, ku ktorému portu COM je vaše Arduino pripojené, a podľa toho opravte nasledujúci riadok.
ArduinoSerial = serial.Serial ('com18', 9600) # Vytvorte objekt sériového portu s názvom arduinoSerialData time.sleep (2) # počkajte 2 sekundy, aby sa nadviazala komunikácia
Vo vnútri nekonečnej while smyčky opakovane počúvame port COM a porovnávame kľúčové slová s akýmikoľvek preddefinovanými dielami a podľa toho tlačíme na klávesové skratky.
zatiaľ čo 1: incoming = str (ArduinoSerial.readline ()) # načíta sériové údaje a vytlačí ich ako riadkový tlač prichádzajúcich, ak je pri prehrávaní „Play / Pause“: pyautogui.typewrite (, 0,2), ak je „pretočiť“ v prichádzajúcom: pyautogui. klávesová skratka ('ctrl', 'vľavo'), ak je 'Vpred' pri prichádzajúcom: pyautogui.hotkey ('ctrl', 'vpravo'), ak 'Vup' v prichádzajúcom: pyautogui.hotkey ('ctrl', 'dole'), ak ' Vdown 'in incoming: pyautogui.hotkey (' ctrl ',' up ')
Ako vidíte, na stlačenie klávesu musíme jednoducho použiť príkaz „pyautogui.typewrite (, 0,2)“, ktorý stlačí medzeru na 0,2 sekundy. Ak potrebujete klávesové skratky ako ctrl + S, môžete použiť príkaz klávesovej skratky „pyautogui.hotkey ('ctrl', 's')“.
Tieto kombinácie som použil, pretože fungujú na prehrávači médií VLC, kde ich môžete ľubovoľne upravovať a vytvárať svoje vlastné aplikácie na ovládanie všetkého v počítači pomocou gest.
Počítač riadený gestami v akcii:
Vytvorte pripojenia, ako je definované vyššie, a nahrajte kód Arduino na svoju dosku Arduino. Potom použite nižšie uvedený skript pythonu a spustite program na svojom notebooku / počítači.
Teraz môžete prehrať akýkoľvek film na počítači pomocou prehrávača médií VLC a ovládať ho pomocou ruky tak, ako je to znázornené na videu uvedenom nižšie.
Dúfam, že ste projektu porozumeli a radi ste sa s ním hrali. Toto je iba ukážka a môžete pomocou svojej kreativity vytvoriť okolo toho oveľa viac skvelých vecí ovládaných gestami. Dajte mi vedieť, či to bolo užitočné a čo vytvoríte pomocou tohto postupu v sekcii komentárov a budem rád, keď sa to dozviem.