- Předpoklady:
- Koncept projektu:
- Kruhový diagram:
- Programování vašeho Arduina:
- Programování vašeho Pythonu:
- Počítač ovládaný gesty v akci:
Notebooky nebo počítače ovládané gesty se v poslední době stávají velmi slavnými. Tato technika se nazývá skokový pohyb, který nám umožňuje ovládat určité funkce na našem počítači / notebooku pouhým mávnutím ruky před ním. Je to velmi cool a zábavné, ale tyto notebooky jsou opravdu velmi drahé. V tomto projektu si tedy zkusme vytvořit vlastní notebook / počítač s ovládáním gesty kombinací síly Arduina a Pythonu.
K určení polohy ruky a ovládání přehrávače médií (VLC) na základě polohy použijeme dva ultrazvukové senzory. Použil jsem to pro demonstraci, ale jakmile pochopíte projekt, můžete udělat cokoli, stačí změnit několik řádků kódu a ovládat svou oblíbenou aplikaci svým oblíbeným způsobem.
Předpoklady:
Už jsme pokryli několik projektů, které kombinují Arduino s Pythonem. Předpokládám tedy, že jste již nainstalovali Python a jeho sériovou knihovnu a úspěšně jste vyzkoušeli několik základních projektů, jako je blikající LED. Pokud ne, nebojte se, můžete se vrátit k tomuto výukovému programu Arduino-Python Led Controlling a vyjít si s ním. Než budete pokračovat, ujistěte se, že máte nainstalovanou knihovnu Python a pyserial.
Koncept projektu:
Koncept projektu je velmi jednoduchý. Na náš monitor umístíme dva ultrazvukové senzory (USA) a pomocí Arduina budeme číst vzdálenost mezi monitorem a naší rukou, na základě této hodnoty vzdálenosti provedeme určité akce. K provádění akcí na našem počítači používáme knihovnu Python pyautogui. Příkazy z Arduina se do počítače odesílají přes sériový port (USB). Tato data pak načte python, který běží na počítači a na základě načtených dat bude provedena akce.
Kruhový diagram:
Chcete-li ovládat počítač gesty rukou, stačí připojit dva ultrazvukové senzory k Arduinu. Víme, že americký senzor pracuje s 5V, a proto jsou napájeny palubním regulátorem napětí Arduino. Arduino lze připojit k PC / notebooku pro napájení modulu a také pro sériovou komunikaci. Po dokončení připojení je umístěte na monitor, jak je znázorněno níže. Nalepil jsem ji na monitor pomocí oboustranné pásky, ale můžete použít svou vlastní kreativitu. Po zajištění na místě můžeme pokračovat v programování.
Programování vašeho Arduina:
Arduino by mělo být naprogramováno tak, aby snímalo vzdálenost ruky od amerického senzoru. Kompletní program je uveden na konci této stránky; těsně níže jsem vysvětlil program. Pokud jste u ultrazvukového senzoru nováčkem, stačí projít měřením vzdálenosti na základě Arduina a ultrazvukového senzoru.
Přečtením hodnoty vzdálenosti můžeme dosáhnout určitých akcí, které mají být ovládány gesty, například v tomto programu jsem naprogramoval 5 akcí jako ukázku.
Akce 1: Pokud jsou obě ruce vztyčené před senzorem v určité vzdálenosti, mělo by se video ve VLC přehrávači přehrát / pozastavit.
Akce 2: Pokud je pravá ruka umístěna před senzorem v určité velké vzdálenosti, mělo by se video o jeden krok převinout vpřed.
Akce 3: Když je levá ruka položena před senzorem ve zvláště velké vzdálenosti, video by se mělo převinout zpět o jeden krok.
Akce 4: Když je pravá ruka umístěna nahoru před senzorem v určité malé vzdálenosti a poté, pokud se pohybuje směrem k senzoru, video by se mělo rychle posunout vpřed a pokud se posune pryč, video by se mělo přetočit zpět.
Akce 5: Když je levá ruka položena před senzorem v určité malé vzdálenosti, a pokud se posune směrem k senzoru, měla by se zvýšit hlasitost videa a pokud se vzdálila, měla by se snížit hlasitost.
Podívejme se, jak je program napsán k provádění výše uvedených akcí. Stejně jako všechny programy tedy začínáme definováním I / O pinů, jak je uvedeno níže. Dva americké senzory jsou připojeny k digitálním pinům 2,3,4 a 5 a jsou napájeny kolíkem + 5V. Spouštěcí piny jsou výstupní piny a piny Echo jsou vstupní piny.
Sériová komunikace mezi Arduinem a pythonem probíhá s přenosovou rychlostí 9600.
const int trigger1 = 2; // Spouštěcí kolík 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); }
Před provedením jakékoli akce musíme pokaždé vypočítat vzdálenost mezi senzorem a rukou. Musíme to tedy udělat mnohokrát, což znamená, že tento kód by měl být použit jako funkce. Napsali jsme funkci s názvem count_distance (), která nám vrátí vzdálenost mezi senzorem a rukou.
/ * ### Funkce pro výpočet vzdálenosti ### * / void count_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (trigger, HIGH); delayMicroseconds (10); digitalWrite (trigger, LOW); time_taken = pulseIn (echo, HIGH); dist = time_taken * 0,034 / 2; if (dist> 50) dist = 50; }
Uvnitř naší hlavní smyčce jsme zkontrolovat hodnotu vzdálenosti a provádět akce uvedené výše. Před tím použijeme dvě proměnné distL a distR, které se aktualizují o aktuální hodnotu vzdálenosti.
vypočítat_vzdálenost (trigger1, echo1); distL = dist; // získat vzdálenost levého snímače vypočítat_vzdálenost (trigger2, echo2); distR = dist; // získejte vzdálenost pravého snímače
Protože známe vzdálenost mezi oběma senzory, můžeme ji nyní porovnat s předdefinovanými hodnotami a dospět k určitým akcím. Například pokud jsou obě ruce umístěny ve vzdálenosti 40 mc, video přehrajeme / pozastavíme. Zde bude prostřednictvím sériového portu odesláno slovo „Přehrát / Pozastavit“
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Detect both hands {Serial.println ("Play / Pause"); zpoždění (500);}
Pokud je před modul umístěna samotná pravá ruka, pak video posuneme vpřed o jeden krok a pokud je levá ruka, přetočíme o jeden krok zpět. Na základě akce bude zde zasláno slovo „Přetočit zpět“ nebo „Vpřed“ přes sériový port
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"); zpoždění (500);}
Nepřátelské podrobné ovládání hlasitosti a sledování používáme jinou metodiku, abychom zabránili falešným spouštěčům. Pro ovládání hlasitosti musíme umístit levou ruku cca. Ve vzdálenosti 15 cm jej můžete buď posunout směrem k senzoru, abyste snížili hlasitost, nebo jej oddálit od senzoru, abyste zvýšili hlasitost. Kód stejné je uveden níže. Na základě akce zde bude prostřednictvím sériového portu vysláno slovo „Vup“ nebo „Vdown“
// Lock Left - Control Mode if (distL> = 13 && distL <= 17) {delay (100); // Doba držení ruky spočítat_vzdálenost (trigger1, echo1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Left Locked"); while (distL <= 40) {vypočítat_vzdálenost (trigger1, echo1); distL = dist; if (distL <10) // Hand push in {Serial.println ("Vup"); delay (300);} if (distL> 20) // Hand vytáhl {Serial.println ("Vdown"); zpoždění (300);}}}}
Stejnou metodu můžeme použít i pro snímač na pravé straně, abychom mohli ovládat stopu videa. To znamená, že pokud posuneme pravou ruku k senzoru, film se rychle posune vpřed a pokud jej posunete od senzoru, film se převine zpět. Na základě akce bude zde zasláno slovo „Přetočit zpět“ nebo „Vpřed“ přes sériový port
Nyní si můžete přečíst celý kód tohoto počítače ovládaného gesty, který je uveden na konci stránky, a zkusit jej podceňovat jako celek a poté jej zkopírovat do svého Arduino IDE.
Programování vašeho Pythonu:
Program python pro tento projekt je velmi jednoduchý. Musíme pouze navázat sériovou komunikaci s Arduinem prostřednictvím správné přenosové rychlosti a poté provést několik základních akcí klávesnice. Prvním krokem s pythonem by byla instalace modulu p yautogui . Nezapomeňte tento krok dodržet, protože program bez modulu pyautogui nebude fungovat.
Instalace modulu pyautogui pro Windows:
Při instalaci pyautogui pro Windows postupujte podle následujících kroků. Pokud používáte jiné platformy, budou kroky také víceméně podobné. Ujistěte se, že je váš počítač / notebook připojen k internetu a pokračujte níže uvedenými kroky
Krok 1: Otevřete příkazový řádek systému Windows a změňte adresář na složku, do které jste nainstalovali python. Ve výchozím nastavení by měl být příkaz
cd C: \ Python27
Krok 2: Uvnitř adresáře pythonu použijte příkaz python –m pip install –upgrade pip pro upgrade vašeho pipu. Pip je nástroj v pythonu, který nám pomáhá snadno instalovat pythonové moduly. Jakmile je tento modul upgradován (jak je znázorněno na obrázku níže), pokračujte dalším krokem.
python –m pip install –upgrade pip
Krok 3: K instalaci modulu pyautogui použijte příkaz „ python –m pip install pyautogui “. Jakmile je proces úspěšný, měli byste vidět obrazovku podobnou této níže.
python –m pip install –upgrade pip
Nyní, když je modul pyautogui a pyseriální modul (nainstalovaný v předchozím tutoriálu) úspěšně nainstalován s pythonem, můžeme pokračovat v programu python. Celý kód pythonu je uveden na konci tohoto tutoriálu, ale jeho vysvětlení je následující.
Importujme všechny tři požadované moduly pro tento projekt. Jsou to pyautogui, sériový python a čas.
import serial #Serial imported for Serial communication import time #Required to use delay functions import pyautogui
Dále navazujeme spojení s Arduino přes COM port. V mém počítači je Arduino připojeno k COM 18. Pomocí správce zařízení zjistěte, ke kterému portu COM je vaše Arduino připojeno, a odpovídajícím způsobem opravte následující řádek.
ArduinoSerial = serial.Serial ('com18', 9600) #Create Serial port object called arduinoSerialData time.sleep (2) #wait 2 seconds for the communication to get established
V nekonečné smyčce while opakovaně posloucháme port COM a porovnáváme klíčová slova s předdefinovanými pracemi a podle toho provádíme lisy na klávesnici.
while 1: incoming = str (ArduinoSerial.readline ()) # načtěte sériová data a vytiskněte je jako příchozí tisk řádku, pokud je při příjmu 'Play / Pause': pyautogui.typewrite (, 0,2) pokud je 'Rewind' v příchozím: pyautogui. klávesová zkratka ('ctrl', 'left'), pokud 'Forward' v příchozím: pyautogui.hotkey ('ctrl', 'right'), pokud 'Vup' v příchozím: pyautogui.hotkey ('ctrl', 'down'), pokud ' Vdown 'in incoming: pyautogui.hotkey (' ctrl ',' up ')
Jak vidíte, ke stisknutí klávesy jednoduše musíme použít příkaz „pyautogui.typewrite (, 0,2)“, který stiskne klávesovou mezeru na 0,2 s. Pokud potřebujete klávesové zkratky jako ctrl + S, můžete použít klávesovou zkratku „pyautogui.hotkey ('ctrl', 's')“.
Použil jsem tyto kombinace, protože fungují na přehrávači médií VLC, můžete je jakýmkoli způsobem vyladit a vytvořit si vlastní aplikace pro ovládání čehokoli v počítači pomocí gest.
Počítač ovládaný gesty v akci:
Proveďte připojení, jak je definováno výše, a nahrajte kód Arduino na svoji desku Arduino. Poté použijte níže uvedený skript pythonu a spusťte program na svém notebooku / počítači.
Nyní můžete na svém počítači přehrávat jakýkoli film pomocí přehrávače médií VLC a ovládat jej pomocí své ruky, jak ukazuje níže uvedené video.
Doufám, že jste projektu porozuměli a rádi jste si s ním hráli. Toto je jen ukázka a můžete pomocí své kreativity vytvořit kolem toho mnohem více skvělých věcí ovládaných gesty. Dejte mi vědět, jestli to bylo užitečné a co pomocí toho vytvoříte v sekci komentářů a já to rád budu vědět.