- Potrebné materiály
- Ako funguje rotačný kódovač?
- Typy rotačného kódovacieho zariadenia
- KY-040 Rotačný kódovací konektor a popis
- Schéma zapojenia rotačného enkodéra Arduino
- Programovanie vášho Arduina pre Rotary Encoder
- Práca rotačného enkodéra s Arduino
Otočný je vstupné zariadenie, ktoré pomáha užívateľovi k interakcii so systémom. Vyzerá skôr ako rádiový potenciometer, ale na výstup dáva sériu impulzov, vďaka čomu je jeho aplikácia jedinečná. Keď je gombík enkodéra otočený, otáča sa vo forme malých krokov, čo mu pomáha pri ovládaní krokovým / servomotorom, navigácii v sekvencii ponúk a zvyšovaní / znižovaní hodnoty čísla a oveľa viac.
V tomto článku sa dozvieme o rôznych druhoch rotačných kódovačov a o tom, ako fungujú. Taktiež ho prepojíme s Arduinom a budeme riadiť hodnotu celého čísla otáčaním enkodéra a zobrazovať jeho hodnotu na 16 * 2 LCD obrazovke. Na konci tohto tutoriálu budete spokojní s používaním Rotary Encoder pre vaše projekty. Tak poďme na to…
Potrebné materiály
- Rotačný kódovač (KY-040)
- Arduino UNO
- 16 * 2 alfanumerický LCD
- Potenciometer 10k
- Nepál
- Pripojovacie vodiče
Ako funguje rotačný kódovač?
Rotačný kódovač je elektromechanický prevodník, čo znamená, že prevádza mechanické pohyby na elektronické impulzy. Skladá sa z gombíka, ktorý sa pri otáčaní bude krok za krokom pohybovať a vytvárať sekvenciu sledov impulzov s preddefinovanou šírkou pre každý krok. Existuje mnoho typov kódovacích zariadení, z ktorých každý má svoj vlastný pracovný mechanizmus. O týchto typoch sa dozvieme neskôr, ale teraz sa sústreďme iba na inkrementálny kódovací modul KY040, pretože ho používame pre náš výukový program.
Ďalej je uvedená vnútorná mechanická štruktúra kodéra. V zásade sa skladá z kruhového disku (šedej farby) s vodivými podložkami (medenej farby) umiestnenými na vrchu tohto kruhového disku. Tieto vodivé podložky sú umiestnené v rovnakej vzdialenosti, ako je uvedené nižšie. Výstupné kolíky sú pripevnené na vrchu tohto kruhového disku takým spôsobom, že pri otáčaní gombíka sa vodivé podložky dostanú do kontaktu s výstupnými kolíkmi. Tu sú dva výstupné kolíky, výstup A a výstup B, ako je znázornené na obrázku nižšie.
Výstupná krivka produkovaná výstupným pinom A a výstupom B je zobrazená v modrej a zelenej farbe. Keď je vodivá podložka priamo pod kolíkom, ide vysoko, čo vedie k jeho včasnému pôsobeniu, a keď sa vodivá podložka pohybuje preč, kolík klesá nízko, čo vedie k dobe vypnutia krivky znázornenej vyššie. Teraz, keď spočítame počet impulzov, budeme schopní určiť, o koľko krokov bol kodér presunutý.
Teraz môže vzniknúť otázka, prečo potrebujeme dva impulzné signály, keď stačí jeden na to, aby sme spočítali počet krokov vykonaných pri otáčaní gombíka. Je to tak preto, lebo musíme zistiť, ktorým smerom sa gombík otočil. Ak sa pozriete na tieto dva impulzy, môžete si všimnúť, že obidva sú 90 ° mimo fázu. Preto keď je gombík otočený v smere hodinových ručičiek, výstup A pôjde najskôr vysoko a keď je gombík otočený proti smeru hodinových ručičiek, výstup B pôjde najskôr vysoko.
Typy rotačného kódovacieho zariadenia
Na trhu existuje veľa druhov rotačných kódovačov, ktoré si konštruktér môže zvoliť podľa svojej aplikácie. Najbežnejšie typy sú uvedené nižšie
- Inkrementálny kódovač
- Absolútny kódovač
- Magnetický kódovač
- Optický kódovač
- Laserový kódovač
Tieto kódovacie zariadenia sú klasifikované na základe výstupného signálu a snímacej technológie, prírastkové snímače a absolútne snímače sú klasifikované na základe výstupného signálu a magnetické, optické a laserové snímače sú klasifikované na základe snímacej technológie. Encoder tu používa prírastkové typ snímača.
KY-040 Rotačný kódovací konektor a popis
Pinouty rotačného kódovača inkrementálneho typu KY-040 sú uvedené nižšie
Prvé dva piny (zem a Vcc) sa používajú na napájanie enkodéra, zvyčajne sa používa napájanie + 5 V. Okrem otáčania gombíka v smere hodinových ručičiek a proti smeru hodinových ručičiek má kodér aj prepínač (aktívne nízko), ktorý je možné stlačiť stlačením gombíka vo vnútri. Signál z tohto prepínača sa získava cez pin 3 (prepínač). Nakoniec má dva výstupné piny, ktoré vytvárajú krivky, ako už bolo uvedené vyššie. Teraz sa naučíme, ako to prepojiť s Arduinom.
Schéma zapojenia rotačného enkodéra Arduino
Kompletná schéma zapojenia pre interfacing rotačného enkodéra s Arduino je zobrazená na obrázku nižšie
Rotačný kódovač má 5 pinov v poradí uvedenom na štítku vyššie. Prvé dva kolíky sú uzemnenie a Vcc, ktoré sú pripojené k uzemneniu a + 5 V kolíku Arduina. Spínač kódovacieho zariadenia je pripojený k digitálnemu kolíku D10 a je tiež vysoko zatiahnutý cez rezistor 1k. Dva výstupné piny sú pripojené k D9, respektíve D8.
Na zobrazenie hodnoty premennej, ktorá sa bude zvyšovať alebo znižovať otáčaním rotačného kódovacieho zariadenia, potrebujeme zobrazovací modul. Ten, ktorý sa tu používa, je bežne dostupný 16 * 2 numerický LCD displej. Pripojili sme displej, ktorý sa má prevádzkovať v 4-bitovom režime, a napájali sme ho pomocou kolíka + 5V spoločnosti Arduino. Potenciometer slúži na nastavenie kontrastu LCD displeja. Ak sa chcete dozvedieť viac o prepojení LCD displeja s Arduinom, kliknite na odkaz. Celý obvod je možné postaviť na vrchnej doske, môj vzhľad vyzeral asi takto dole, akonáhle budú všetky pripojenia hotové.
Programovanie vášho Arduina pre Rotary Encoder
Je pomerne ľahké a priamočiare naprogramovať dosku Arduino na prepojenie Rotary Encoderu, ak ste pochopili princíp práce Rotary Encoder. Musíme jednoducho prečítať počet impulzov, aby sme určili, koľko otáčok kódovač urobil, a skontrolovať, ktorý impulz išiel najskôr vysoko, aby sme zistili, ktorým smerom sa kódovač otáčal. V tomto návode zobrazíme číslo, ktoré sa zvyšuje alebo znižuje v prvom riadku LCD a smer kodéra v druhom riadku. Kompletný program pre to isté možno nájsť v dolnej časti tejto stránky s video demonštrácie, to nevyžaduje žiadne knižnice. Poďme teraz program rozdeliť na malé kúsky, aby sme pochopili fungovanie.
Pretože sme použili LCD displej, zahrnieme knižnicu tekutých kryštálov, ktorá je štandardne prítomná v Arduino IDE. Potom definujeme kolíky na pripojenie LCD k Arduinu. Nakoniec na týchto pinoch inicializujeme LCD displej.
#include
Vedľa vnútri nastavenie funkcie, sme zobrazenie úvodné správy na LCD obrazovke, a potom čakať na 2 sekundy tak, že správa je používateľ čitateľný. To zaisťuje správnu funkciu displeja LCD.
lcd.print ("Rotačný kódovač"); // Úvod Riadok správy 1 lcd.setCursor (0, 1); lcd.print ("S Arduinom"); // Úvod oneskorenia riadku správy 2 (2000); lcd.clear ();
Rotačný kódovač má tri výstupné piny, ktoré budú vstupnými piny pre Arduino. Tieto tri piny sú prepínač, výstup A a výstup B. Tie sú deklarovaná ako vstup pomocou pinMode funkciu, ako je uvedené nižšie.
// deklarácia režimu pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Vo vnútri funkcie nastavenia neplatnosti čítame stav výstupného pinu A, aby sme skontrolovali posledný stav pinu. Tieto informácie potom použijeme na porovnanie s novou hodnotou, aby sme skontrolovali, ktorý pin (výstup A alebo výstup B) sa dostal vysoko.
Previous_Output = digitalRead (Encoder_OuputA); // Prečítajte si pôvodnú hodnotu výstupu A
Nakoniec vo vnútri funkcie hlavnej slučky musíme porovnať hodnotu výstupu A a výstupu B s predchádzajúcim výstupom, aby sme skontrolovali, ktorý z nich ide ako prvý vysoko. To sa dá urobiť jednoduchým porovnaním hodnoty prúdového výstupu A a B s predchádzajúcim výstupom, ako je uvedené nižšie.
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 ("v smere hodinových ručičiek"); }
Vo vyššie uvedenom kóde sa vykoná podmienka druhá, ak sa výstup B zmenil od predchádzajúceho výstupu. V takom prípade sa hodnota premennej kódovacieho zariadenia zvýši a na displeji LCD sa zobrazí, že sa kódovací kód otáča v smere hodinových ručičiek . Rovnako v prípade, že ak podmienka nie je splnená, v následnom iného stave sme decrement premennú a displej, ktorý kodér sa otáča v protismere hodinových ručičiek smerom. Kód rovnakého kódu je uvedený nižšie.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("proti smeru hodinových ručičiek"); } }
Nakoniec musíme na konci hlavnej slučky aktualizovať predchádzajúcu výstupnú hodnotu o aktuálnu výstupnú hodnotu, aby sa slučka mohla opakovať s rovnakou logikou. Nasledujúci kód robí to isté
Previous_Output = digitalRead (Encoder_OuputA);
Ďalšou voliteľnou vecou je skontrolovať, či je stlačený prepínač na kódovači. Toto je možné monitorovať kontrolou prepínacieho kolíka na rotačnom kódovači. Tento špendlík je aktívny nízky špendlík, čo znamená, že sa po stlačení tlačidla zníži. Ak nie je stlačené, kolík zostáva vysoký, tiež sme použili pull up rezistor, aby sme sa uistili, že zostane vysoký, keď nie je stlačený spínač, čím sa vyhneme stavu s pohyblivou rádovou čiarkou.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Prepínač je stlačený"); }
Práca rotačného enkodéra s Arduino
Keď je hardvér a kód pripravený, jednoducho nahrajte kód na dosku Arduino a zapnite dosku Arduino. Môžete ho napájať buď pomocou kábla USB, alebo pomocou 12V adaptéra. Po napájaní by sa na displeji LCD malo zobraziť úvodné hlásenie a potom by malo zostať prázdne. Teraz otočte rotačný kódovač a mali by ste vidieť, že hodnota sa začína zvyšovať alebo znižovať na základe smeru, ktorým rotujete. Druhý riadok vám ukáže, či sa kódovač otáča v smere alebo proti smeru hodinových ručičiek. Obrázok dole ukazuje to isté
Rovnako po stlačení tlačidla sa v druhom riadku zobrazí, že je tlačidlo stlačené. Kompletné fungovanie nájdete vo videu nižšie. Toto je iba ukážkový program na prepojenie kodéra s Arduinom a na kontrolu, či funguje podľa očakávania. Hneď ako sa dostanete sem, mali by ste byť schopní používať kódovač pre akýkoľvek váš projekt a podľa toho programovať.
Dúfam, že ste pochopili návod a veci fungovali tak, ako majú. Ak máte akékoľvek problémy, použite technickú pomoc v sekcii komentárov alebo na fórach.