- Edellytykset
- Piirikaavio
- Ilmavirtaisen hiiren prosessivirta
- Arduino for Air Mouse -ohjelmointi
- Python-ohjaimen komentosarja
- Arduino Air -hiiren testaus
Oletko koskaan miettinyt, kuinka maailmamme etenee kohti syventävää todellisuutta. Etsimme jatkuvasti uusia tapoja olla vuorovaikutuksessa ympäröivän kanssa virtuaalitodellisuuden, sekoitetun todellisuuden, liitetyn todellisuuden jne. Avulla. Uusia laitteita tulee päivittäin esiin näiden nopean tahdistuksen tekniikoiden avulla.
Näitä mukaansatempaavia tekniikoita käytetään pelaamiseen, vuorovaikutteisiin aktiviteetteihin, viihteeseen ja moniin muihin sovelluksiin. Tässä opetusohjelmassa opimme tuntemaan tällaisen interaktiivisen menetelmän, joka antaa sinulle uuden tavan olla vuorovaikutuksessa järjestelmän kanssa tylsän hiiren käyttämisen sijaan. Pelihenkien on tiedettävä, että muutama vuosi sitten Nintendo peliyritys myy idean interaktiivisesta 3D-menetelmästä vuorovaikutuksessa konsoliensa kanssa kannettavan ohjaimen avulla, joka tunnetaan nimellä Wii-ohjain. Se käyttää kiihtyvyysanturia paikantamaan pelisi eleet ja lähettämään sen järjestelmään langattomasti. Jos haluat tietää enemmän tästä tekniikasta, voit tutustua heidän patenttijulkaisuunsa EP1854518B1, joka antaa sinulle täydellisen kuvan tämän tekniikan toiminnasta.
Tämän idean innoittamana aiomme tehdä "ilmahiiren", joka on vuorovaikutuksessa järjestelmien kanssa vain siirtämällä konsolia ilmassa, mutta kolmiulotteisten koordinaattiohjeiden käyttämisen sijaan aiomme käyttää vain 2-ulotteisia koordinaattiviittauksia, joten voimme jäljitellä tietokoneen hiiren toimintaa, koska hiiri toimii kahdessa ulottuvuudessa X ja Y.
Tämän langattoman 3D- ilmahiiren taustalla oleva käsite on hyvin yksinkertainen, käytämme kiihtyvyysmittaria saadaksemme "ilmahiiren" toimintojen ja liikkeiden kiihtyvyyden arvon x- ja y-akselilla ja perustuen sitten kiihtyvyysanturia ohjaamme hiiren kohdistinta ja suoritamme tiettyjä toimintoja tietokoneella toimivien python-ohjelmistoajurien avulla.
Edellytykset
- Arduino Nano (mikä tahansa malli)
- Kiihtyvyysmittari ADXL335-moduuli
- Bluetooth HC-05 -moduuli
- Painikkeet
- Python Asennettu tietokone
Saat lisätietoja pythonin asentamisesta tietokoneeseen noudattamalla edellistä opetusohjelmaa Arduino-Python LED -ohjauksesta.
Piirikaavio
Tietokoneen hallitsemiseksi käden liikkeillä tarvitset kiihtyvyysmittarin, joka antaa kiihtyvyyden X- ja Y-akselilla, ja jotta koko järjestelmä olisi langaton, Bluetooth-moduulia käytetään signaalin siirtämiseen langattomasti järjestelmään.
Tässä käytetään ADXL335-kiihtyvyysanturia, se on MEMS-pohjainen kolmiakselimoduuli, joka tuottaa kiihtyvyyden pitkin X-, Y- ja Z-akseleita, mutta kuten aiemmin kerrottiin hiiren ohjaamiseksi, tarvitsemme vain kiihtyvyyttä vain X- ja Y-akselilla. Lisätietoja ADXL335-kiihtyvyysanturin käytöstä Arduinon kanssa aiemmissa projekteissamme:
- Arduino-pohjainen ajoneuvon onnettomuuksien hälytysjärjestelmä GPS-, GSM- ja kiihtyvyysanturilla
- Ping Pong -peli Arduino- ja Kiihtyvyysmittarilla
- Kiihtyvyysmittaripohjainen käsieleohjattava robotti Arduinoa käyttämällä
- Maanjäristyksen ilmaisinhälytys Arduinolla
Tässä kiihtyvyysanturin Xout- ja Yout-nastat on kytketty Arduinon analogisiin, A0 ja A1 nastoihin ja signaalien siirtämiseen Arduinosta järjestelmään käytetään Bluetooth-moduulia HC-05, koska Bluetooth toimii Tx: n ja Rx: n kautta nastaliitännät, joten käytämme ohjelmistosarjanappeja D2 ja D3. Se on kytketty ohjelmistosarjaan, koska jos yhdistämme Bluetoothin laitteistosarjaan ja aloitamme lukemien hakemisen python-konsolista, se näyttää virheitä siirtonopeudelle, koska Bluetooth kommunikoi pythonin kanssa omalla siirtonopeudella. Lisätietoja Bluetooth-moduulin käytöstä käymällä läpi erilaisia Bluetooth-pohjaisia projekteja käyttämällä erilaisia mikro-ohjaimia, kuten Arduino.
Tässä olemme käyttäneet kolmea painonappia - yhtä Air-hiiren laukaisemiseen ja muita kahta vasenta ja oikeaa napsautusta varten, kuten alla olevassa kuvassa näkyy:
Ilmavirtaisen hiiren prosessivirta
Vuokaavio näyttää Arduino-pohjaisen Air Mouse -hiiren prosessivirran:
1. Järjestelmä tarkistaa jatkuvasti, että mekaanista liipaisinta painetaan, kunnes sitä ei paineta, voimme treenata normaalisti tietokoneen hiirellä.
2. Kun järjestelmä havaitsee painikkeen painamisen, hiiren ohjaus siirtyy ilmahiirelle.
3. Kun laukaisupainiketta painetaan, järjestelmä alkaa siirtää hiiren lukemia tietokoneelle. Järjestelmän lukema koostuu kiihtyvyysmittarin lukemista sekä vasemman ja oikean napsautuksen lukemista.
4. Järjestelmälukemat koostuvat 1 tavun tai 8 bitin tietovirrasta, jossa ensimmäiset kolme bittiä koostuvat X-koordinaateista, toiset kolme bittiä koostuvat Y-koordinaateista, toinen viimeinen bitti on tilabitti hiiren vasemman napsautuksen tila ja viimeinen bitti on tilabitti oikean napsautuksen tilan saamiseksi.
5. Kolmen ensimmäisen bitin arvo, ts. X-koordinaatti, voi vaihdella välillä 100 <= X-johto <= 999, kun taas Y-koordinaatin arvo voi vaihdella välillä 100 <= Y-johto <= 800. Oikean napsautuksen ja vasemman napsautuksen arvot ovat joko 0 tai 1 binaariarvoja, joissa 1 tarkoittaa, että napsautus on tehty ja 0, jota käyttäjä ei tee napsautusta.
6. Jotta painikkeen pomppu ei vaikuttaisi kohdistimen sijaintiin, tiedetään 4 sekunnin viive jokaisen hiiren laukaisupainikkeen napsautuksen jälkeen.
7. Oikean ja vasemman painikkeen napsauttamiseksi ilmahiiressä meidän on ensin painettava joko vasenta tai oikeaa painiketta, ja sen jälkeen meidän on painettava laukaisupainiketta siirtyäksemme ilmahiiren haluamaasi kohtaan.
Arduino for Air Mouse -ohjelmointi
Arduino tulisi ohjelmoida lukemaan kiihtyvyysarvot X- ja Y-akselilta. Täydellinen ohjelma annetaan lopussa, Alla on tärkeitä katkelmia koodin.
Yleisten muuttujien asettaminen
Kuten aiemmin sanottiin, kytket Bluetooth-moduulin ohjelmiston sarjatapilla. Joten ohjelmistosarjan asettamiseksi meidän on ilmoitettava ohjelmistosarjakirjasto ja asetettava nastat Tx: lle ja Rx: lle. Arduinossa Nano ja Uno Pin 2 ja 3 voivat toimia ohjelmistosarjana. Seuraavaksi julistamme ohjelmiston sarjakirjaston Bluetooth-objektin asettamaan Tx: n ja Rx: n tappi.
#sisältää
Tyhjä asennus ()
Vuonna setup toiminto, aiomme asettaa muuttujat kertomaan ohjelman ne toimivat tulo tai lähtö. Liipaisupainike asetetaan syöttövetona, ja vasen ja oikea napsautus ilmoitetaan syötteeksi ja asetetaan korkeaksi, jotta ne toimisivat tuloilmoittajana.
Aseta myös sarja- ja Bluetooth-tiedonsiirtonopeudeksi 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (laukaista, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Sarjan alku (9600); bluetooth.begin (9600); }
Tyhjä silmukka ()
Koska tarvitsemme laukaisupainikkeen kertomaan, milloin meidän on lähetettävä järjestelmälle datavirta, asetimme koko koodin while- silmukan sisään, joka valvoo jatkuvasti pull-up-liipaisimen digitaalista tilaa, kun se menee matalaksi, se välittää se edelleen käsittelyä varten.
Kuten olemme kiinnitetty LED antaa meille tilan järjestelmän kun liipaisin painetaan, me alun perin johti alhaiseen ulkopuolella samalla silmukka, koska se on oletuksena kunnossa ja korkealla sisälle samalla silmukka, joka syttyy LED aina kun laukaisupainiketta painetaan.
Voit lukea tilan vasemman ja oikean klikkaa nappia olemme globaalisti julisti kaksi muuttujaa LNapsauta ja RNapsauta jonka arvot perin perustettiin 0.
Ja määritä silmukassa näiden muuttujien arvo vasemman ja oikean napsautuksen painikkeen digitaalisen tilan mukaan tarkistaaksesi, painetaanko painikkeita.
Luemme kiihtyvyysanturin X- ja Y-nastojen arvot analogRead- toiminnon avulla ja kartoitamme nämä arvot näytön kokoon saadaksemme hiiren osoittimen liikkumaan koko näytössä. Koska näytön koko on näytön pikseleitä, meidän on asetettava se vastaavasti ja koska tarvitsemme lähtöarvoksi kolme numeroa, olemme tarkoituksella asettaneet alueen X: lle arvoksi 100 <= X <= 999 ja vastaavasti Y-arvo arvona 100 <= Y <= 800. Muista, että pikseleitä luetaan vasemmassa yläkulmassa eli vasemmassa yläkulmassa on arvo (0,0), mutta koska olemme ilmoittaneet kolme numeroa x: lle ja y: lle, arvomme luetaan pisteestä (100,100).
Tulosta edelleen koordinaattien arvo ja sarja- ja Bluetooth-napsautusten tila Serial.print- ja bluetooth.print- toimintojen avulla, jotka auttavat saamaan arvot sarjavalvontaan ja järjestelmään Bluetoothin kautta.
Vihdoin painikkeen pomppimisesta johtuen yksi arvo voidaan toistaa, mikä saa hiiren kohdistimen viipymään yhden sijainnin päällä, joten päästäkseen eroon meidän on lisättävä tämä viive.
void loop () { digitalWrite (led, LOW); while (digitalRead (laukaista) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analoginen luku (x); yh = analoginen Lue (y); xjohto = kartta (xh, 286 429 100 9999); ycord = kartta (yh, 2824271000000); Sarjaprintti (xcord); Sarjaprintti (ycord); if (lstate == LOW) Sarja.tulos (1); else Sarja.tulos (0); if (rstate == LOW) Sarja.tulos (1); else Sarja.tulos (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == LOW) bluetooth.print (1); muu bluetooth.print (0); if (rstate == LOW) bluetooth.print (1); muu bluetooth.print (0); viive (4000); }}
Python-ohjaimen komentosarja
Tästä lähtien olemme suorittaneet laitteiston ja sen laiteohjelmiston osan, jotta ilmahiiri toimisi, tarvitsemme ohjainkoodin, joka voisi dekoodata ilmahiiren signaalit kohdistimen liikkeisiin, joten tähän olemme valinneet Python. Python on komentosarjakieli, ja tässä komentosarjalla tarkoitamme, että se auttaa meitä saamaan toisen ohjelman hallinnan, koska tässä hallitsemme hiiren kohdistinta.
Joten avaa python-kuori ja asenna seuraavat kirjastot alla olevien komentojen avulla:
pip asenna sarja pip asenna pyautogui
Serial on kirjasto python joka auttaa meitä saamaan tietoja sarjaliitäntää kuten COM portit ja myös antaa meidän manipuloida sitä taas pyautogui on kirjasto Python saada valvontaa GUI ominaisuuksia, tässä tapauksessa, hiiri.
Siirrytään nyt ohjaimien koodiin. Ensimmäinen asia, joka meidän on tehtävä, on tuoda sarja- ja pyautogui-kirjastot, ja sitten sarjakirjastosta, meidän on asetettava Com-portti yhteydenpitoon, jonka siirtonopeus on 9600, sama kuin Bluetooth.serial toimii osoitteessa. Tätä varten sinun on liitettävä Bluetooth-moduuli järjestelmään ja sitten järjestelmän asetuksissa sinun on tarkistettava, mihin porttiin se on kytketty.
Seuraava asia on lukea sarjaliikenne Bluetoothista järjestelmään ja pitää se jatkuvasti käynnissä pitämällä loput koodit jatkuvassa silmukassa samalla kun 1.
Kuten aiemmin sanottiin, Arduino lähettää 8 bittiä, ensin 6 koordinaatista ja kaksi viimeistä napsautuspainikkeiden tilasta. Joten lue kaikki bitit ser.readin avulla ja aseta sen pituus 8 bitiksi.
Jaa seuraavaksi kohdistimen koordinaattien ja napsautusten bitit leikkaamalla ne yli ja viipaloi sitten kohdistinbitit erikseen X- ja Y-koordinaateiksi. Sama koskee vasenta ja oikeaa napsautusta.
Nyt tiedonsiirrosta saamme tavumerkkijonon ja meidän on muunnettava se kokonaislukuksi, jotta ne sopivat koordinaatteihin, teemme tämän purkamalla ne ja kirjoittamalla ne sitten kokonaislukuiksi.
Nyt kohdistimen siirtämiseksi käytämme pyautogui moveto -funktiota, joka ottaa argumentteina nämä kokonaislukukoordinaatit ja siirtää kohdistimen kyseiseen sijaintiin.
Seuraavaksi tarkista napsautukset, teemme tämän käyttämällä kahta viimeistä bittiä ja pyautogui-napsautustoimintoa, sen oletusklikkaus on vasemmalla, mutta voimme asettaa sen oikealle ilmoittamalla painikkeen arvon oikealle, voimme myös määrittää napsautusten määrän aseta se kaksoisnapsautukselle asettamalla napsautusten parametriksi 2.
Alla on täydellinen tietokoneessa suoritettava Python-koodi:
Tuo sarja tuonti pyautogui ser = serial.Serial ('com3', 9600) kun taas 1: k = ser.read (8) kohdistin = k napsauta = k x = kohdistin y = kohdistin l = napsauta r = napsauta xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor), jos l == 49: pyautogui.click (napsauttaa = 2) elif r = = 49: pyautogui.click (painike = 'oikea', napsautus = 2)
Arduino Air -hiiren testaus
Joten Air Mouse -hiiren käyttöä varten liitä siihen virtalähde. Se voi tulla Arduino Nano USB -paikasta tai 5v: n säädetystä virtalähteestä 7805 IC: n avulla. Suorita sitten python-ohjaimen komentosarja asettamalla com-portti, johon Bluetooth on yhteydessä. Kun komentosarja suoritetaan, näet viiveen Bluetoothin vilkkumisessa, mikä tarkoittaa, että se on kytketty järjestelmään. Napsauta sitten sen käyttöä napsauttamalla laukaisupainiketta ja näet, että koordinaattien sijainti muuttuu, ja jos haluat vasemman tai oikean napsautuksen, paina ensin vasenta tai oikeaa painiketta ja laukaisupainiketta yhdessä, näet napsautuksen toiminnon muuttunut kohdistimen sijainti.
Tarkista yksityiskohtainen toimiva video alla.