- Wymagania wstępne
- Schemat obwodu
- Przebieg procesu dla myszy powietrznej
- Programowanie Arduino dla Air Mouse
- Skrypt sterownika Python
- Testowanie myszy Arduino Air
Czy kiedykolwiek zastanawiałeś się, jak nasz świat zmierza w kierunku wciągającej rzeczywistości. Nieustannie poszukujemy nowych sposobów i metod interakcji z naszym otoczeniem za pomocą rzeczywistości wirtualnej, rzeczywistości mieszanej, rzeczywistości rozszerzonej itp. Nowe urządzenia pojawiają się każdego dnia z tymi szybko rozwijającymi się technologiami, aby zaimponować nam swoimi nowymi interaktywnymi technologiami.
Te wciągające technologie są wykorzystywane w grach, działaniach interaktywnych, rozrywce i wielu innych zastosowaniach. W tym samouczku dowiemy się o takiej interaktywnej metodzie, która daje nowy sposób interakcji z systemem zamiast używania nudnej myszy. Nasi maniacy gier muszą wiedzieć, że kilka lat temu firma Nintendo sprzedaje pomysł na interaktywną metodę 3D do interakcji z ich konsolami za pomocą podręcznego kontrolera znanego jako kontroler Wii. Używa akcelerometru do lokalizowania gestów w grze i bezprzewodowego przesyłania ich do systemu. Jeśli chcesz dowiedzieć się więcej o tej technologii, zapoznaj się z ich patentem EP1854518B1, dzięki czemu uzyskasz pełny obraz działania tej technologii.
Zainspirowani tym pomysłem stworzymy „mysz powietrzną”, która będzie współdziałać z systemami po prostu przesuwając konsolę w powietrzu, ale zamiast używać trójwymiarowych odniesień do współrzędnych, będziemy używać tylko dwuwymiarowych odniesień do współrzędnych, więc możemy naśladować działanie myszy komputerowej, ponieważ mysz działa w dwóch wymiarach X i Y.
Koncepcja tej bezprzewodowej myszy powietrznej 3D jest bardzo prosta, użyjemy akcelerometru, aby uzyskać wartość przyspieszenia działań i ruchów myszy powietrznej wzdłuż osi x i y, a następnie w oparciu o wartości akcelerometr będziemy sterować kursorem myszy i wykonywać określone czynności za pomocą sterowników oprogramowania Python uruchomionych na komputerze.
Wymagania wstępne
- Arduino Nano (dowolny model)
- Akcelerometr ADXL335 Moduł
- Moduł Bluetooth HC-05
- Wciskać przyciski
- Komputer z zainstalowanym Pythonem
Aby dowiedzieć się więcej o instalowaniu Pythona na komputerze, zapoznaj się z poprzednim samouczkiem dotyczącym sterowania diodami Arduino-Python.
Schemat obwodu
Aby sterować komputerem za pomocą ruchów dłoni, potrzebujesz akcelerometru, który podaje przyspieszenie wzdłuż osi X i Y, a aby cały system był bezprzewodowy, używany jest moduł Bluetooth do bezprzewodowego przesyłania sygnału do systemu.
Tutaj używany jest akcelerometr ADXL335, jest to moduł trójosiowy oparty na MEMS wyprowadzający przyspieszenie wzdłuż osi X, Y i Z, ale jak powiedziano wcześniej do sterowania myszą, potrzebowalibyśmy tylko przyspieszenia wzdłuż osi X i Y. Dowiedz się więcej o używaniu akcelerometru ADXL335 z Arduino w naszych poprzednich projektach:
- Oparty na Arduino system ostrzegania o wypadkach samochodowych wykorzystujący GPS, GSM i akcelerometr
- Gra w ping ponga z wykorzystaniem Arduino i akcelerometru
- Robot sterowany gestami rąk z akcelerometru przy użyciu Arduino
- Alarm wykrywacza trzęsień ziemi za pomocą Arduino
Tutaj piny Xout i Yout akcelerometru są podłączone do pinów Analog, A0 i A1 Arduino i do przesyłania sygnałów z Arduino do systemu używany jest tutaj moduł Bluetooth HC-05, ponieważ Bluetooth działa na Tx i Rx połączenia pinowe, więc używamy pinów szeregowych oprogramowania D2 i D3. Jest połączony za pomocą portu szeregowego oprogramowania, ponieważ jeśli połączymy Bluetooth ze sprzętowym portem szeregowym i zaczniemy pobierać odczyty przez konsolę Pythona, pokaże się błędy dotyczące niedopasowania szybkości transmisji, ponieważ Bluetooth komunikowałby się z pythonem z własną szybkością transmisji. Dowiedz się więcej o korzystaniu z modułu Bluetooth, przechodząc przez różne projekty oparte na Bluetooth z użyciem różnych mikrokontrolerów, w tym Arduino.
Tutaj użyliśmy trzech przycisków - jeden do uruchamiania myszy Air, a pozostałe dwa do klikania lewym i prawym przyciskiem myszy, jak pokazano na poniższym obrazku:
Przebieg procesu dla myszy powietrznej
Schemat blokowy przedstawia przebieg procesu myszy Air Mouse opartej na Arduino:
1. System stale sprawdza czy mechaniczny spust jest wciśnięty, dopóki nie zostanie wciśnięty, możemy normalnie pracować za pomocą myszy komputerowej.
2. Gdy system wykryje naciśnięcie przycisku, sterowanie myszą zostanie przeniesione do myszy powietrznej.
3. Po naciśnięciu przycisku wyzwalacza system zaczyna przesyłać odczyty myszy do komputera. Odczyt systemowy składa się z odczytów akcelerometru oraz odczytów dla lewego i prawego kliknięcia.
4. Odczyty systemu składają się ze strumienia danych o wielkości 1 bajtu lub 8 bitów, w którym pierwsze trzy bity składają się ze współrzędnych X, drugie trzy bity stanowią współrzędne Y, przedostatni bit jest bitem stanu status lewego kliknięcia myszą, a ostatni bit to bit statusu do uzyskania statusu prawego kliknięcia.
5. Wartość pierwszych trzech bitów, tj. Współrzędnej X, może wynosić od 100 <= Xcord <= 999, podczas gdy wartość współrzędnej Y może wynosić od 100 <= Ycord <= 800. Wartości dla prawego i lewego kliknięcia to wartości binarne 0 lub 1, gdzie 1 oznacza kliknięcie, a 0 to kliknięcie nie zostało wykonane przez użytkownika.
6. Aby nie pozwolić, aby odbicie przycisku wpłynęło na pozycję kursora, po każdym kliknięciu przycisku wyzwalacza myszy utrzymywane jest znane opóźnienie wynoszące 4 sekundy.
7. Aby kliknąć prawym i lewym przyciskiem myszy powietrznej, musimy najpierw nacisnąć lewy lub prawy przycisk, a następnie nacisnąć przycisk spustu, aby przejść do żądanej pozycji myszy powietrznej.
Programowanie Arduino dla Air Mouse
Arduino należy zaprogramować tak, aby odczytywał wartości przyspieszeń w osi X i Y. Kompletny program podany jest na końcu, poniżej są ważne fragmenty z kodem.
Konfigurowanie zmiennych globalnych
Jak wspomniano wcześniej, podłączymy moduł Bluetooth do pinów szeregowych oprogramowania. Aby ustawić numer seryjny oprogramowania, musimy zadeklarować bibliotekę numerów seryjnych oprogramowania i ustawić piny dla Tx i Rx. W Arduino Nano i Uno Pin 2 i 3 mogą pracować jako oprogramowanie szeregowe. Następnie deklarujemy obiekt Bluetooth z biblioteki szeregowej oprogramowania, aby ustawić pin dla Tx i Rx.
#zawierać
Konfiguracja pustki ()
W funkcji konfiguracyjnej ustawimy zmienne, aby powiedzieć programowi, czy będą działać jako dane wejściowe czy wyjściowe. Przycisk wyzwalacza zostałby ustawiony jako podciągnięcie wejścia, a lewy i prawy klik są zadeklarowane jako wejście i ustawione jako Wysokie, aby działały jak podciąganie wejścia.
Ustaw również szybkość transmisji dla komunikacji szeregowej i Bluetooth na 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (wyzwalacz, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, WYJŚCIE); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Pusta pętla ()
Jak musielibyśmy przycisk wyzwalania powiedzieć, kiedy musimy wysłać systemowi strumień danych, więc założyliśmy cały kod wewnątrz while pętli, która będzie stale monitorować stan cyfrowego wyzwalacza pull-up, ponieważ jest niski to będzie przekazać dalej do przetwarzania.
Jak już załączeniu LED do daj nam znać stan systemu w momencie naciśnięcia przycisku wyzwalacza powoduje początkowo ustawić doprowadziły do niskiego poza while pętli, jak to domyślny stan i wysokiej wewnątrz while pętli, która zapala się dioda po każdym naciśnięciu przycisku spustu.
Aby odczytać stan lewego i prawego przycisku kliknięcia, zadeklarowaliśmy globalnie dwie zmienne lclick i rclick, których wartości początkowo były ustawione na 0.
I w pętli ustaw wartości tych zmiennych zgodnie ze stanem cyfrowym lewego i prawego przycisku, aby sprawdzić, czy przyciski są wciśnięte, czy nie.
Odczytujemy wartości pinów X i Y out akcelerometru za pomocą funkcji analogRead i odwzorowujemy te wartości na rozmiar ekranu, aby wskaźnik myszy poruszał się po całym ekranie. Ponieważ rozmiar ekranu to piksele na ekranie, musimy go odpowiednio ustawić, a ponieważ potrzebujemy wartości wyjściowej składającej się z trzech cyfr, celowo ustawiliśmy zakres dla X na 100 <= X <= 999 i podobnie wartość dla Y jako 100 <= Y <= 800. Pamiętaj, że piksele są odczytywane z lewego górnego rogu, czyli lewy górny róg ma wartość (0,0), ale ponieważ zadeklarowaliśmy trzy cyfry dla xiy, nasze wartości byłyby odczytywane z punktu (100,100).
Następnie wydrukuj wartość współrzędnych i status kliknięcia na interfejsie szeregowym i Bluetooth za pomocą funkcji Serial.print i bluetooth.print, które pomagają uzyskać wartości na monitorze szeregowym i systemie przez Bluetooth.
W końcu, z powodu odbicia się przycisku, pojedyncza wartość może się powtórzyć, co spowodowałoby zatrzymanie kursora myszy na jednej pozycji, więc aby się tego pozbyć, musimy dodać to opóźnienie.
void loop () { digitalWrite (led, LOW); while (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogRead (y); xcord = mapa (xh, 286,429,100,999); ycord = mapa (yh, 282,427,100,800); Serial.print (xcord); Serial.print (ycord); if (lstate == LOW) Serial.print (1); else Serial.print (0); if (rstate == LOW) Serial.print (1); else Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); jeszcze bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); else bluetooth.print (0); opóźnienie (4000); }}
Skrypt sterownika Python
Jak na razie zakończyliśmy pracę ze sprzętem i jego częścią oprogramowania układowego, teraz, aby mysz powietrzna działała, musimy mieć skrypt sterownika, który może dekodować sygnały z myszy powietrznej na ruchy kursora, więc do tego wybraliśmy Pyton. Python jest językiem skryptowym i przez pisanie skryptów rozumiemy tutaj, że pomaga nam przejąć kontrolę nad innym programem, tak jak tutaj kontrolujemy kursor myszy.
Otwórz więc powłokę Pythona i zainstaluj następujące biblioteki za pomocą poniższych poleceń:
pip install serial pip install pyautogui
Seryjny jest biblioteką dla Pythona, który pomaga nam uzyskać dane z interfejsów szeregowych, takich jak porty COM, a także pozwala nam manipulować natomiast pyautogui jest biblioteka Pythona, aby uzyskać kontrolę nad funkcji graficznych, w tym przypadku myszy.
Przejdźmy teraz do kodu sterowników, pierwszą rzeczą jaką musimy zrobić to zaimportowanie bibliotek serial i pyautogui, a następnie z biblioteki szeregowej musimy ustawić port COM do komunikacji z prędkością 9600 bodów, tak samo jak Bluetooth.serial działa pod adresem. W tym celu musisz podłączyć moduł Bluetooth do swojego systemu, a następnie w ustawieniach systemu musisz sprawdzić, do którego portu COM jest on podłączony.
Następną rzeczą jest odczytanie komunikacji szeregowej z Bluetooth do systemu i ciągłe utrzymywanie reszty kodu w ciągłej pętli za pomocą while 1.
Jak wspomniano wcześniej, Arduino wysyła 8 bitów, pierwsze 6 dla współrzędnych, a ostatnie dwa dla stanu przycisków kliknięcia. Przeczytaj więc wszystkie bity za pomocą ser.read i ustaw jego długość na 8 bitów.
Następnie podziel bity współrzędnych kursora i kliknięcia, przecinając je, a następnie podziel bity kursora na współrzędne X i Y oddzielnie. To samo dotyczy lewego i prawego kliknięcia.
Teraz z komunikacji otrzymujemy ciąg bajtów i musimy przekonwertować go na liczbę całkowitą, aby pasowały do współrzędnych, robimy to przez dekodowanie ich, a następnie typowanie na liczby całkowite.
Teraz, aby przesunąć kursor, używamy funkcji pyautogui moveto , która przyjmuje jako argumenty te współrzędne całkowite i przesuwa kursor do tej pozycji.
Następnie sprawdzamy kliknięcia, robimy to za pomocą dwóch ostatnich bitów i funkcji click pyautogui, domyślnym kliknięciem jest lewy, jednak możemy ustawić go na prawo, deklarując wartość przycisku w prawo, możemy również zdefiniować liczbę kliknięć do ustaw go na podwójne kliknięcie, ustawiając parametr kliknięć na 2.
Poniżej znajduje się pełny kod Pythona do uruchomienia na komputerze:
import serial import pyautogui ser = serial.Serial ('com3', 9600) while 1: k = ser.read (8) kursor = k kliknij = k x = kursor y = kursor l = kliknij r = kliknij xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) if l == 49: pyautogui.click (kliknięcia = 2) elif r = = 49: pyautogui.click (przycisk = 'w prawo', kliknięcia = 2)
Testowanie myszy Arduino Air
Aby więc obsługiwać mysz Air Mouse, podłącz do niej źródło zasilania. Może pochodzić z gniazda Arduino Nano USB lub z zasilacza regulowanego 5 V przy użyciu układu 7805. Następnie uruchom skrypt sterownika Pythona, ustawiając port com, do którego jest podłączony Bluetooth. Gdy skrypt działa, zobaczysz opóźnienie w miganiu Bluetooth, co oznacza, że jest podłączony do twojego systemu. Następnie, aby go obsługiwać, kliknij przycisk spustu, a zobaczysz, że położenie współrzędnych zmieni się, a jeśli chcesz kliknąć lewym lub prawym przyciskiem myszy, najpierw naciśnij razem lewy lub prawy przycisk i przycisk spustu, zobaczysz akcję kliknięcia na zmieniona lokalizacja kursora.
Sprawdź szczegółowe wideo robocze poniżej.