- Wymagania wstępne:
- Koncepcja projektu:
- Schemat obwodu:
- Programowanie Arduino:
- Programowanie Pythona:
- Komputer sterowany gestami w akcji:
Ostatnio bardzo popularne stają się laptopy lub komputery sterowane za pomocą gestów. Ta technika nazywa się ruchem wyskoku, która umożliwia nam kontrolowanie niektórych funkcji na naszym komputerze / laptopie, po prostu machając przed nim ręką. Jest to bardzo fajne i przyjemne, ale te laptopy są naprawdę bardzo drogie. W tym projekcie spróbujmy więc zbudować własny laptop / komputer sterujący gestami, łącząc moc Arduino i Pythona.
Użyjemy dwóch czujników ultradźwiękowych do określenia pozycji naszej dłoni i sterowania odtwarzaczem multimedialnym (VLC) na podstawie pozycji. Użyłem tego do demonstracji, ale kiedy już zrozumiesz projekt, możesz zrobić wszystko, po prostu zmieniając kilka linii kodu i kontrolując swoją ulubioną aplikację w swój ulubiony sposób.
Wymagania wstępne:
Omówiliśmy już kilka projektów, które łączą Arduino z Pythonem. Zakładam więc, że masz już zainstalowany Python i jego bibliotekę szeregową i pomyślnie wypróbowałeś kilka podstawowych projektów, takich jak migająca dioda LED. Jeśli nie, nie martw się, możesz wrócić do tego samouczka Arduino-Python Led Controlling i dogadać się z nim. Dlatego przed kontynuowaniem upewnij się, że masz zainstalowany język Python i bibliotekę pyserial.
Koncepcja projektu:
Koncepcja projektu jest bardzo prosta. Na naszym monitorze umieścimy dwa czujniki ultradźwiękowe (US) i za pomocą Arduino odczytujemy odległość między monitorem a naszą ręką, na podstawie tej wartości odległości wykonamy określone czynności. Do wykonywania akcji na naszym komputerze używamy biblioteki Python pyautogui. Rozkazy z Arduino przesyłane są do komputera przez port szeregowy (USB). Dane te zostaną następnie odczytane przez Pythona uruchomionego na komputerze i na podstawie odczytanych danych zostanie wykonana akcja.
Schemat obwodu:
Aby sterować komputerem za pomocą gestów dłoni, wystarczy podłączyć dwa czujniki ultradźwiękowe do Arduino. Wiemy, że amerykańskie czujniki pracują z napięciem 5 V i dlatego są zasilane przez wbudowany regulator napięcia Arduino. Arduino można podłączyć do komputera PC / laptopa w celu zasilania modułu, a także komunikacji szeregowej. Po wykonaniu połączeń umieść je na monitorze, jak pokazano poniżej. Użyłem taśmy dwustronnej do przyklejenia go do monitora, ale możesz użyć własnej kreatywności. Po zabezpieczeniu go w odpowiednim miejscu możemy przystąpić do programowania.
Programowanie Arduino:
Arduino należy zaprogramować tak, aby odczytywało odległość ręki od czujnika US. Kompletny program jest podany na końcu tej strony; poniżej podałem wyjaśnienie programu. Jeśli nie masz doświadczenia z czujnikiem ultradźwiękowym, po prostu przejdź przez pomiar odległości oparty na Arduino i czujniku ultradźwiękowym.
Odczytując wartość odległości możemy dojść do pewnych działań, którymi można sterować za pomocą gestów, na przykład w tym programie zaprogramowałem 5 akcji jako demo.
Działanie 1: Gdy obie ręce są umieszczone przed czujnikiem w określonej odległości, wideo w odtwarzaczu VLC powinno odtwarzać / wstrzymywać.
Działanie 2: Gdy prawa ręka jest umieszczona przed czujnikiem w określonej odległości, film powinien przewinąć do przodu o jeden krok.
Działanie 3: Gdy lewa ręka jest umieszczona przed czujnikiem w określonej odległości, wideo powinno przewinąć się o jeden krok.
Działanie 4: Gdy prawa ręka zostanie umieszczona przed czujnikiem w określonej bliskiej odległości, a następnie jeśli zostanie przesunięta w kierunku czujnika, wideo powinno przewinąć się do przodu, a jeśli zostanie odsunięte, powinno się przewinąć do tyłu.
Działanie 5: Kiedy lewa ręka zostanie umieszczona przed czujnikiem w określonej bliskiej odległości, a następnie jeśli zostanie przesunięta w kierunku czujnika, głośność obrazu powinna wzrosnąć, a jeśli zostanie odsunięta, głośność powinna się zmniejszyć.
Zobaczmy, jak napisano program do wykonywania powyższych czynności. Tak więc, podobnie jak wszystkie programy, zaczynamy od zdefiniowania pinów I / O, jak pokazano poniżej. Dwa czujniki US są podłączone do cyfrowych pinów 2,3,4 i 5 i są zasilane przez pin + 5V. Piny wyzwalające są pinami wyjściowymi, a piny Echo są pinami wejściowymi.
Komunikacja szeregowa między Arduino i Pythonem odbywa się z szybkością transmisji 9600.
const int trigger1 = 2; // Styk wyzwalający pierwszego Sesnora const int echo1 = 3; // Pin echa pierwszego sygnału Sesnor const int trigger2 = 4; // Pin wyzwalacza drugiego Sesnor const int echo2 = 5; // Pin echa drugiego Sesnor void setup () {Serial.begin (9600); pinMode (trigger1, OUTPUT); pinMode (echo1, INPUT); pinMode (trigger2, OUTPUT); pinMode (echo2, INPUT); }
Za każdym razem musimy obliczyć odległość między czujnikiem a ręką przed zakończeniem jakiejkolwiek czynności. Musimy więc to robić wiele razy, co oznacza, że ten kod powinien być używany jako funkcja. Napisaliśmy funkcję o nazwie calc_distance (), która zwróci nam odległość między czujnikiem a ręką.
/ * ### Funkcja do obliczania odległości ### * / void calc_distance (int trigger, int echo) {digitalWrite (trigger, LOW); delayMicroseconds (2); digitalWrite (wyzwalacz, WYSOKI); delayMicroseconds (10); digitalWrite (wyzwalacz, LOW); time_taken = pulseIn (echo, HIGH); dist = czas_ zajęty * 0,034 / 2; if (dist> 50) dist = 50; }
Wewnątrz głównej pętli możemy sprawdzić wartości odległości i wykonaj czynności wymienione powyżej. Wcześniej używamy dwóch zmiennych distL i distR, które są aktualizowane o aktualną wartość odległości.
oblicz_odległość (wyzwalacz1, echo1); distL = dist; // pobierz odległość lewego czujnika oblicz_odległość (wyzwalacz2, echo2); distR = dist; // pobierz odległość prawego czujnika
Ponieważ znamy odległość między oboma czujnikami, możemy teraz porównać ją z predefiniowanymi wartościami i dojść do określonych działań. Na przykład, jeśli obie ręce są umieszczone w odległości 40 mc, to odtwarzamy / zatrzymujemy wideo. Tutaj słowo „Play / Pause” zostanie wysłane przez port szeregowy
if ((distL> 40 && distR> 40) && (distL <50 && distR <50)) // Wykryj obie ręce {Serial.println ("Play / Pause"); opóźnienie (500);}
Jeśli tylko prawa ręka jest umieszczona przed modułem, przewijamy wideo do przodu o jeden krok, a jeśli jest to lewa ręka, przewijamy do tyłu o jeden krok. W zależności od akcji, tutaj przez port szeregowy zostanie wysłane słowo „Rewind” lub „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"); opóźnienie (500);}
W celu szczegółowej kontroli głośności i śledzenia używamy innej metodologii, aby zapobiec fałszywym wyzwalaczom. Aby regulować głośność, lewą rękę musimy ustawić ok. W odległości 15 cm możesz przesunąć go w stronę czujnika, aby zmniejszyć głośność lub odsunąć go od czujnika, aby zwiększyć głośność. Kod tego samego jest pokazany poniżej. W oparciu o akcję, tutaj słowo „Vup” lub „Vdown” zostanie wysłane przez port szeregowy
// Zablokuj w lewo - Tryb sterowania if (distL> = 13 && distL <= 17) {delay (100); // Czas trzymania ręki oblicz_odległość (trigger1, echo1); distL = dist; if (distL> = 13 && distL <= 17) {Serial.println ("Left Locked"); while (distL <= 40) {oblicz_odległość (wyzwalacz1, echo1); distL = dist; if (distL <10) // Hand wepchnięty {Serial.println ("Vup"); delay (300);} if (distL> 20) // Wyciągnięty ręcznie {Serial.println ("Vdown"); opóźnienie (300);}}}}
Możemy użyć tej samej metody dla prawego czujnika bocznego, aby kontrolować ścieżkę wideo. To znaczy, jeśli przesuniemy prawą rękę w stronę sensora, film będzie przewijał się do przodu, a jeśli odsuniemy go od sensora, film przewinie się do tyłu. W zależności od akcji, tutaj przez port szeregowy zostanie wysłane słowo „Rewind” lub „Forward”
Możesz teraz przeczytać cały kod dla tego komputera sterowanego gestami podany na końcu strony i spróbować zinterpretować go jako całość, a następnie skopiować go do swojego Arduino IDE.
Programowanie Pythona:
Program w Pythonie dla tego projektu jest bardzo prosty. Musimy tylko nawiązać komunikację szeregową z Arduino poprzez odpowiednią prędkość transmisji, a następnie wykonać kilka podstawowych czynności klawiatury. Pierwszym krokiem w Pythonie byłoby zainstalowanie modułu p yautogui . Upewnij się, że wykonałeś ten krok, ponieważ program nie będzie działał bez modułu pyautogui.
Instalowanie modułu pyautogui dla Windows:
Wykonaj poniższe czynności, aby zainstalować pyautogui dla systemu Windows. Jeśli korzystasz z innych platform, kroki również będą mniej więcej podobne. Upewnij się, że komputer / laptop jest podłączony do Internetu i wykonaj poniższe czynności
Krok 1: Otwórz wiersz polecenia systemu Windows i zmień katalog na folder, w którym zainstalowałeś Pythona. Domyślnie polecenie powinno mieć postać
cd C: \ Python27
Krok 2: W katalogu Pythona użyj polecenia python –m pip install –upgrade pip, aby zaktualizować pip. Pip to narzędzie w Pythonie, które pomaga nam łatwo instalować moduły Pythona. Po zaktualizowaniu tego modułu (jak pokazano na poniższym obrazku) przejdź do następnego kroku.
python –m pip install –upgrade pip
Krok 3: Użyj polecenia „ python –m pip install pyautogui ”, aby zainstalować moduł pyautogui. Po pomyślnym zakończeniu procesu powinieneś zobaczyć ekran podobny do tego poniżej.
python –m pip install –upgrade pip
Teraz, gdy moduł pyautogui i moduł pyserial (zainstalowane w poprzednim samouczku) zostały pomyślnie zainstalowane z pythonem, możemy przejść do programu python. Kompletny kod python jest podana na końcu tutorialu ale wyjaśnienie to samo jest w następujący sposób.
Zaimportujmy wszystkie trzy wymagane moduły dla tego projektu. Są to pyautogui, seryjny python i czas.
import serial #Serial importowany dla czasu importu komunikacji szeregowej #Wymagane do użycia funkcji opóźnienia import pyautogui
Następnie nawiązujemy połączenie z Arduino przez port COM. W moim komputerze Arduino jest podłączone do COM 18. Użyj menedżera urządzeń, aby znaleźć, do którego portu COM jest podłączone twoje Arduino i odpowiednio popraw następującą linię.
ArduinoSerial = serial.Serial ('com18', 9600) # Utwórz obiekt portu szeregowego o nazwie arduinoSerialData time.sleep (2) # poczekaj 2 sekundy na nawiązanie komunikacji
Wewnątrz nieskończonej podczas pętli, mamy wielokrotnie słuchać do portu COM i porównać słów kluczowych wszelkich wstępnie przeciwstawił prac i uczynić naciśnięć przycisków komisji.
while 1: incoming = str (ArduinoSerial.readline ()) # wczytaj dane szeregowe i wydrukuj je jako line print incoming if 'Play / Pause' in incoming: pyautogui.typewrite (, 0.2) if 'Rewind' in incoming: pyautogui. hotkey ('ctrl', 'left') if 'Forward' in incoming: pyautogui.hotkey ('ctrl', 'right') if 'Vup' in incoming: pyautogui.hotkey ('ctrl', 'down') if ' Vdown 'w przychodzącym: pyautogui.hotkey (' ctrl ',' up ')
Jak widać, aby nacisnąć klawisz, musimy po prostu użyć polecenia „pyautogui.typewrite (, 0.2)”, co spowoduje naciśnięcie spacji klawiszowej przez 0,2 sekundy. Jeśli potrzebujesz klawiszy skrótu, takich jak ctrl + S, możesz użyć polecenia skrótu „pyautogui.hotkey ('ctrl', 's')”.
Użyłem tych kombinacji, ponieważ działają one na odtwarzaczu multimedialnym VLC, możesz je modyfikować w dowolny sposób, aby tworzyć własne aplikacje do sterowania wszystkim na komputerze za pomocą gestów.
Komputer sterowany gestami w akcji:
Wykonaj połączenia zgodnie z powyższą definicją i prześlij kod Arduino na swoją płytę Arduino. Następnie użyj poniższego skryptu Pythona i uruchom program na swoim laptopie / komputerze.
Teraz możesz odtworzyć dowolny film na komputerze za pomocą odtwarzacza multimedialnego VLC i sterować nim ręką, jak pokazano na poniższym filmie.
Mam nadzieję, że zrozumiałeś projekt i bawiłeś się nim. To tylko wersja demonstracyjna i możesz użyć swojej kreatywności, aby stworzyć o wiele więcej fajnych elementów sterowanych gestami. Daj mi znać, czy to było przydatne i co stworzysz za pomocą tego w sekcji komentarzy, a będę szczęśliwy, że to wiem.