- Forutsetninger
- Kretsdiagram
- Prosessflyt for luftmusen
- Programmering av Arduino for Air Mouse
- Python Driver Script
- Testing av Arduino Air Mouse
Noen gang lurt på hvordan vår verden beveger seg mot den oppslukende virkeligheten. Vi finner kontinuerlig nye måter og metoder for å samhandle med omgivelsene våre ved hjelp av virtual reality, mixed reality, augmented reality osv. Nye enheter kommer ut hver dag med disse raske teknologiene for å imponere oss av deres nye interaktive teknologier.
Disse oppslukende teknologiene brukes i spill, interaktive aktiviteter, underholdning og mange andre applikasjoner. I denne opplæringen skal vi vite om en slik interaktiv metode som gir deg en ny måte å samhandle med systemet ditt i stedet for å bruke en kjedelig mus. Våre spillgeekser må vite at noen få år siden Nintendo selger et spillselskap en ide om en 3D interaktiv metode for å samhandle med konsollene sine ved hjelp av en håndholdt kontroller kjent som Wii-kontroller. Den bruker akselerometeret for å finne bevegelsene dine for et spill og sende det trådløst til systemet. Hvis du vil vite mer om denne teknologien, kan du sjekke ut patentet EP1854518B1, dette vil gi deg en fullstendig ide om hvordan denne teknologien fungerer.
Inspirert av denne ideen skal vi lage en "Air mouse", for å samhandle med systemer bare ved å bevege konsollen i luften, men i stedet for å bruke tredimensjonale koordinatreferanser, skal vi bare bruke 2-dimensjonale koordinatreferanser vi kan imitere handlingene til datamusen siden musen fungerer i to dimensjoner X og Y.
Konseptet bak denne trådløse 3D luftmusen er veldig enkelt, vi vil bruke et akselerometer for å få verdien av akselerasjonen av handlingene og bevegelsene til “Luftmusen” langs x- og y-aksen, og deretter basert på verdiene til akselerometeret vil vi kontrollere musepekeren og utføre visse handlinger ved hjelp av python-programvaredrivere som kjører på datamaskinen.
Forutsetninger
- Arduino Nano (hvilken som helst modell)
- Akselerometer ADXL335-modul
- Bluetooth HC-05-modul
- Trykke knapper
- Python-installert datamaskin
For å lære mer om å installere python på datamaskinen, følg den forrige opplæringen om Arduino-Python LED-kontroll.
Kretsdiagram
For å kontrollere datamaskinen din med håndbevegelsene trenger du et akselerometer som gir akselerasjonen langs X- og Y-aksen, og for å gjøre hele systemet trådløst brukes en Bluetooth-modul for å overføre signalet trådløst til systemet ditt.
Her brukes et ADXL335 akselerometer, det er en MEMS-basert trippelaksmodul som utgir akselerasjonen langs X-, Y- og Z-aksen, men som tidligere fortalt for å kontrollere musen, trenger vi bare akselerasjonen bare langs X- og Y-aksen. Lær mer om bruk av ADXL335 akselerometer med Arduino med våre tidligere prosjekter:
- Arduino-basert bilulykkesvarslingssystem ved hjelp av GPS, GSM og akselerometer
- Ping Pong Game ved hjelp av Arduino og Accelerometer
- Akselerometerbasert håndbevegelsesstyrt robot ved hjelp av Arduino
- Jordskjelvdetektoralarm ved hjelp av Arduino
Her er Xout og Yout-pinnen på akselerometeret koblet til de analoge, A0- og A1-pinnene på Arduino, og for å overføre signalene fra Arduino til systemet brukes Bluetooth-modul HC-05 her, siden Bluetooth fungerer over Tx og Rx pin-tilkoblinger, så vi bruker programvarens serielle pins D2 og D3. Den er koblet til ved hjelp av programvareserie, fordi hvis vi kobler Bluetooth til maskinvareserien og begynner å få avlesningene over python-konsollen, vil det vise feil for den uoverensstemmende overføringshastigheten, ettersom Bluetooth ville kommunisere med pythonet på sin egen overføringshastighet. Lær mer om bruk av Bluetooth-modul ved å gå gjennom forskjellige Bluetooth-baserte prosjekter ved hjelp av forskjellige mikrokontrollere, inkludert Arduino.
Her har vi brukt tre trykknapper - en for å utløse luftmusen og andre to for venstre og høyreklikk som vist på bildet nedenfor:
Prosessflyt for luftmusen
Flytskjemaet viser prosessflyten til Arduino-baserte Air Mouse:
1. Systemet sjekker kontinuerlig for å trykke på den mekaniske avtrekkeren til den ikke trykkes, vi kan trene normalt med datamaskinens mus.
2. Når systemet oppdager knappetrykk, overføres kontrollen for musen til luftmusen.
3. Når du trykker på utløserknappen, begynner systemet å overføre musens målinger til datamaskinen. Systemavlesningen består av akselerometeravlesningene, og avlesningene for venstre og høyre klikk.
4. Systemavlesningene består av datastrømmen på 1 byte eller 8 bits, hvor de første tre bitene består av X-koordinatene, andre tre bit består av Y-koordinatene, den nest siste biten er statusbiten for å få statusen for venstre museklikk og den siste biten er statusbiten for å få status for høyreklikket.
5. Verdien av de tre første bitene, dvs. X-koordinaten kan variere fra 100 <= Xcord <= 999, mens verdien for Y-koordinaten kan variere fra 100 <= Ycord <= 800. Verdiene for høyreklikk og venstreklikk er de binære verdiene enten 0 eller 1 der 1 indikerer at klikket er laget og 0 at klikk ikke er laget av brukeren.
6. For å ikke la sprett av knappen påvirke posisjonen til markøren, holdes en kjent forsinkelse på 4 sekunder etter hvert klikk på utløserknappen på musen.
7. For høyre og venstre klikk i luftmusen, må vi først trykke enten venstre eller høyre trykknapp, og etter det må vi trykke på utløserknappen for å flytte til posisjonen til luftmusen der vi vil.
Programmering av Arduino for Air Mouse
Arduinoen skal være programmert til å lese akselerasjonsverdiene i X- og Y-aksen. Det komplette programmet er gitt til slutt, nedenfor er de viktige kodebitene.
Sette opp de globale variablene
Som tidligere sagt vil vi koble til Bluetooth-modulen med programvarens serielle pinner. Så for å sette programvareserien må vi erklære programvarebiblioteket og sette opp pinnene for Tx og Rx. I Arduino kan Nano og Uno Pin 2 og 3 fungere som en programvareserie. Deretter erklærer vi Bluetooth-objektet fra programvarebiblioteket for å sette opp pinnen for Tx og Rx.
#inkludere
Ugyldig oppsett ()
I oppsettfunksjonen skal vi sette variablene for å fortelle programmet om de vil fungere som inngang eller utgang. Utløserknappen vil bli satt opp som input-pull-up, og venstre og høyre klikk blir erklært som input og satt opp som High for å få dem til å fungere som input-pullups.
Still også overføringshastigheten for seriell og Bluetooth-kommunikasjon til 9600.
ugyldig oppsett () { pinMode (x, INPUT); pinMode (y, INNGANG); pinMode (trigger, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rklikk, INNGANG); pinMode (ledet, UTGANG); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Serial.begin (9600); Bluetooth.begin (9600); }
Ugyldig sløyfe ()
Som vi trenger utløserknappen for å fortelle når vi trenger å sende datastrømmen til systemet, så setter vi opp hele koden inne i mens sløyfen vil kontinuerlig overvåke den digitale tilstanden til opptrekksutløseren, da den blir lav vil den gi den videre for behandlingen.
Da vi har festet en LED for å fortelle oss status for systemet når utløserknappen trykkes, satte vi først ledet til lavt utenfor mens sløyfen var standard, og høyt inne i mens sløyfen som vil lyse opp ledet når utløserknappen trykkes.
For å lese statusen til venstre og høyreklikk- knappen har vi globalt erklært to variabler lklikk og rklikk hvis verdier opprinnelig ble satt opp til 0.
Og i løkken , sett verdien til disse variablene i henhold til den digitale statusen til venstre og høyreklikk-knappen for å sjekke om knappene er trykket eller ikke.
Vi leser verdiene til X- og Y-pinnene på akselerometeret ved hjelp av analogRead- funksjonen og kartlegger disse verdiene til skjermstørrelsen for å få musepekeren til å bevege seg over hele skjermen. Siden skjermstørrelsen er pikslene på skjermen, må vi sette den opp tilsvarende, og da vi trenger at utgangsverdien skal være tre sifre, har vi bevisst satt opp området for X som 100 <= X <= 999 og tilsvarende verdi for Y som 100 <= Y <= 800. Husk at pikslene blir lest fra øverste venstre hjørne, dvs. øverste venstre hjørne har verdien (0,0), men siden vi har deklarert tre sifre for x og y, vil våre verdier bli lest fra punktet (100,100).
Videre skriver du ut verdien av koordinatene og statusen for klikket over serie- og Bluetooth ved hjelp av Serial.print- og bluetooth.print- funksjonene de hjelper til med å få verdiene på seriell skjerm og over systemet ditt via Bluetooth.
Til slutt, på grunn av sprett av en knapp, kan en enkelt verdi gjentas, noe som vil føre til at en musemarkør drøyer over en enkelt posisjon, så for å bli kvitt dette må vi legge til denne forsinkelsen.
void loop () { digitalWrite (led, LOW); mens (digitalRead (trigger) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rklikk); xh = analogRead (x); yh = analogRead (y); xcord = kart (xh, 286,429,100,999); ycord = kart (yh, 282,427,100,800); Serial.print (xcord); Serial.print (ycord); hvis (lstate == LOW) Serial.print (1); annet Serial.print (0); hvis (rstate == LAV) Serial.print (1); annet Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); hvis (lstate == LAV) Bluetooth.print (1); ellers bluetooth.print (0); hvis (rstate == LAV) Bluetooth.print (1); annet bluetooth.print (0); forsinkelse (4000); }}
Python Driver Script
Fra nå av har vi fullført med maskinvaren og dens fastvaredel, nå for å få luftmusen til å fungere, trenger vi et driverskript som kan dekode signalene fra luftmusen til markørbevegelsene, så for dette har vi valgt Python. Python er et skriptspråk, og med skripter her mener vi at det hjelper oss å få kontroll over det andre programmet, som her styrer vi musemarkøren.
Så åpne pythons skallet og få følgende biblioteker installert ved hjelp av kommandoene nedenfor:
pip installer seriell pip installer pyautogui
Den serie er et bibliotek for python som hjelper oss å få data fra serielle grensesnitt som COM-porter og også lar oss manipulere det mens pyautogui er bibliotek for python å få kontroll over de grafiske funksjoner, i dette tilfellet, mus.
La oss nå komme til koden for driverne. Det første vi trenger å gjøre er å importere serie- og pyautogui-biblioteker, og deretter fra seriebiblioteket må vi stille inn porten for kommunikasjonen med en overføringshastighet på 9600, samme som Bluetooth.serial fungerer på. For dette må du koble Bluetooth-modulen til systemet ditt, og i systeminnstillingene må du sjekke hvilken port den er koblet til.
Neste ting er å lese seriekommunikasjonen fra Bluetooth til systemet og å holde den i gang kontinuerlig holde resten av koden i en kontinuerlig sløyfe ved hjelp av mens 1.
Som sagt tidligere at Arduino sender ut 8 biter, første 6 for koordinatene og de to siste for status for klikknappene. Så les alle bitene ved hjelp av ser.les og sett lengden til 8 bits.
Del deretter bitene for markørkoordinatene og klikk ved å skjære dem over, og skjær deretter markørbitene ned i X- og Y-koordinatene separat. Det samme gjelder venstre og høyreklikk.
Nå fra kommunikasjonen får vi en byte-streng, og vi må konvertere den til et helt tall slik at de kan passe inn for koordinatene, vi gjør dette ved å dekode dem og deretter skrive dem inn i heltall.
Nå for å flytte markøren bruker vi pyautogui moveto- funksjonen, som tar som argument disse heltallskoordinatene og flytter markøren til den posisjonen.
Neste sjekk for klikk, vi gjør dette ved å bruke de to siste bitene og pyautoguis klikkfunksjon, standard klikk er igjen en, men vi kan sette den til høyre ved å erklære knappverdien til høyre, vi kan også definere antall klikk til sett det av til et dobbeltklikk ved å sette klikkparameteren til 2.
Nedenfor er den komplette Python-koden som skal kjøres på datamaskinen:
importer seriell import pyautogui ser = serial.Serial ('com3', 9600) mens 1: k = ser.les (8) markør = k klikk = k x = markør y = markør l = klikk r = klikk xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor) hvis l == 49: pyautogui.click (klikk = 2) elif r = = 49: pyautogui.click (knapp = 'høyre', klikk = 2)
Testing av Arduino Air Mouse
Så for å bruke Air Mouse, fest en strømkilde til den. Det kan være fra Arduino Nano USB-spor eller fra 5v-regulert strømforsyning ved bruk av 7805 IC. Kjør deretter python-driverskriptet ved å stille inn komporten som Bluetooth er koblet til. Når skriptet kjører, vil du se en forsinkelse i blinkingen av Bluetooth, det betyr at den er koblet til systemet ditt. For å betjene det, klikk på utløserknappen, og du vil se at koordinatens posisjon vil endres, og hvis du vil ha venstre- eller høyreklikk, trykk først på venstre eller høyre trykknapp og utløserknapp sammen, du vil se handlingen av klikket på en endret plassering av markøren.
Sjekk den detaljerte arbeids Video nedenfor.