- Priekšnoteikumi
- Ķēdes shēma
- Procesa plūsma gaisa pelei
- Arduino Air Mouse programmēšana
- Python draivera skripts
- Arduino Air Mouse testēšana
Kādreiz esat domājis, kā mūsu pasaule virzās uz visaptverošo realitāti. Mēs nepārtraukti atrodam jaunus veidus un metodes, kā mijiedarboties ar apkārtējo, izmantojot virtuālo realitāti, jaukto realitāti, paplašināto realitāti uc Jaunas ierīces katru dienu nāk klajā ar šīm ātrā tempa tehnoloģijām, lai ieskaidrotu mūs ar jaunajām interaktīvajām tehnoloģijām.
Šīs visaptverošās tehnoloģijas tiek izmantotas spēlēs, interaktīvās aktivitātēs, izklaidēs un daudzās citās lietojumprogrammās. Šajā apmācībā mēs uzzināsim par šādu interaktīvu metodi, kas dod jums jaunu veidu, kā mijiedarboties ar savu sistēmu, nevis garlaicīgas peles izmantošanu. Mūsu spēļu geekiem ir jāzina, ka dažus gadus atpakaļ Nintendo spēļu uzņēmums pārdod 3D interaktīvas metodes ideju mijiedarbībai ar savām konsolēm, izmantojot rokas kontrolieri, kas pazīstams kā Wii kontrolieris. Tas izmanto akselerometru, lai atrastu spēles žestus un bezvadu režīmā tos nosūtītu uz sistēmu. Ja vēlaties uzzināt vairāk par šo tehnoloģiju, varat iepazīties ar viņu patentu EP1854518B1, tas sniegs jums pilnīgu priekšstatu par šīs tehnoloģijas darbību.
Iedvesmojoties no šīs idejas, mēs izveidosim "gaisa peli", lai mijiedarbotos ar sistēmām, vienkārši pārvietojot konsoli gaisā, bet tā vietā, lai izmantotu trīsdimensiju koordinātu atsauces, mēs izmantosim tikai divdimensiju koordinātu atsauces, tāpēc mēs varam atdarināt datorpeles darbības, jo pele darbojas divās dimensijās X un Y.
Šīs bezvadu 3D gaisa peles jēdziens ir ļoti vienkāršs. Mēs izmantosim akselerometru, lai iegūtu “Gaisa peles” darbību un kustību paātrinājuma vērtību pa x un y asi, un pēc tam, pamatojoties uz akselerometru, mēs kontrolēsim peles kursoru un veiksim noteiktas darbības ar pitona programmatūras draiveru palīdzību, kas darbojas datorā.
Priekšnoteikumi
- Arduino Nano (jebkurš modelis)
- Akselerometra ADXL335 modulis
- Bluetooth HC-05 modulis
- Spiediet pogas
- Python Instalēts dators
Lai uzzinātu vairāk par python instalēšanu datorā, izpildiet iepriekšējo pamācību par Arduino-Python LED vadību.
Ķēdes shēma
Lai vadītu datoru ar rokas kustībām, nepieciešams akselerometrs, kas paātrinājumu pa X un Y asi izdala, un lai visa sistēma būtu bezvadu, signāla bezvadu pārsūtīšanai uz jūsu sistēmu tiek izmantots Bluetooth modulis.
Šeit tiek izmantots ADXL335 akselerometrs, tas ir uz MEMS balstīts trīskāršās ass modulis, kas paātrina X, Y un Z asis, bet, kā iepriekš teicām, lai kontrolētu peli, paātrinājums būs vajadzīgs tikai pa X un Y asi. Uzziniet vairāk par ADXL335 akselerometra lietošanu kopā ar Arduino ar mūsu iepriekšējiem projektiem:
- Arduino bāzes transportlīdzekļu trauksmes trauksmes sistēma, izmantojot GPS, GSM un akselerometru
- Spēle Ping Pong, izmantojot Arduino un Akselerometru
- Akselerometra vadīts robots ar rokas žestu, izmantojot Arduino
- Zemestrīces detektora trauksme, izmantojot Arduino
Šeit akselerometra Xout un Yout tapas ir savienotas ar Arduino analogajām, A0 un A1 tapām un signālu pārraidīšanai no Arduino uz sistēmu šeit tiek izmantots Bluetooth modulis HC-05, jo Bluetooth darbojas pār Tx un Rx kontaktu savienojumi, tāpēc mēs izmantojam programmatūras sērijveida tapas D2 un D3. Tas ir savienots, izmantojot programmatūras sēriju, jo, ja mēs savienojam Bluetooth ar aparatūras sēriju un sākam iegūt rādījumus virs pitona konsoles, tas parādīs kļūdas par neatbilstošu datu pārraides ātrumu, jo Bluetooth sazināsies ar pitonu ar savu pārraides ātrumu. Uzziniet vairāk par Bluetooth moduļa izmantošanu, veicot dažādus Bluetooth balstītus projektus, izmantojot dažādus mikrokontrollerus, tostarp Arduino.
Šeit mēs esam izmantojuši trīs spiedpogas - vienu gaisa peles aktivizēšanai un divas citas kreisās un labās puses klikšķiem, kā parādīts zemāk esošajā attēlā:
Procesa plūsma gaisa pelei
Plūsmas diagramma parāda Arduino bāzes Air Mouse procesa plūsmu:
1. Sistēma nepārtraukti pārbauda, vai nav nospiests mehāniskais sprūda, līdz tas nav nospiests, mēs varam normāli strādāt ar datora peli.
2. Kad sistēma nosaka pogas nospiešanu, peles vadība tiek pārsūtīta uz gaisa peli.
3. Nospiežot sprūda taustiņu, sistēma sāk peles rādījumus pārsūtīt uz datoru. Sistēmas nolasījums sastāv no akselerometra rādījumiem un kreisā un labā klikšķa rādījumiem.
4. Sistēmas rādījumus veido 1 baita vai 8 bitu datu plūsma, kurā pirmie trīs biti sastāv no X koordinātām, otrie trīs biti sastāv no Y koordinātām, otrais pēdējais bits ir statusa bits, lai iegūtu peles kreisā klikšķa statuss un pēdējais bits ir statusa bits, lai iegūtu labā klikšķa statusu.
5. Pirmo trīs bitu, ti, X-koordinātu, vērtība var svārstīties no 100 <= Xcord <= 999, savukārt Y-koordinātu vērtība var būt no 100 <= Ycord <= 800. Labā un kreisā klikšķa vērtības ir binārās vērtības vai nu 0, vai 1, kurās 1 norāda, ka klikšķis ir veikts, un 0, kuru lietotājs neveic.
6. Lai neļautu pogas atlēcienam ietekmēt kursora pozīciju, pēc katra peles sprūda pogas klikšķa tiek saglabāta zināma 4 sekunžu aizture.
7. Lai noklikšķinātu ar peles labo un kreiso taustiņu gaisa pelē, mums vispirms ir jānospiež vai nu kreisā, vai labā poga, un pēc tam mums jānospiež sprūda poga, lai pārietu uz gaisa peles pozīciju tur, kur mēs vēlamies.
Arduino Air Mouse programmēšana
Arduino ir jāprogrammē lasīt paātrinājuma vērtības X un Y asīs. Pabeigta programma tiek dota beigās, turpmāk ir svarīgi fragmentus no kodu.
Globālo mainīgo iestatīšana
Kā jau iepriekš teikts, mēs savienosim Bluetooth moduli ar programmatūras sērijas tapām. Tātad, lai iestatītu programmatūras sēriju, mums jādeklarē programmatūras sērijveida bibliotēka un jāiestata Tx un Rx tapas. Arduino Nano un Uno Pin 2 un 3 var darboties kā programmatūras sērija. Pēc tam mēs deklarējam Bluetooth objektu no programmatūras sērijveida bibliotēkas, lai iestatītu Tx un Rx tapu.
# iekļaut
Atcelt iestatīšanu ()
Jo iestatīšanas funkciju, mēs gatavojamies noteikt mainīgos pateikt programmu, vai tie darbosies kā ieejas vai izejas. Sprūda poga tiks iestatīta kā ievades ievilkšana, un kreisais un labais klikšķis tiek deklarēts kā ievade un iestatīts kā augsts, lai tie darbotos kā ievades ievilkšana.
Iestatiet arī sērijas un Bluetooth sakaru pārraides ātrumu uz 9600.
void setup () { pinMode (x, INPUT); pinMode (y, INPUT); pinMode (trigeris, INPUT_PULLUP) pinMode (lclick, INPUT); pinMode (rclick, INPUT); pinMode (vadīts, OUTPUT); digitalWrite (lclick, HIGH); digitalWrite (rclick, HIGH); Sērijas sākums (9600); bluetooth.begin (9600); }
Tukšā cilpa ()
Tā kā mums būtu nepieciešama aktivizēšanas poga, lai informētu, kad mums ir jānosūta sistēmai datu straume, mēs iestatījām visu kodu kamēr cilpa iekšpusē , kas nepārtraukti uzraudzīs uzvilkšanas trigera digitālo stāvokli, jo tas ir zems, tas būs nodot to tālāk apstrādei.
Tā kā mēs esam pievienojuši LED, lai informētu mūs par sistēmas statusu, kad tiek nospiesta sprūda poga, mēs sākotnēji iestatījām vadu zemu, kamēr cilpa ārpus , kā tas ir noklusējuma stāvoklis, un augstu, kamēr cilpa ir iekšpusē , kas iedegs LED ikreiz, kad tiek nospiesta sprūda poga.
Lai nolasītu kreiso un labo klikšķu pogas statusu, mēs esam globāli deklarējuši divus mainīgos lclick un rclick, kuru vērtības sākotnēji tika iestatītas uz 0.
Un cilpas , kas vērtību šo mainīgo atbilstoši digitālo statusu kreiso un labo klikšķi pogu, lai pārbaudītu, vai pogas nospiests vai nav.
Mēs varētu nolasīt akselerometra X un Y izejas tapu vērtības, izmantojot analogRead funkciju, un šīs vērtības piesaistītu ekrāna izmēram, lai peles rādītājs pārvietotos pa visu ekrānu. Tā kā ekrāna izmērs ir ekrānā redzamie pikseļi, mums tas ir attiecīgi jāiestata un, tā kā izejas vērtībai ir jābūt trīs cipariem, mēs apzināti esam iestatījuši X diapazonu kā 100 <= X <= 999 un līdzīgi vērtība Y kā 100 <= Y <= 800. Atcerieties, ka pikseļi tiek lasīti no augšējā kreisā stūra, ti, augšējā kreisajā stūrī ir vērtība (0,0), bet, tā kā mēs esam deklarējuši trīs x un y ciparus, mūsu vērtības tiks nolasītas no punkta (100,100).
Turklāt, izmantojot Serial.print un bluetooth.print funkcijas, izdrukājiet koordinātu vērtību un klikšķa statusu, izmantojot seriālo un Bluetooth, izmantojot funkcijas Serial.print un bluetooth.print, kuras palīdz iegūt vērtības seriālajā monitorā un jūsu sistēmā, izmantojot Bluetooth.
Beidzot pogas atsitiena dēļ var atkārtoties viena vērtība, kas liktu peles kursoram kavēties virs vienas pozīcijas, tāpēc, lai atbrīvotos no tā, mums jāpievieno šī aizkave.
void loop () { digitalWrite (vadīts, LOW); while (digitalRead (trigeris) == LOW) { digitalWrite (vadīts, AUGSTS); lstate = digitalRead (lclick); rstate = digitalRead (rclick); xh = analogRead (x); yh = analogLasīt (y); xcord = karte (xh, 286 429 100 9999); ycord = karte (yh, 282 427 100 800); Serial.print (xcord); Sērijas.druka (ycord); if (lstate == ZEMS) sērijas.druka (1); else Serial.print (0); if (rstate == ZEMS) sērijas.druka (1); else Serial.print (0); bluetooth.print (xcord); bluetooth.print (ycord); if (lstate == ZEMS) bluetooth.print (1); cits bluetooth.print (0); if (rstate == ZEMS) bluetooth.print (1); else bluetooth.print (0); kavēšanās (4000); }}
Python draivera skripts
Līdz šim mēs esam pabeiguši aparatūru un tās programmaparatūras daļu, tagad, lai darbotos gaisa pele, mums ir nepieciešams draivera skripts, kas varētu atšifrēt gaisa peles signālus kursora kustībās, tāpēc šim nolūkam mēs izvēlējāmies Python. Python ir skriptu valoda, un ar skriptu šeit mēs domājam, ka tas mums palīdz iegūt citas programmas vadību, jo šeit mēs kontrolējam peles kursoru.
Tātad atveriet savu python apvalku un instalējiet šādas bibliotēkas, izmantojot zemāk esošās komandas.
pip instalēt sērijas pip instalēt pyautogui
Sērijas ir bibliotēka python, kas palīdz mums, lai saņemtu datus no sērijas saskarnes, piemēram, com ostām, kā arī ļauj mums manipulēt ar to tā pyautogui ir bibliotēka python iegūt kontroli pār GUI funkcijas, kas šajā gadījumā, peli.
Tagad pievērsīsimies draiveru kodam. Pirmā lieta, kas mums jādara, ir sērijveida un pyautogui bibliotēku importēšana, un pēc tam no seriālās bibliotēkas mums jāiestata komunicēšanas ports ar 9600 bitu pārraides ātrumu, tas pats, kas Bluetooth.serial darbojas. Lai to izdarītu, jums ir jāpievieno Bluetooth modulis savai sistēmai, un pēc tam sistēmas iestatījumos jums jāpārbauda, ar kuru portu tas ir savienots.
Nākamā lieta ir nolasīt sērijveida sakarus no Bluetooth uz sistēmu un nepārtraukti uzturēt pārējo kodu nepārtrauktā kontūrā, izmantojot 1.
Kā jau iepriekš minēts, ka Arduino sūta 8 bitus, pirmie 6 koordinātām un pēdējie divi klikšķu pogu statusam. Tātad, izmantojot ser.read, izlasiet visus bitus un iestatiet tā garumu līdz 8 bitiem.
Pēc tam sadaliet kursora koordinātu un klikšķu bitus, tos sagriežot, un pēc tam atsevišķi sadaliet kursora bitus X un Y koordinātēs. Tas pats attiecas uz kreiso un labo klikšķi.
Tagad, izmantojot komunikāciju, mēs iegūstam baitu virkni, un mums tas jāpārvērš par veselu skaitli, lai tie varētu iekļauties koordinātās, mēs to darām, tos dekodējot un pēc tam ierakstot tos veselos skaitļos.
Tagad, lai pārvietotu kursoru, mēs izmantojam pyautogui moveto funkciju, kas kā argumentus ņem šīs skaitļa koordinātas un pārvieto kursoru šajā pozīcijā.
Pēc tam pārbaudiet klikšķus, mēs to darām, izmantojot pēdējos divus bitus un pyautogui klikšķa funkciju, tā noklusējuma klikšķis ir viens, taču mēs to varam iestatīt pa labi, deklarējot pogas vērtību pa labi, mēs varam arī noteikt klikšķu skaitu iestatiet to ar dubultklikšķi, iestatot klikšķu parametru uz 2.
Zemāk ir pilns Python kods, kas palaižams datorā:
importēt sērijas importēt pyautogui ser = sērijas. Seriāls ('com3', 9600), kamēr 1: k = ser. lasīt (8) kursors = k klikšķis = k x = kursors y = kursors l = klikšķis r = klikšķis xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor, ycor), ja l == 49: pyautogui.click (klikšķi = 2) elif r = = 49: pyautogui.click (poga = 'pa labi', noklikšķina = 2)
Arduino Air Mouse testēšana
Tātad, lai darbinātu Air Mouse, pievienojiet tam strāvas avotu. Tas var būt no Arduino Nano USB slota vai no 5v regulētā barošanas avota, izmantojot 7805 IC. Pēc tam palaidiet python draivera skriptu, iestatot com portu, ar kuru ir savienots jūsu Bluetooth. Skripta palaišanas laikā, mirgot Bluetooth, redzēsiet laika nobīdi, tas nozīmē, ka tas ir savienots ar jūsu sistēmu. Pēc tam, lai to darbinātu, noklikšķiniet uz aktivizēšanas pogas, un jūs redzēsiet, ka koordinātu pozīcija mainīsies, un, ja vēlaties kreiso vai labo klikšķi, tad vispirms nospiediet kreiso vai labo spiedpogu un sprūda pogu kopā, jūs redzēsit klikšķa darbību mainīta kursora atrašanās vieta.
Pārbaudiet detalizēto darba video zemāk.