- Išankstiniai reikalavimai
- Grandinės schema
- Oro pelės proceso srautas
- „Arduino for Air Mouse“ programavimas
- „Python“ tvarkyklės scenarijus
- „Arduino Air Mouse“ bandymas
Kada nors susimąstėte, kaip mūsų pasaulis juda visapusiškos realybės link. Mes nuolat ieškome naujų būdų ir būdų bendrauti su aplinkiniais, naudojant virtualią realybę, mišrią realybę, papildytą realybę ir kt. Kiekvieną dieną atsiranda naujų įrenginių su šiomis greito tempo technologijomis, kad sužavėtume mus savo naujomis interaktyviomis technologijomis.
Šios įtraukiančios technologijos naudojamos žaidimams, interaktyviai veiklai, pramogoms ir daugeliui kitų programų. Šioje pamokoje mes sužinosime apie tokį interaktyvų metodą, kuris suteikia jums naują būdą bendrauti su savo sistema, o ne naudoti nuobodžią pelę. Mūsų žaidimų geekai turi žinoti, kad praėjus keleriems metams nuo „Nintendo“ žaidimų kompanija parduoda 3D interaktyvaus metodo sąveiką su savo konsolėmis, naudodama rankinį valdiklį, vadinamą „Wii“ valdikliu. Jis naudoja akselerometrą, norėdamas rasti jūsų žaidimo gestus ir siųsti jį į sistemą belaidžiu būdu. Jei norite sužinoti daugiau apie šią technologiją, galite sužinoti jų patentą EP1854518B1. Tai suteiks jums pilną supratimą apie šios technologijos veikimą.
Įkvėpti šios idėjos, mes sukursime „Oro pelę“, norėdami sąveikauti su sistemomis tiesiog judindami konsolę ore, tačiau užuot naudojęsi 3 dimensijų koordinačių nuorodomis, mes naudosime tik 2 dimensijų koordinačių nuorodas, taigi galime imituoti kompiuterio pelės veiksmus, nes pelė veikia dviem matmenimis X ir Y.
Šios belaidės 3D oro pelės idėja yra labai paprasta, naudosime akselerometrą, kad gautume „oro pelės“ veiksmų ir judesių pagreičio vertę išilgai x ir y ašies, o tada remsimės akselerometrą, mes valdysime pelės žymeklį ir atliksime tam tikrus veiksmus su python programinės įrangos tvarkyklėmis, veikiančiomis kompiuteryje.
Išankstiniai reikalavimai
- „Arduino Nano“ (bet koks modelis)
- Akselerometro ADXL335 modulis
- „Bluetooth HC-05“ modulis
- Paspauskite mygtukus
- „Python“ Įdiegtas kompiuteris
Norėdami sužinoti daugiau apie „python“ diegimą kompiuteryje, vadovaukitės ankstesne „Arduino-Python“ LED valdymo instrukcija.
Grandinės schema
Norėdami valdyti kompiuterį rankos judesiais, jums reikia akselerometro, kuris išgautų pagreitį X ir Y ašyse, o kad visa sistema būtų belaidė, „Bluetooth“ modulis naudojamas signalui perduoti belaidžiu būdu į jūsų sistemą.
Čia naudojamas ADXL335 akselerometras, tai yra MEMS pagrįstas trigubos ašies modulis, pagreitinantis X, Y ir Z ašis, tačiau, kaip sakyta anksčiau valdant pelę, pagreičio reikės tik išilgai X ir Y ašies. Sužinokite daugiau apie ADXL335 akselerometro naudojimą su „Arduino“ su ankstesniais mūsų projektais:
- „Arduino“ pagrįsta transporto priemonių avarinių perspėjimų sistema naudojant GPS, GSM ir akselerometrą
- „Ping Pong“ žaidimas naudojant „Arduino“ ir „Accelerometer“
- Akselerometro pagrindu valdomas robotas, valdomas rankomis, naudojant „Arduino“
- Žemės drebėjimo detektoriaus signalizacija naudojant „Arduino“
Čia akselerometro „ Xout“ ir „Yout“ kaiščiai yra prijungti prie „Arduino“ analoginių, A0 ir A1 kontaktų ir signalams perduoti iš „Arduino“ į sistemą čia naudojamas „ Bluetooth“ modulis „HC-05“, nes „Bluetooth“ veikia per Tx ir Rx kaiščių jungtis, todėl mes naudojame programinės įrangos serijinius kaiščius D2 ir D3. Jis prijungtas naudojant programinę serijos programinę įrangą, nes jei mes sujungsime „Bluetooth“ su nuosekliąja aparatine įranga ir pradėsime rodmenis gauti per „python“ konsolę, tai parodys neatitikimo perdavimo greičio klaidas, nes „Bluetooth“ ryšį su python palaikys savo perdavimo greičiu. Sužinokite daugiau apie „Bluetooth“ modulio naudojimą vykdydami įvairius „Bluetooth“ pagrįstus projektus naudodami skirtingus mikrovaldiklius, įskaitant „Arduino“.
Čia mes naudojome tris mygtukus - vieną, kad suaktyvintume oro pelę, o kitus - kairįjį ir dešinįjį spustelėjimą, kaip parodyta žemiau esančiame paveikslėlyje:
Oro pelės proceso srautas
Srauto diagrama rodo „Arduino“ pagrindo „Air Mouse“ proceso eigą:
1. Sistema nuolat tikrina, ar nėra paspaustas mechaninis gaidukas, kol jis nebus nuspaustas, mes galime normaliai dirbti su kompiuterio pele.
2. Kai sistema aptinka mygtuko paspaudimą, pelės valdiklis perkeliamas į oro pelę.
3. Paspaudus gaiduką, sistema pradeda perkelti pelės rodmenis į kompiuterį. Sistemos rodmenis sudaro akselerometro rodmenys ir kairio ir dešinio paspaudimo rodmenys.
4. Sistemos rodmenis sudaro 1 baito arba 8 bitų duomenų srautas, kuriame pirmieji trys bitai susideda iš X koordinačių, antrieji trys bitai susideda iš Y koordinačių, antrasis paskutinis bitas yra būsenos bitas norint gauti kairiojo pelės paspaudimo būsena ir paskutinis bitas yra būsenos bitai, norint gauti dešinio paspaudimo būseną.
5. Pirmųjų trijų bitų, ty X koordinatės, vertė gali svyruoti nuo 100 <= X laidas <= 999, o Y koordinatės vertė gali svyruoti nuo 100 <= Ycord <= 800. Dešiniojo ir kairio paspaudimo reikšmės yra dvejetainės vertės arba 0, arba 1, kuriose 1 rodo, kad spustelėjamas, o 0, kad vartotojas neatlieka.
6. Kad mygtuko atšokimas nepaveiktų žymeklio padėties, po kiekvieno pelės paspaudimo mygtuko paspaudimo laikomas žinomas 4 sekundžių vėlavimas.
7. Norėdami paspausti dešinįjį ir kairįjį pelės klavišą, pirmiausia turime paspausti kairįjį arba dešinįjį mygtuką, o po to turime paspausti gaiduką, kad pereitume į oro pelės padėtį ten, kur norime.
„Arduino for Air Mouse“ programavimas
„Arduino“ turėtų būti užprogramuota skaityti pagreičio vertes X ir Y ašyse. Visa programa pateikiama pabaigoje, žemiau yra svarbūs kodo fragmentai.
Visuotinių kintamųjų nustatymas
Kaip minėta anksčiau, „Bluetooth“ modulį sujungsime su programinės įrangos serijos kaiščiais. Taigi, norėdami nustatyti programinės įrangos seriją, turime deklaruoti nuosekliosios programinės įrangos biblioteką ir nustatyti „Tx“ ir „Rx“ kaiščius. „Arduino Nano“ ir „Uno Pin 2“ ir „3“ gali veikti kaip programinės įrangos serijos. Tada deklaruojame „Bluetooth“ objektą iš programinės įrangos serijinės bibliotekos, kad būtų galima nustatyti „Tx“ ir „Rx“ kaiščius.
# įtraukti
Negalima nustatyti ()
Į sąrankos funkcijai, mes ketiname nustatyti kintamuosius pasakyti programą ar jie veiks kaip Įvesties arba išvesties. Trigerio mygtukas būtų nustatytas kaip įvesties traukimas, o kairysis ir dešinysis paspaudimai yra deklaruojami kaip įvestis ir nustatomi kaip aukšti, kad jie veiktų kaip įvesties traukikliai.
Taip pat nustatykite 9600 nuosekliojo ir „Bluetooth“ ryšio perdavimo greitį.
negaliojanti sąranka () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (trigeris, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (led, OUTPUT); „digitalWrite“ („lclick“, HIGH); „digitalWrite“ („rclick“, HIGH); Serijos pradžia (9600); „bluetooth.begin“ (9600); }
Tuščia kilpa ()
Kadangi mums reikės suaktyvinimo mygtuko, kad pasakytume, kada mums reikia siųsti sistemai duomenų srautą, mes nustatėme visą kodą „ while“ cikle, kuris nuolat stebės skaitmeninę traukimo aktyviklio būseną, nes ji eina žemai, ji bus perduoti jį toliau perdirbti.
Kai pridėjome šviesos diodą, kuris mums pranešė apie sistemos būseną, kai paspaudžiamas trigerio mygtukas, mes iš pradžių nustatėme, kad lempa yra maža už „ while“ kilpos, nes tai yra numatytoji sąlyga, ir aukšta, o „ loop“ viduje , kuri apšvies ledą kaskart paspaudus gaiduko mygtuką.
Norėdami skaityti kairiojo ir dešiniojo spustelėjimo mygtuko būseną, mes paskelbėme du kintamuosius lclick ir rclick, kurių reikšmės iš pradžių buvo nustatytos iki 0.
Ir kilpa , nustatyti šių kintamųjų Pasak skaitmeninio statuso kairėje ir dešinėje spustelėkite mygtuką vertę patikrinti, ar mygtukai nuspausti ar ne.
Naudodami „ analogRead“ funkciją, nuskaitytume akselerometro kaiščių X ir Y reikšmes ir suskirstytume šias reikšmes į ekrano dydį, kad pelės žymeklis judėtų visame ekrane. Kadangi ekrano dydis yra ekrane esančių pikselių, turime jį atitinkamai nustatyti ir, kadangi išvesties vertė turi būti trys skaitmenys, sąmoningai nustatėme X diapazoną kaip 100 <= X <= 999 ir panašiai vertė Y kaip 100 <= Y <= 800. Atminkite, kad pikseliai skaitomi iš viršutinio kairiojo kampo, ty viršutiniame kairiajame kampe yra vertė (0,0), tačiau kadangi mes deklaravome tris x ir y skaitmenis, mūsų vertės bus skaitomos iš taško (100,100).
Be to, naudodami „ Serial.print“ ir „ bluetooth.print“ funkcijas atspausdinkite koordinačių vertę ir paspaudimo būseną per nuosekliąją ir „Bluetooth“ būseną. Jos padeda gauti reikšmes serijiniame monitoriuje ir sistemoje per „Bluetooth“.
Pagaliau dėl mygtuko atšokimo gali būti pakartota viena reikšmė, dėl kurios pelės žymeklis pasiliks virš vienos padėties, todėl norėdami atsikratyti to, turime pridėti šį vėlavimą.
void loop () { digitalWrite (led, LOW); while (digitalRead (sukelti) == LOW) { digitalWrite (led, HIGH); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analoginis skaitymas (x); yh = analogasSkaitykite (y); xcord = žemėlapis (xh, 286 429 100 9999); ycord = žemėlapis (yh, 282 427 100 800); Serial.print (xcord); Serijinis spaudinys („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); Kitas „bluetooth.print“ (0); if (rstate == LOW) „ bluetooth.print“ (1); else bluetooth.print (0); vėlavimas (4000); }}
„Python“ tvarkyklės scenarijus
Šiuo metu mes baigėme aparatinę įrangą ir jos programinės aparatinės įrangos dalį. Dabar, kad veiktų oro pelė, turime turėti tvarkyklės scenarijų, kuris galėtų iššifruoti oro pelės signalus į žymeklio judesius, todėl tam mes pasirinkome „Python“. „Python“ yra scenarijų kalba ir čia scenarijais reiškia, kad tai padeda mums valdyti kitą programą, nes čia mes valdome pelės žymeklį.
Taigi atidarykite savo python apvalkalą ir įdiekite šias bibliotekas naudodami žemiau esančias komandas:
PIP įdiegti serijos PIP įdiegti pyautogui
Serijos yra biblioteka Python, kuri padeda mums gauti duomenis iš serijos sąsajų, tokių kaip "com uostuose, taip pat leidžia mums manipuliuoti o pyautogui yra biblioteka Python gauti kontroliuoti GUI funkcijas, šiuo atveju, pelę.
Dabar eikime prie tvarkyklių kodo. Pirmas dalykas, kurį turime padaryti, yra importuoti nuosekliąsias ir pyautogui bibliotekas, o tada iš nuosekliosios bibliotekos turime nustatyti bendravimo prievadą, kurio perdavimo sparta yra 9600, tas pats, kas „ Bluetooth.serial “ veikia. Tam turite prijungti „Bluetooth“ modulį prie savo sistemos, tada sistemos nustatymuose turite patikrinti, prie kurio „com“ prievado jis prijungtas.
Kitas dalykas yra skaityti nuoseklųjį ryšį iš „Bluetooth“ į sistemą ir nuolat jį palaikyti, o likusį kodą palaikykite nepertraukiamai, o „1“ pagalba.
Kaip minėta anksčiau, „Arduino“ siunčia 8 bitus, pirmiausia 6 koordinates ir du paskutinius - paspaudimo mygtukų būseną. Taigi perskaitykite visus bitus naudodami ser.read ir nustatykite jo ilgį iki 8 bitų.
Tada padalykite žymeklio koordinačių ir paspaudimų bitus, supjaustydami juos, tada dar labiau supjaustykite žymeklio bitus į X ir Y koordinates atskirai. Tas pats pasakytina apie kairįjį ir dešinįjį paspaudimus.
Dabar iš komunikacijos gauname baitų eilutę ir turime ją konvertuoti į sveiką skaičių, kad jie tilptų į koordinates. Mes tai darome dekoduodami ir tada sudarydami tipus į sveikus skaičius.
Dabar perkelkite žymeklį mes naudojame pyautogui moveto funkciją, kuri turėjo kaip argumentų tas sveikasis koordinates ir perkelia žymeklį į tą padėtį.
Kitas patikrinimas, ar nėra paspaudimų, tai darome naudodami paskutinius du bitus ir pyautogui paspaudimo funkciją, jo numatytasis paspaudimas yra kairysis, tačiau mes galime jį nustatyti į dešinę, deklaruodami mygtuko vertę į dešinę, taip pat galime nustatyti paspaudimų skaičių nustatykite dvigubą paspaudimą nustatydami paspaudimų parametrą į 2.
Žemiau yra visas „Python“ kodas, kurį reikia paleisti kompiuteryje:
importuoti serijinį importą pyautogui ser = serialas. Serija ('com3', 9600), o 1: k = ser. skaityti (8) žymeklis = k spustelėkite = k x = žymeklis y = žymeklis l = spustelėkite r = spustelėkite xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor), jei l == 49: pyautogui.click (paspaudimai = 2) elif r = = 49: pyautogui.click (mygtukas = 'dešinė', spustelėjimai = 2)
„Arduino Air Mouse“ bandymas
Taigi, jei norite valdyti „Air Mouse“, prie jo prijunkite maitinimo šaltinį. Tai gali būti iš „Arduino Nano“ USB lizdo arba iš 5v reguliuojamo maitinimo šaltinio naudojant „7805 IC“. Tada paleiskite „python“ tvarkyklės scenarijų nustatydami „com“ prievadą, prie kurio prijungtas „Bluetooth“. Vykdant scenarijų, „Bluetooth“ mirksėjimas pamatytų laiko vėlavimą, tai reiškia, kad jis prijungtas prie jūsų sistemos. Tada jį valdydami spustelėkite paleidimo mygtuką ir pamatysite, kad koordinačių padėtis pasikeis. Jei norite spustelėti kairįjį arba dešinįjį mygtuką, tada pirmiausia paspauskite kairįjį arba dešinįjį mygtuką ir suveikimo mygtuką kartu, pamatysite paspaudimo veiksmą pakeista žymeklio vieta.
Patikrinkite išsamų darbo vaizdo įrašą žemiau.