- Reikalingos medžiagos
- Kaip veikia „Rotary Encoder“?
- Rotacinio kodavimo įrenginio tipai
- KY-040 rotacinio kodavimo įrenginio kištukas ir aprašymas
- „Arduino“ sukamojo kodavimo grandinės schema
- „Arduino for Rotary Encoder“ programavimas
- „Rotary Encoder“ su „Arduino“ darbas
Sukamasis kodavimo yra įvesties įrenginys, kuris padeda naudotojui bendrauti su sistema. Tai labiau panašu į radijo potenciometrą, tačiau jis išleidžia impulsų grupę, todėl jo taikymas yra unikalus. Pasukus kodavimo rankenėlę, jis sukasi mažais žingsneliais, o tai padeda jį naudoti žingsninio / servo variklio valdymui, naršymui per meniu seką ir skaičiaus vertės padidinimui / sumažinimui ir daug daugiau.
Šiame straipsnyje mes sužinosime apie skirtingus „Rotary Encoder“ tipus ir kaip jie veikia. Mes taip pat susiesime jį su „Arduino“ ir valdysime sveiko skaičiaus vertę sukdami „Encoder“ ir parodysime jo vertę 16 * 2 LCD ekrane. Šios pamokos pabaigoje jums bus patogu savo projektams naudoti Rotary Encoder. Taigi pradėkime…
Reikalingos medžiagos
- Rotacinis koduotuvas (KY-040)
- „Arduino UNO“
- 16 * 2 raidinis skaitmeninis LCD ekranas
- Potenciometras 10k
- Bandomoji Lenta
- Jungiamieji laidai
Kaip veikia „Rotary Encoder“?
Rotacinis kodatorius yra elektromechaninis keitiklis, reiškiantis, kad jis mechaninius judesius paverčia elektroniniais impulsais. Jį sudaro rankenėlė, kuri sukdamasi judės žingsnis po žingsnio ir kiekvienam žingsniui sudarys impulsinių traukinių seką su iš anksto nustatytu pločiu. Yra daugybė kodavimo įrenginių, kurių kiekvienas turi savo darbo mechanizmą, apie tipus sužinosime vėliau, bet kol kas sutelkime dėmesį tik į „ KY040 Incremental Encoder“, nes jį naudojame pamokoms.
Vidinė mechaninė enkoderio struktūra parodyta žemiau. Iš esmės jis susideda iš apskrito disko (pilkos spalvos) su laidžiomis pagalvėlėmis (vario spalvos), dedamomis ant šio apskrito disko. Šie laidūs įklotai dedami vienodu atstumu, kaip parodyta žemiau. Išvesties kaiščiai yra pritvirtinti ant šio apskrito disko taip, kad sukant rankenėlę laidžiosios pagalvėlės liečiasi su išvesties kaiščiais. Čia yra du išvesties kaiščiai, išėjimas A ir išėjimas B, kaip parodyta paveikslėlyje žemiau.
Išvesties kaiščių A ir B išvesties bangos forma yra atitinkamai mėlynos ir žalios spalvos. Kai laidus padėklas yra tiesiai po kaiščiu, jis eina aukštai, todėl jis laiku ir, kai laidus padėklas nutolsta, kaištis eina žemai, dėl to išjungiamas aukščiau nurodytos bangos laikas. Dabar, jei suskaičiuosime impulsų skaičių, galėsime nustatyti, kiek kodavimo įrenginys buvo perkeltas.
Dabar gali kilti klausimas, kam mums reikalingi du impulsiniai signalai, kai pakanka vieno, kad suskaičiuotume žingsnių, atliktų sukant rankenėlę, skaičių. Taip yra todėl, kad turime nustatyti, kuria kryptimi sukama rankenėlė. Pažvelgę į du impulsus, galite pastebėti, kad jie abu yra 90 ° fazės ribose. Taigi, pasukus rankenėlę pagal laikrodžio rodyklę, išėjimas A pirmiausia pakils aukštai, o kai rankeną pasuksite prieš laikrodžio rodyklę, išėjimas B pirmiausia pakils aukštai.
Rotacinio kodavimo įrenginio tipai
Rinkoje yra daugybė sukamojo kodavimo įrenginių tipų, kuriuos dizaineris gali pasirinkti vieną pagal savo taikymą. Toliau pateikiami dažniausiai pasitaikantys tipai
- Prieauginis koduotojas
- Absoliutusis koduotojas
- Magnetinis koduotuvas
- Optinis koduotojas
- Lazerinis koduotuvas
Šie kodavimo įrenginiai klasifikuojami pagal išvesties signalo ir jutimo technologiją, papildomasis koduotojas ir absoliutusis kodavimas - pagal išvesties signalą, o magnetinis, optinis ir lazerinis kodavimo įrenginiai - pagal jutimo technologiją. Čia naudojamas koduotojas yra inkrementinio tipo koduotojas.
KY-040 rotacinio kodavimo įrenginio kištukas ir aprašymas
KY-040 Incremental tipo rotacinio kodavimo įrenginio kontaktai parodyti žemiau
Pirmieji du kaiščiai („Ground“ ir „Vcc“) naudojami enkoderiui maitinti, paprastai naudojamas + 5 V maitinimas. Be rankenos pasukimo pagal laikrodžio rodyklę ir prieš laikrodžio rodyklę, kodavimo įrenginyje taip pat yra jungiklis („Active low“), kurį galima paspausti paspaudus viduje esančią rankenėlę. Signalas iš šio jungiklio gaunamas per kaištį 3 (jungiklis). Galiausiai jis turi du išvesties kaiščius, kurie sukuria bangos formas, kaip jau buvo aptarta aukščiau. Dabar leiskite mums sužinoti, kaip jį susieti su „Arduino“.
„Arduino“ sukamojo kodavimo grandinės schema
Visa „ Rotary Encoder“ ir „Arduino“ sąsajos schema parodyta toliau pateiktame paveikslėlyje
Rotary Encoder turi 5 kaiščius tokia tvarka, kaip nurodyta aukščiau esančioje etiketėje. Pirmieji du kaiščiai yra „Ground“ ir „Vcc“, kurie yra prijungti prie „Arduino“ žemės ir + 5 V kaiščio. Kodavimo jungiklis prijungtas prie skaitmeninio kaiščio D10 ir taip pat yra aukštai ištrauktas per 1k rezistorių. Du išvesties kaiščiai yra atitinkamai prijungti prie D9 ir D8.
Norint parodyti kintamojo vertę, kuri bus padidinta arba sumažinta sukant rotacinį kodavimo įrenginį, mums reikia rodymo modulio. Čia naudojamas dažniausiai naudojamas 16 * 2 raidžių skaitmeninis LCD ekranas. Mes prijungėme ekraną, kad jis veiktų 4 bitų režimu, ir maitiname jį naudodami „Arduino“ 5 V kaištį. Potenciometras naudojamas LCD ekrano kontrastui reguliuoti. Jei norite sužinoti daugiau apie LCD ekrano sąsają su „Arduino“, spustelėkite nuorodą. Visa grandinė gali būti pastatyta ant duonos lentos, mano žemiau atrodė kažkas panašaus, kai visi ryšiai buvo atlikti.
„Arduino for Rotary Encoder“ programavimas
Programuoti „Arduino“ plokštę sąsajai su „Rotary Encoder“ yra gana paprasta ir paprasta, jei supratote „Rotary Encoder“ veikimo principą. Mes tiesiog turime perskaityti impulsų skaičių, kad nustatytume, kiek apsisukimų padarė koderis, ir patikrinkite, kuris impulsas pirmiausia buvo aukštas, kad nustatytume, kuria kryptimi pasuktas koderis. Šioje pamokoje mes parodysime skaičių, kuris yra didinamas ar mažinamas pirmoje LCD ekrano eilėje, o koduotojo kryptį - antroje eilutėje. Visą tą patį atlikimo programą galite rasti šio puslapio apačioje su demonstraciniu vaizdo įrašu, jai nereikia jokios bibliotekos. Dabar suskaidykime programą į mažus gabalėlius, kad suprastume veikimą.
Kadangi mes naudojome skystųjų kristalų ekraną, įtraukiame skystųjų kristalų biblioteką, kuri pagal nutylėjimą yra „Arduino IDE“. Tada mes nustatome kaiščius, skirtus LCD prijungti prie „Arduino“. Galiausiai inicializuojame LCD ekraną ant tų kaiščių.
# įtraukti
Toliau sąrankos funkcijos metu LCD ekrane rodome įvadinį pranešimą ir palaukiame 2 sekundes, kad tas pranešimas būtų vartotojui įskaitomas. Taip siekiama užtikrinti, kad skystųjų kristalų ekranas veikia tinkamai.
lcd.print ("Rotary Encoder"); // Įvadinė pranešimų eilutė 1 lcd.setCursor (0, 1); lcd.print („Su Arduino“); // Intro Message line 2 delay (2000); lcd.clear ();
Rotaciniame kodavimo įrenginyje yra trys išvesties kaiščiai, kurie bus „Arduino“ INPUT kaiščiai. Šie trys kaiščiai yra atitinkamai jungiklis, išėjimas A ir išėjimas B. Jie deklaruojami kaip įvestis naudojant „ pinMode“ funkciją, kaip parodyta žemiau.
// pin režimo deklaracija pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Tuščiosios sąrankos funkcijos viduje mes skaitome išvesties A kaiščio būseną, kad patikrintume paskutinę kaiščio būseną. Tada naudosime šią informaciją, kad palygintume su nauja verte, kad patikrintume, kuris kaištis (A išvestis ar B išvestis) padidėjo.
Previous_Output = digitalRead (Encoder_OuputA); // Perskaitykite pradinę A produkcijos vertę
Galiausiai pagrindinės kilpos funkcijos viduje turime palyginti išėjimo A ir išvesties B vertes su ankstesne išvestimi, kad patikrintume, kuri iš jų yra aukšta. Tai galima padaryti paprasčiausiai palyginus A ir B srovės išvesties vertę su ankstesne išvestimi, kaip parodyta žemiau.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print („laikrodžio rodyklė“); }
Pirmiau pateiktame kode bus vykdoma antroji, jei sąlyga, jei B išvestis pasikeitė iš ankstesnio išėjimo. Tokiu atveju kodavimo įrenginio kintamojo vertė yra didinama ir skystųjų kristalų ekranas rodo, kad koduotojas pasuktas pagal laikrodžio rodyklę . Panašiai, jei tai , jei būklė nepavyksta, į vėlesnį kitam būklės mes Mažėja kintamąjį ir rodyti, kad kodavimo sukama į prieš laikrodžio kryptimi. To paties kodas parodytas žemiau.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print („prieš laikrodžio rodyklę“); } }
Galiausiai, pagrindinės kilpos pabaigoje turime atnaujinti ankstesnę išvesties vertę dabartine išvesties verte, kad kilpą būtų galima pakartoti ta pačia logika. Šis kodas daro tą patį
Previous_Output = digitalRead (Encoder_OuputA);
Kitas pasirenkamas dalykas yra patikrinti, ar nuspaustas kodavimo jungiklis. Tai galima stebėti tikrinant sukamojo koderio jungiklio kaištį. Šis kaištis yra aktyvus žemas kaištis, tai reiškia, kad paspaudus mygtuką jis bus žemas. Jei nespaustas kaištis lieka aukštas, mes taip pat naudojome traukimo rezistorių, kad įsitikintume, jog jis išlieka aukštas, kai jungiklis nėra nuspaustas, taip išvengiant slankiojo kablelio būklės.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Jungiklis paspaustas"); }
„Rotary Encoder“ su „Arduino“ darbas
Kai aparatinė įranga ir kodas bus paruošti, tiesiog įkelkite kodą į „Arduino“ plokštę ir įjunkite „Arduino“ valdybą. Jį galite maitinti per USB kabelį arba naudoti 12 V adapterį. Įjungus maitinimą, skystųjų kristalų ekranas turėtų rodyti įvadinį pranešimą ir tada tuščias. Dabar pasukite sukamąjį kodavimo įrenginį ir turėtumėte pamatyti, ar vertė pradedama didinti arba mažinti, atsižvelgiant į jūsų pasukimo kryptį. Antroji eilutė parodys, ar koderis sukamas pagal laikrodžio rodyklę, ar prieš laikrodžio rodyklę. Žemiau pateiktame paveikslėlyje matyti tas pats
Taip pat paspaudus mygtuką, antroje eilutėje bus rodoma, kad mygtukas yra paspaustas. Visą darbą galite rasti žemiau esančiame vaizdo įraše. Tai tik pavyzdinė programa, skirta susieti „Encoder“ su „Arduino“ ir patikrinti, ar jis veikia taip, kaip tikėtasi. Čia atvykę turėtumėte turėti galimybę naudoti koduotoją bet kuriame savo projekte ir atitinkamai programuoti.
Tikiuosi, kad supratote pamoką ir viskas veikė taip, kaip turėtų. Jei turite kokių nors problemų, naudokite komentarų skyrių arba forumus, kad gautumėte techninės pagalbos.