- Předpoklady
- Kruhový diagram
- Procesní proudění pro vzduchovou myš
- Programování Arduina pro Air Mouse
- Skript ovladače Pythonu
- Testování Arduino Air Mouse
Už jste někdy přemýšleli, jak náš svět směřuje k pohlcující realitě. Neustále hledáme nové způsoby a metody interakce s okolím pomocí virtuální reality, smíšené reality, rozšířené reality atd. S těmito rychlými stimulačními technologiemi každý den vycházejí nová zařízení, která na nás zapůsobí svými novými interaktivními technologiemi.
Tyto pohlcující technologie se používají při hraní her, interaktivních činnostech, zábavě a mnoha dalších aplikacích. V tomto tutoriálu budeme vědět o takové interaktivní metodě, která vám poskytne nový způsob interakce s vaším systémem namísto použití nudné myši. Naši herní nadšenci musí vědět, že před několika lety herní společnost Nintendo prodala myšlenku 3D interaktivní metody interakce se svými konzolami pomocí ručního ovladače známého jako ovladač Wii. Využívá akcelerometr k vyhledání vašich gest pro hru a k bezdrátovému odeslání do systému. Pokud se chcete o této technologii dozvědět více, můžete si prohlédnout jejich patent EP1854518B1, který vám poskytne úplnou představu o tom, jak tato technologie funguje.
Inspirovaný touto myšlenkou uděláme „vzdušnou myš“, abychom mohli komunikovat se systémy pouhým pohybem konzoly ve vzduchu, ale místo použití trojrozměrných souřadnicových odkazů použijeme pouze dvourozměrné souřadnicové odkazy, takže můžeme napodobovat akce počítačové myši, protože myš pracuje ve dvou dimenzích X a Y.
Koncept této bezdrátové 3D Air Mouse je velmi jednoduchý, použijeme akcelerometr k získání hodnoty zrychlení akcí a pohybů „Air mouse“ podél osy x a y, a poté na základě hodnot akcelerometr ovládáme kurzor myši a provádíme určité akce pomocí softwarových ovladačů pythonu běžících na počítači.
Předpoklady
- Arduino Nano (jakýkoli model)
- Modul akcelerometru ADXL335
- Modul Bluetooth HC-05
- Tlačítka
- Počítač nainstalovaný v Pythonu
Chcete-li se dozvědět více o instalaci pythonu do počítače, postupujte podle předchozího kurzu o ovládání LED Arduino-Python.
Kruhový diagram
Chcete-li ovládat počítač pohyby rukou, potřebujete akcelerometr, který udává zrychlení podél os X a Y. Aby byl celý systém bezdrátový, používá se k bezdrátovému přenosu signálu do vašeho systému modul Bluetooth.
Zde se používá akcelerometr ADXL335, je to modul trojité osy založený na MEMS, který vydává zrychlení podél os X, Y a Z, ale jak již bylo řečeno pro ovládání myši, potřebovali bychom pouze zrychlení pouze podél os X a Y. Zjistěte více o použití akcelerometru ADXL335 s Arduinem v našich předchozích projektech:
- Arduino systém varování před nehodami vozidel pomocí GPS, GSM a akcelerometru
- Ping Pong Game pomocí Arduina a akcelerometru
- Robot řízený gesty pomocí akcelerometru pomocí Arduina
- Alarm detektoru zemětřesení pomocí Arduina
Zde jsou kolíky akcelerometru Xout a Yout připojeny k pinům Analog, A0 a A1 Arduina a pro přenos signálů z Arduina do systému se zde používá modul Bluetooth HC-05, protože Bluetooth funguje přes Tx a Rx pinová připojení, takže používáme softwarové sériové piny D2 a D3. Je připojen pomocí sériového softwaru, protože pokud připojíme Bluetooth k hardwarovému sériovému rozhraní a začneme načítat hodnoty přes konzolu pythonu, zobrazilo by chyby pro nesouladovou přenosovou rychlost, protože Bluetooth by komunikoval s pythonem na vlastní přenosovou rychlost. Zjistěte více o používání modulu Bluetooth procházením různých projektů založených na technologii Bluetooth pomocí různých mikrokontrolérů, včetně Arduina.
Zde jsme použili tři tlačítka - jedno pro spuštění myši Air a další dvě pro levé a pravé kliknutí, jak je znázorněno na následujícím obrázku:
Procesní proudění pro vzduchovou myš
Vývojový diagram ukazuje procesní tok Air Mouse založené na Arduinu:
1. Systém průběžně kontroluje stisknutí mechanické spoušť, dokud není stisknuto, takže můžeme běžně pracovat s počítačovou myší.
2. Když systém detekuje stisknutí tlačítka, ovládací prvek myši se přenese na vzdušnou myš.
3. Jakmile stisknete tlačítko spouště, systém začne přenášet naměřené hodnoty myši do počítače. Čtení systému se skládá z údajů akcelerometru a údajů pro levé a pravé kliknutí.
4. Čtení systému se skládají z datového proudu 1 bajt nebo 8 bitů, ve kterém první tři bity sestávají ze souřadnic X, druhé tři bity sestávají ze souřadnic Y, druhý poslední bit je stavový bit pro získání stav levého kliknutí myši a poslední bit je stavový bit pro získání stavu pravého kliknutí.
5. Hodnota prvních tří bitů, tj. Souřadnice X, se může pohybovat od 100 <= Xcord <= 999, zatímco hodnota souřadnice Y se může pohybovat od 100 <= Ycord <= 800. Hodnoty pro pravé a levé kliknutí jsou binární hodnoty 0 nebo 1, kde 1 označuje, že došlo ke kliknutí a 0, že kliknutí neprovede uživatel.
6. Aby odražení tlačítka nemělo vliv na polohu kurzoru, je po každém kliknutí spouštěcího tlačítka myši zachováno známé zpoždění 4 sekundy.
7. U pravého a levého kliknutí ve vzdušné myši musíme nejprve stisknout levé nebo pravé tlačítko a poté stisknout spoušť, abychom se přesunuli do polohy vzdušné myši, kam chceme.
Programování Arduina pro Air Mouse
Arduino by mělo být naprogramováno na čtení hodnot zrychlení v ose X a Y. Kompletní program je uveden na konci, dále jsou důležité úryvky z kodexu.
Nastavení globálních proměnných
Jak již bylo řečeno, modul Bluetooth připojíme pomocí softwarových sériových pinů. Abychom nastavili sériové číslo softwaru, musíme deklarovat knihovnu softwarového čísla a nastavit piny pro Tx a Rx. V Arduino mohou Nano a Uno Pin 2 a 3 fungovat jako softwarový seriál. Dále deklarujeme objekt Bluetooth ze softwarové sériové knihovny, abychom nastavili kolík pro Tx a Rx.
#zahrnout
Nastavení neplatnosti ()
Ve funkci nastavení nastavíme proměnné, abychom řekli programu, zda budou fungovat jako vstup nebo výstup. Tlačítko spouště by bylo nastaveno jako vstupní pull-up a levé a pravé kliknutí jsou deklarovány jako vstupní a nastaveny jako High, aby fungovaly jako vstupní pullupy.
Také nastavte přenosovou rychlost pro sériovou komunikaci a komunikaci Bluetooth na 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (trigger, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); bluetooth.begin (9600); }
Neplatná smyčka ()
Protože bychom potřebovali spouštěcí tlačítko, abychom zjistili, kdy potřebujeme odeslat datový proud systému, nastavili jsme celý kód uvnitř smyčky while, která bude průběžně sledovat digitální stav spouštěcí spouště, protože bude nízký, bude předejte jej dále ke zpracování.
Protože jsme připojili LED, která nám oznamuje stav systému po stisknutí spouštěcího tlačítka, zpočátku jsme nastavili LED na nízkou hodnotu mimo smyčku while jako výchozí stav a vysokou uvnitř smyčky while, která rozsvítí LED kdykoli je stisknuto tlačítko spouště.
Ke čtení stavu levého a pravého tlačítka jsme globálně deklarovali dvě proměnné lclick a rclick, jejichž hodnoty byly původně nastaveny na 0.
A ve smyčce nastavte hodnotu těchto proměnných podle digitálního stavu levého a pravého tlačítka pro kontrolu, zda jsou tlačítka stisknuta nebo ne.
Četli bychom hodnoty X a Y vývodů akcelerometru pomocí funkce analogRead a namapovali bychom tyto hodnoty na velikost obrazovky, aby se ukazatel myši pohyboval po celé obrazovce. Protože velikost obrazovky jsou pixely na obrazovce, musíme ji odpovídajícím způsobem nastavit a protože potřebujeme, aby výstupní hodnota byla tři číslice, záměrně jsme nastavili rozsah pro X jako 100 <= X <= 999 a podobně hodnota pro Y jako 100 <= Y <= 800. Pamatujte, že pixely se čtou z levého horního rohu, tj. Levý horní roh má hodnotu (0,0), ale protože jsme deklarovali tři číslice pro x a y, naše hodnoty by byly čteny z bodu (100,100).
Dále vytiskněte hodnotu souřadnic a stav kliknutí přes sériové rozhraní a Bluetooth pomocí funkcí Serial.print a bluetooth.print, které pomáhají při získávání hodnot na sériovém monitoru a přes váš systém přes Bluetooth.
Nakonec kvůli odrazu tlačítka může být opakována jedna hodnota, což by způsobilo, že kurzor myši přetrvává nad jednou pozicí, takže abychom se toho zbavili, musíme přidat toto zpoždění.
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); jiný bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); else bluetooth.print (0); zpoždění (4000); }}
Skript ovladače Pythonu
Od této chvíle jsme dokončili hardware a jeho část firmwaru. Nyní, abychom dostali vzduchovou myš do provozu, musíme mít skript ovladače, který by mohl dekódovat signály ze vzduchové myši do pohybů kurzoru, proto jsme si vybrali Krajta. Python je skriptovací jazyk a skriptováním zde myslíme, že nám pomáhá získat kontrolu nad druhým programem, protože zde ovládáme kurzor myši.
Otevřete tedy svůj pythonovský shell a pomocí následujících příkazů si nainstalujte následující knihovny:
pip install sériový pip install pyautogui
Serial je knihovna pro Python, který nám pomáhá k získání dat ze sériového rozhraní jako COM porty a také nám umožňuje manipulovat s ním, zatímco pyautogui je knihovna pro Python získat kontrolu nad funkcí GUI, v tomto případě myší.
Pojďme nyní ke kódu pro ovladače, první věcí, kterou musíme udělat, je import sériových a pyautogui knihoven a poté ze sériové knihovny musíme nastavit komunikační port pro komunikaci s přenosovou rychlostí 9600, stejné jako Bluetooth.serial pracuje na. K tomu musíte připojit modul Bluetooth k vašemu systému a poté v nastavení systému zkontrolovat, ke kterému komunikačnímu portu je připojen.
Další věcí je číst sériovou komunikaci z Bluetooth do systému a udržovat ji nepřetržitě udržovat zbytek kódu v nepřetržité smyčce pomocí while 1.
Jak již bylo řečeno, Arduino vysílá 8 bitů, nejprve 6 pro souřadnice a poslední dva pro stav tlačítek kliknutí. Přečtěte si tedy všechny bity pomocí ser.read a nastavte jeho délku na 8 bitů.
Dále rozdělte bity pro souřadnice kurzoru a kliknutí tak, že je rozkrojíte a poté dále rozdělíte kurzorové bity na souřadnice X a Y samostatně. Totéž platí pro levé a pravé kliknutí.
Nyní z komunikace získáváme bajtový řetězec a musíme jej převést na celé číslo, aby se vešly do souřadnic, uděláme to tak, že je dekódujeme a potom je vysypeme do celých čísel.
Nyní přesuňte kurzor užíváme pyautogui MoveTo funkce, která bere jako argumenty uvedené celočíselné souřadnice a pohybuje kurzorem na této pozici.
Další kontrola kliknutí, uděláme to pomocí posledních dvou bitů a funkce kliknutí pyautogui, její výchozí kliknutí je levé, ale můžeme jej nastavit doprava deklarováním hodnoty tlačítka doprava, můžeme také definovat počet kliknutí nastavte jej na dvojité kliknutí nastavením parametru kliknutí na 2.
Níže je uveden kompletní kód Pythonu, který se má spustit v počítači:
import serial import pyautogui ser = serial.Serial ('com3', 9600) while 1: k = ser.read (8) cursor = k click = k x = cursor y = cursor l = click r = click xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) pokud l == 49: pyautogui.click (kliknutí = 2) elif r = = 49: pyautogui.click (button = 'right', clicks = 2)
Testování Arduino Air Mouse
Pro provoz Air Mouse k němu připojte zdroj energie. Může to být ze slotu USB Arduino Nano USB nebo z 5V regulovaného napájecího zdroje pomocí 7805 IC. Poté spusťte skript ovladače pythonu nastavením komunikačního portu, ke kterému je vaše Bluetooth připojeno. Jak se skript spouští, uvidíte blikání Bluetooth, což znamená, že je připojen k vašemu systému. Pak pro jeho ovládání klikněte na spoušťové tlačítko a uvidíte, že by se změnila poloha souřadnic, a pokud chcete kliknout levým nebo pravým tlačítkem, pak nejprve stiskněte levé nebo pravé tlačítko a spoušťové tlačítko, uvidíte akci kliknutí na změněné umístění kurzoru.
Podívejte se na podrobné pracovní video níže.