- Forudsætninger
- Kredsløbsdiagram
- Procesflow for luftmusen
- Programmering af Arduino til luftmus
- Python Driver-script
- Test af Arduino Air Mouse
Nogensinde spekuleret på, hvordan vores verden bevæger sig mod den fordybende virkelighed. Vi finder løbende nye måder og metoder til at interagere med vores omgivelser ved hjælp af virtual reality, mixed reality, augmented reality osv. Nye enheder kommer ud hver dag med disse hurtige teknologier for at imponere os af deres nye interaktive teknologier.
Disse fordybende teknologier bruges til spil, interaktive aktiviteter, underholdning og mange andre applikationer. I denne vejledning vil vi vide om en sådan interaktiv metode, der giver dig en ny måde at interagere med dit system i stedet for at bruge en kedelig mus. Vores gaming-nørder skal vide, at et spilfirma for få år tilbage sælger en idé om en 3D-interaktiv metode til at interagere med deres konsoller ved hjælp af en håndholdt controller kendt som Wii-controller. Det bruger accelerometeret til at finde dine bevægelser til et spil og sende det trådløst til systemet. Hvis du vil vide mere om denne teknologi, kan du tjekke deres patent EP1854518B1, dette giver dig en komplet idé om, hvordan denne teknologi fungerer.
Inspireret af denne idé skal vi lave en "Air mus" for at interagere med systemer bare ved at flytte konsollen i luften, men i stedet for at bruge 3-dimensionelle koordinatreferencer, vil vi kun bruge 2-dimensionelle koordinatreferencer, så vi kan efterligne computermusens handlinger, da musen fungerer i to dimensioner X og Y.
Konceptet bag denne trådløse 3D-luftmus er meget simpelt, vi bruger et accelerometer til at få værdien af accelerationen af handlingerne og bevægelserne fra "Luftmusen" langs x- og y-aksen og derefter baseret på værdierne af accelerometeret styrer vi musemarkøren og udfører visse handlinger ved hjælp af pythonsoftwaredrivere, der kører på computeren.
Forudsætninger
- Arduino Nano (enhver model)
- Accelerometer ADXL335-modul
- Bluetooth HC-05-modul
- Tryk på knapper
- Python-installeret computer
For at lære mere om installation af python på computeren skal du følge den tidligere vejledning om Arduino-Python LED-styring.
Kredsløbsdiagram
For at styre din computer med håndens bevægelser har du brug for et accelerometer, der giver accelerationen langs X- og Y-aksen, og for at gøre hele systemet trådløst bruges et Bluetooth-modul til at overføre signalet trådløst til dit system.
Her bruges et ADXL335-accelerometer, det er et MEMS-baseret triple-aksemodul, der udsender accelerationen langs X-, Y- og Z-aksen, men som tidligere fortalt for at kontrollere musen behøver vi kun accelerationen langs X- og Y-aksen. Lær mere om brug af ADXL335 accelerometer med Arduino med vores tidligere projekter:
- Arduino-baseret bilulykkesvarslingssystem ved hjælp af GPS, GSM og accelerometer
- Ping Pong-spil ved hjælp af Arduino og Accelerometer
- Accelerometerbaseret håndbevægelsesstyret robot ved hjælp af Arduino
- Jordskælvdetektoralarm ved hjælp af Arduino
Her er Xout og Yout-stiften på accelerometeret forbundet til Analog-, A0- og A1-stifterne på Arduino, og til transmission af signalerne fra Arduino til systemet bruges Bluetooth-modul HC-05 her, da Bluetooth fungerer over Tx og Rx stiftforbindelser, så vi bruger serielle stifter D2 og D3 til software. Det er tilsluttet ved hjælp af softwareserie, fordi hvis vi forbinder Bluetooth med hardwareserie og begynder at få aflæsningerne over python-konsollen, vil det vise fejl for den uoverensstemmende baudhastighed, da Bluetooth kommunikerer med python på sin egen baudhastighed. Lær mere om brug af Bluetooth-modul ved at gennemgå forskellige Bluetooth-baserede projekter ved hjælp af forskellige mikrocontrollere inklusive Arduino.
Her har vi brugt tre trykknapper - en til at udløse luftmusen og andre to til venstre og højre klik som vist på nedenstående billede:
Procesflow for luftmusen
Flowdiagrammet viser procesflowet for Arduino-baseret Air Mouse:
1. Systemet kontrollerer løbende, om den mekaniske udløser skal trykkes, indtil den ikke trykkes, vi kan træne normalt med computermusen.
2. Når systemet registrerer et knaptryk, overføres kontrollen til musen til luftmusen.
3. Når der trykkes på udløserknappen, begynder systemet at overføre musens aflæsninger til computeren. Systemaflæsningen består af accelerometeraflæsningerne og aflæsningerne for venstre og højre klik.
4. Systemaflæsningerne består af datastrømmen på 1 byte eller 8 bit, hvor de første tre bits består af X-koordinaterne, den anden tre bit består af Y-koordinaterne, den næstsidste bit er statusbiten til at få status for venstre klik med musen og den sidste bit er statusbit for at få status for højreklik.
5. Værdien af de første tre bits, dvs. X-koordinater kan variere fra 100 <= Xcord <= 999, hvorimod værdien for Y-koordinaten kan variere fra 100 <= Ycord <= 800. Værdierne for højreklik og venstre klik er de binære værdier, enten 0 eller 1, hvor 1 angiver, at kliket er lavet, og 0 at klik ikke foretages af brugeren.
6. For ikke at hoppe af knappen påvirker placeringen af markøren holdes en kendt forsinkelse på 4 sekunder efter hvert klik på udløserknappen på musen.
7. For højre og venstre klik i luftmusen skal vi først trykke på enten venstre eller højre trykknap, og derefter skal vi trykke på udløserknappen for at flytte til den position af luftmusen, hvor vi vil.
Programmering af Arduino til luftmus
Arduinoen skal programmeres til at læse accelerationsværdierne i X- og Y-aksen. Det komplette program gives i slutningen, nedenfor er de vigtige uddrag fra koden.
Opsætning af de globale variabler
Som tidligere nævnt tilslutter vi Bluetooth-modulet med softwarens serielle ben. Så for at indstille softwareserien er vi nødt til at erklære softwarebiblioteket serielt og indstille benene til Tx og Rx. I Arduino kan Nano og Uno Pin 2 og 3 fungere som en softwareserie. Dernæst erklærer vi Bluetooth-objektet fra softwarens serielle bibliotek for at indstille stiften til Tx og Rx.
#omfatte
Annulleret opsætning ()
I opsætningsfunktionen skal vi indstille variablerne til at fortælle programmet, om de fungerer som input eller output. Udløserknappen ville blive konfigureret som input pull-up, og venstre og højre klik erklæres som input og konfigureres som High for at få dem til at fungere som input pullups.
Indstil også baudhastigheden for seriel og Bluetooth-kommunikation til 9600.
ugyldig opsætning () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (trigger, INPUT_PULLUP) pinMode (lklik, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); Bluetooth.begin (9600); }
Annulleret sløjfe ()
Da vi har brug for udløserknappen for at fortælle, hvornår vi har brug for at sende datastrømmen til systemet, så opsætter vi hele koden inde i while- løkken, som kontinuerligt overvåger pull-up-triggerens digitale tilstand, da den bliver lav, vil den videregive det videre til behandlingen.
Som vi har vedhæftet et LED at lade os vide status for systemet til, når der trykkes på knappen aftrækkeren, vi oprindeligt indstillet den førte til lav uden for mens løkken, da det standard tilstand og høj inde i mens løkke, der vil lyse op lysdioden når der trykkes på udløserknappen.
For at læse status for venstre og højre klik- knap har vi globalt erklæret to variabler lclick og rclick, hvis værdier oprindeligt blev indstillet til 0.
Og i sløjfen skal du indstille værdien af disse variabler i henhold til den digitale status for venstre og højreklikknappen for at kontrollere, om der trykkes på knapperne eller ej.
Vi læser værdierne af X- og Y-stifterne på accelerometeret ved hjælp af analogRead- funktionen og kortlægger disse værdier til skærmstørrelsen for at få musemarkøren til at bevæge sig over hele skærmen. Da skærmstørrelsen er pixel på skærmen, er vi nødt til at indstille den i overensstemmelse hermed, og da vi har brug for outputværdien til at være tre cifre, har vi bevidst indstillet området for X til 100 <= X <= 999 og på lignende måde værdi for Y som 100 <= Y <= 800. Husk, at pixels læses fra øverste venstre hjørne, dvs. øverste venstre hjørne har værdien (0,0), men da vi har deklareret tre cifre for x og y, vil vores værdier blive aflæst fra punktet (100.100).
Desuden skal du udskrive koordinatværdien og status for klik over seriel og Bluetooth ved hjælp af Serial.print og bluetooth.print- funktioner, de hjælper med at få værdierne på seriel skærm og over dit system via Bluetooth.
Endelig kan en enkelt værdi gentages på grund af bouncing af en knap, hvilket får en musemarkør til at dvæle over en enkelt position, så for at slippe af med dette er vi nødt til at tilføje denne forsinkelse.
void loop () { digitalWrite (led, LOW); mens (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogLæs (x); yh = analogRead (y); xcord = map (xh, 286,429,100,999); ycord = map (yh, 282.427.100.800); Serial.print (xcord); Serial.print (ycord); hvis (lstate == LOW) Serial.print (1); ellers Serial.print (0); hvis (rstate == LAV) Serial.print (1); ellers Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); hvis (lstate == LAV) bluetooth.print (1); andet bluetooth.print (0); hvis (rstate == LAV) bluetooth.print (1); ellers bluetooth.print (0); forsinkelse (4000); }}
Python Driver-script
Fra nu af er vi færdige med hardwaren og dens firmwaredel. For at få luftmusen til at fungere er vi nødt til at have et driver-script, der kan afkode signalerne fra luftmusen til markørbevægelserne, så for dette har vi valgt Python. Python er et script-sprog, og ved scripting her mener vi, at det hjælper os med at få kontrol over det andet program, da vi her styrer musemarkøren.
Så åbn din python-skal, og få følgende biblioteker installeret ved hjælp af nedenstående kommandoer:
pip installere seriel pip installere pyautogui
Den serielle er et bibliotek til python, som hjælper os med at få data fra serielle interfaces såsom COM-porte, og også lader os manipulere det mens pyautogui er bibliotek for python at få kontrol over de GUI funktioner, i dette tilfælde, mus.
Lad os nu komme til koden til driverne. Den første ting, vi skal gøre, er at importere serie- og pyautogui-bibliotekerne, og derefter fra det serielle bibliotek skal vi indstille comporten til kommunikationen med en baudhastighed på 9600, det samme som Bluetooth.serial fungerer på. Til dette skal du tilslutte Bluetooth-modulet til dit system og derefter i systemindstillingerne skal du tjekke, hvilken port det er tilsluttet.
Den næste ting er at læse den serielle kommunikation fra Bluetooth til systemet og holde den i gang kontinuerligt holde resten af koden i en kontinuerlig sløjfe ved hjælp af mens 1.
Som tidligere sagt, sender Arduino 8 bits ud, først 6 for koordinaterne og de sidste to for status for klikknapperne. Så læs alle bits ved hjælp af ser.read og sæt længden på den til 8 bits.
Derefter opdeles bitene for markørkoordinaterne og klik ved at skære dem over, og derefter skære markørbitene yderligere ned i X- og Y-koordinater separat. Det samme gælder for venstre og højre klik.
Nu fra kommunikationen får vi en byte-streng, og vi er nødt til at konvertere den til et heltal, så de kan passe ind i koordinaterne, vi gør dette ved at afkode dem og derefter skrive dem til heltal.
For at flytte markøren bruger vi pyautogui moveto- funktionen, som tager disse heltalskoordinater som argumenter og flytter markøren til den position.
Næste tjek for klikene, vi gør dette ved at bruge de sidste to bits og pyautoguis klikfunktion, dens standard klik er venstre, men vi kan indstille det til højre ved at erklære knapværdi til højre, vi kan også definere antallet af klik til sæt det ud til et dobbeltklik ved at indstille klikparameteren til 2.
Nedenfor er den komplette Python-kode, der skal køres på computeren:
import seriel import pyautogui ser = serial.Serial ('com3', 9600) mens 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) hvis l == 49: pyautogui.click (klik = 2) elif r = = 49: pyautogui.click (knap = 'højre', klik = 2)
Test af Arduino Air Mouse
Så til betjening af Air Mouse skal du tilslutte en strømkilde til den. Det kan være fra Arduino Nano USB-stik eller fra den 5v-regulerede strømforsyning ved hjælp af 7805 IC. Kør derefter python-driver-scriptet ved at indstille den com-port, som din Bluetooth er tilsluttet. Når scriptet kører, vil du se et tidsforsink i blinkingen af Bluetooth betyder det, at det er forbundet til dit system. Klik derefter på udløserknappen for at betjene den, og du vil se, at koordinaternes position vil ændre sig, og hvis du vil have venstre eller højre klik, skal du først trykke på venstre eller højre trykknap og udløserknap sammen, vil du se handlingen ved klik på en ændret placering af markøren.
Kontroller detaljeret arbejde Video nedenfor.