- Előfeltételek
- Kördiagramm
- Folyamat a levegő egér számára
- Az Arduino for Air Mouse programozása
- Python illesztőprogram szkript
- Az Arduino Air Mouse tesztelése
Elgondolkozott már azon, vajon hogyan halad a világunk a magával ragadó valóság felé. Folyamatosan találunk új módszereket és módszereket a környezettel való interakcióra a virtuális valóság, a vegyes valóság, a kibővített valóság stb. Segítségével. Minden nap új eszközök jelentek meg ezekkel a gyors tempójú technológiákkal, hogy lenyűgözzenek bennünket új interaktív technológiáikkal.
Ezeket a magával ragadó technológiákat játékokban, interaktív tevékenységekben, szórakozásban és sok más alkalmazásban használják. Ebben az oktatóanyagban megismerünk egy ilyen interaktív módszert, amely egy unalmas egér használata helyett új módszert kínál a rendszerrel való együttműködésre. A játékainknak tudnia kell, hogy néhány évvel ezelőtt a Nintendo egy játéktársaság eladta a 3D-s interaktív módszer ötletét, hogy konzoljaikkal kölcsönhatásba léphessen egy kézi vezérlővel, Wii-vezérlővel. A gyorsulásmérő segítségével megtalálja a játék gesztusait, és vezeték nélkül elküldi a rendszernek. Ha többet szeretne megtudni erről a technológiáról, akkor nézze meg az EP1854518B1 szabadalmat, amely teljes képet ad a technológia működéséről.
Ennek az ötletnek az inspirációjaként készítünk egy "Levegő egeret", amely a konzol levegőben történő mozgatásával fog interakcióba lépni a rendszerekkel, de a háromdimenziós koordináta referenciák helyett csak 2 dimenziós koordináta referenciákat fogunk használni. utánozhatjuk a számítógépes egér műveleteit, mivel az egér két dimenzióban működik: X és Y.
A vezeték nélküli 3D Air Mouse koncepciója nagyon egyszerű, gyorsulásmérővel fogjuk megkapni az „Air egér” műveleteinek és mozgásainak gyorsulásának értékét az x és y tengely mentén, majd a a gyorsulásmérő vezérli az egér kurzort, és bizonyos műveleteket végrehajt a számítógépen futó python szoftver meghajtók segítségével.
Előfeltételek
- Arduino Nano (bármilyen modell)
- Gyorsulásmérő ADXL335 modul
- Bluetooth HC-05 modul
- Nyomógombok
- Python Telepített számítógép
Ha többet szeretne megtudni a python számítógépre történő telepítéséről, kövesse az Arduino-Python LED-vezérlés előző ismertetőjét.
Kördiagramm
A számítógép kézmozdulatokkal történő irányításához olyan gyorsulásmérőre van szükség, amely megadja a gyorsulást az X és Y tengely mentén, és hogy az egész rendszert vezeték nélkülivé tegye, egy Bluetooth modult használnak a jel vezeték nélküli továbbítására a rendszerére.
Itt egy ADXL335 gyorsulásmérőt használnak, ez egy MEMS-alapú hármas tengely modul, amely az X, Y és Z tengely mentén adja ki a gyorsulást, de amint azt korábban elmondtuk az egér vezérléséhez, csak a gyorsításra lenne szükségünk az X és Y tengely mentén. További információ az ADXL335 gyorsulásmérő Arduino- val történő használatáról korábbi projektjeinknél:
- Arduino alapú jármű baleseti riasztórendszer GPS, GSM és gyorsulásmérő segítségével
- Ping Pong játék az Arduino és az Accelerometer segítségével
- Gyorsulásmérő alapú kézmozdulattal vezérelt robot Arduino segítségével
- Földrengés-érzékelő riasztás az Arduino segítségével
Itt a gyorsulásmérő Xout és Yout csapjai csatlakoznak az Arduino Analog, A0 és A1 csapjaihoz, és az Arduino jelek továbbításához a rendszerhez itt használják a HC-05 Bluetooth modult, mivel a Bluetooth Tx és Rx kapcsolaton keresztül működik tűs csatlakozásokat, ezért szoftveres soros D2 és D3 csapokat használunk. A szoftver soros használatával van csatlakoztatva, mert ha összekapcsoljuk a Bluetooth-ot a hardveres soros kapcsolattal, és megkezdjük az olvasások beolvasását a python konzolon, az hibás adatátviteli sebességet mutat, mivel a Bluetooth a saját sebességével kommunikál a pythonnal. Tudjon meg többet a Bluetooth modul használatáról különféle Bluetooth alapú projekteken keresztül, különböző mikrovezérlőkkel, köztük az Arduino-val.
Itt három nyomógombot használtunk - egyet az Air egér kiváltására, másik kettőt pedig bal és jobb kattintásra, az alábbi képen látható módon:
Folyamat a levegő egér számára
A folyamatábra az Arduino alapú Air Mouse folyamatfolyamatát mutatja:
1. A rendszer folyamatosan ellenőrzi, hogy a mechanikus ravaszt megnyomják-e, amíg meg nem nyomják, a számítógépes egérrel normálisan dolgozhatunk.
2. Amikor a rendszer gombnyomást észlel, az egér vezérlése átkerül a légi egérre.
3. Az indítógomb megnyomásával a rendszer elkezdi átvinni az egér olvasmányait a számítógépre. A rendszer leolvasása a gyorsulásmérő leolvasásából, valamint a bal és jobb kattintás leolvasásából áll.
4. A rendszer leolvasása 1 bájtos vagy 8 bites adatfolyamból áll, amelyben az első három bit az X-koordinátákból áll, a második három bit az Y-koordinátákból áll, a második utolsó bit az állapotbit a lekéréshez az egér bal kattintásának állapota, az utolsó bit pedig a jobb kattintás állapotának lekérdezéséhez szükséges állapotbit.
5. Az első három bit, azaz az X-koordináta értéke 100 <= Xcord <= 999, míg az Y-koordináta értéke 100 <= Ycord <= 800 között mozoghat. A jobb és a bal kattintás értékei a 0 vagy 1 bináris értékek, amelyekben az 1 azt jelzi, hogy a kattintás megtörtént, a 0 pedig 0, amelyet a felhasználó nem hajtott végre.
6. Annak érdekében, hogy a gomb felpattanása ne befolyásolja a kurzor helyzetét, az ismert egér 4 másodperces késleltetést tart az egér ravaszgombjának minden egyes kattintása után.
7. A jobb egér és a bal egérgombbal a légi egérben először a bal vagy a jobb gombot kell megnyomnunk, majd ezt követően meg kell nyomnunk az indítógombot, hogy abba a helyzetbe lépjünk, ahová szeretnénk.
Az Arduino for Air Mouse programozása
Az Arduino-t úgy kell programozni, hogy leolvassa a gyorsulási értékeket az X és Y tengelyen. A teljes program a végén található, az alábbiakban találhatók a kód fontos kivonatai.
A globális változók beállítása
Mint korábban említettük, a szoftver soros csapjaival összekapcsoljuk a Bluetooth modult. Tehát a szoftver soros beállításához be kell jelentenünk a szoftver soros könyvtárát, és fel kell állítanunk a Tx és Rx csapokat. Az Arduino Nano és Uno Pin 2 és 3 szoftveres sorozatként működhet. Ezután kijelentjük a szoftver soros könyvtárából származó Bluetooth objektumot, hogy állítsuk be a Tx és Rx tűt.
#include
Érvénytelen beállítás ()
A beállítási funkcióban beállítjuk a változókat, hogy megmondjuk a programnak, hogy bemenetként vagy kimenetként fognak-e működni. Az indítógombot bemeneti pull-upként állítanák be, a bal és a jobb oldali kattintásokat pedig bemenetként deklarálnák, és magasra állítanák, hogy bemeneti pullupként működjenek.
Állítsa 9600-ra a soros és a Bluetooth kommunikáció átviteli sebességét is.
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); }
Üres hurok ()
Mivel szükségünk lenne egy aktiváló gombra, hogy megtudjuk, mikor kell elküldenünk a rendszernek az adatfolyamot, ezért a while ciklus belsejében állítottuk be a teljes kódot, amely folyamatosan figyeli a felhúzós trigger digitális állapotát, mivel az alacsonyra megy, így továbbadja a feldolgozáshoz.
Mivel csatlakoztattunk egy LED-et, hogy tudassuk velünk a rendszer állapotát, amikor megnyomjuk az indítógombot, a ledet eredetileg alacsonyra állítottuk a while cikluson kívülre, mivel ez az alapértelmezett állapot, és magasra a while hurok belsejében, amely megvilágítja a ledet valahányszor megnyomják a ravaszt.
A bal és jobb klikk gomb állapotának kiolvasásához globálisan két változót deklaráltunk: lclick és rclick, amelyek értékét eredetileg 0-ra állítottuk be.
És a ciklusban állítsa be ezeknek a változóknak az értékét a bal és a jobb egérgombbal a digitális állapotnak megfelelően, hogy ellenőrizze, hogy a gombokat megnyomták-e vagy sem.
Kiolvassuk a gyorsulásmérő X és Y kimeneti pontjainak értékeit az analogRead funkció segítségével, és ezeket az értékeket a képernyő méretéhez rendeljük , hogy az egérmutató az egész képernyőn mozogjon. Mivel a képernyő mérete a képernyőn lévő pixel, ennek megfelelően kell beállítanunk, és mivel a kimeneti értéknek három számjegyűnek kell lennie, szándékosan állítottuk be az X tartományát 100 <= X <= 999 és hasonlóan az Y értéke 100 <= Y <= 800. Ne feledje, hogy a pixeleket a bal felső sarokból olvassák, vagyis a bal felső sarok értéke (0,0), de mivel három számjegyet deklaráltunk az x és y számokhoz, értékeinket a pontról (100,100) olvassák le.
Ezután a Serial.print és a bluetooth.print funkciók segítségével kinyomtathatja a koordináták értékét, valamint a soros és a Bluetooth fölötti kattintás állapotát. Ezek segítenek abban, hogy Bluetooth-on keresztül elérjék az értékeket a soros monitoron és a rendszeren keresztül.
Végül a gomb visszapattanása miatt egyetlen érték megismétlődhet, ami az egérmutató egyetlen pozíció fölé húzódását okozná, így ettől való megszabaduláshoz hozzá kell adnunk ezt a késleltetést.
void loop () { digitalWrite (led, LOW); while (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analóg olvasás (x); yh = analóg olvasás (y); xkord = térkép (xh, 286 429 100 9999); ycord = térkép (yh, 282 427 100 800); Soros nyomtatás (xcord); Soros.nyomtatás (ycord); if (lstate == LOW) Serial.print (1); else Serial.print (0); if (rstate == LOW) Soros nyomtatás (1); else Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); más bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); else bluetooth.print (0); késés (4000); }}
Python illesztőprogram szkript
Mostanra befejeztük a hardvert és annak firmware részét, most pedig a levegő egér működéséhez szükségünk van egy illesztőprogramra, amely dekódolhatja a levegő egér jeleit a kurzor mozgásaiba, ezért ehhez választottuk Piton. A Python egy szkriptnyelv, és itt szkriptelés alatt azt értjük, hogy ez segít nekünk abban, hogy megszerezzük a másik program irányítását, mivel itt mi vezéreljük az egér kurzort.
Nyissa meg tehát a python shelljét, és telepítse a következő könyvtárakat az alábbi parancsok használatával:
pip install soros pip install pyautogui
A soros egy python könyvtár, amely segít megszerezni az adatokat a soros interfészekről, például a com portokról, és lehetővé teszi számunkra, hogy manipuláljuk őket, míg a pyautogui a python könyvtárának számít, hogy ellenőrizhessük a GUI funkcióit, ebben az esetben az egeret.
Most térjünk rá az illesztőprogramok kódjára, az első dolog, amit importálnunk kell, a soros és a pyautogui könyvtár importálása, majd a soros könyvtárból be kell állítanunk a kommunikáció com portját 9600 átviteli sebességgel, a ugyanaz, mint a Bluetooth.serial itt működik: Ehhez csatlakoztatnia kell a Bluetooth modult a rendszeréhez, majd a rendszerbeállításokban meg kell vizsgálnia, hogy melyik portra van csatlakoztatva.
A következő dolog az, hogy elolvassuk a soros kommunikációt a Bluetooth-ról a rendszerre, és folyamatosan működtessük, tartsuk fenn a kód többi részét folyamatos hurokban az 1 segítségével.
Mint korábban elmondtuk, az Arduino 8 bitet küld, az elsőt 6 a koordinátákért, az utolsó kettőt pedig a kattintógombok állapotáért. Tehát olvassa el az összes bitet a ser.read segítségével, és állítsa be a hosszát 8 bitre.
Ezután ossza fel a kurzor koordinátáinak és kattintásainak bitjeit azáltal, hogy szeleteli őket, majd tovább szeletelje a kurzor bitjeit külön X és Y koordinátákra. Ugyanez vonatkozik a bal és jobb kattintásra is.
Most a kommunikációból kapunk egy bájtos karakterláncot, amelyet egész számgá kell alakítanunk, hogy beilleszkedjenek a koordinátákba. Ezt dekódolással, majd egész számokba történő tipizálással tesszük.
A kurzor mozgatásához használjuk a pyautogui moveto függvényt, amely argumentumként veszi ezeket az egész koordinátákat, és áthelyezi a kurzort erre a pozícióra.
Ezután ellenőrizzük a kattintásokat, ezt az utolsó két bit és a pyautogui kattintási funkció használatával végezzük el, az alapértelmezett kattintás bal, de a gomb értékét jobbra deklarálva jobbra állíthatjuk, megadhatjuk a kattintások számát is dupla kattintással állítsa be a kattintási paraméter 2-re állításával.
Az alábbiakban látható a számítógépen futtatni kívánt teljes Python-kód:
import soros import pyautogui ser = soros. Sorozat ('com3', 9600), míg 1: k = ser. olvasás (8) kurzor = k kattintás = k x = kurzor y = kurzor l = kattints r = kattints xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor), ha l == 49: pyautogui.click (click = 2) elif r = = 49: pyautogui.click (gomb = 'jobb', kattintás = 2)
Az Arduino Air Mouse tesztelése
Tehát az Air Mouse működtetéséhez csatlakoztasson hozzá áramforrást. Ez származhat az Arduino Nano USB foglalatból vagy az 5v-os szabályozott tápegységből a 7805 IC használatával. Ezután futtassa a python illesztőprogram parancsfájlt annak a portnak a beállításával, amelyhez a Bluetooth csatlakozik. A szkript futtatása során késleltetést tapasztal a Bluetooth villogásában, ami azt jelenti, hogy csatlakozik a rendszeréhez. Ezután kattintson a ravasz gombra, és látni fogja, hogy a koordináták helyzete megváltozik, és ha a bal vagy a jobb oldali kattintást szeretné, akkor először nyomja meg a bal vagy a jobb gombot és az indítógombot együtt, a kattintás műveletét látja a a kurzor megváltozott helye.
Ellenőrizze az alábbi részletes videót.