- Potřebné materiály
- Jak funguje rotační kodér?
- Typy rotačního kodéru
- Popis a popis otočného kodéru KY-040
- Obvodové schéma rotačního kodéru Arduino
- Programování vašeho Arduina pro Rotary Encoder
- Práce rotačního kodéru s Arduino
Otočný je vstupní zařízení, které pomáhá uživateli k interakci se systémem. Vypadá to spíš jako rádiový potenciometr, ale vydává řadu pulzů, díky nimž je jeho aplikace jedinečná. Když se otočí knoflík kodéru, otáčí se ve formě malých kroků, což mu pomáhá při ovládání krokového / servomotoru, procházení sekvencí nabídky a zvyšování / snižování hodnoty čísla a mnoho dalšího.
V tomto článku se dozvíme o různých typech rotačních kodérů a o tom, jak fungují. Také jej propojíme s Arduinem a budeme řídit hodnotu celého čísla otáčením kodéru a zobrazovat jeho hodnotu na 16 * 2 LCD obrazovce. Na konci tohoto tutoriálu vám bude pohodlné používat Rotary Encoder pro vaše projekty. Pojďme tedy začít…
Potřebné materiály
- Rotační enkodér (KY-040)
- Arduino UNO
- 16 * 2 alfanumerický LCD
- Potenciometr 10k
- Nepájivá deska
- Připojovací vodiče
Jak funguje rotační kodér?
Rotační kodér je elektromechanický měnič, což znamená, že převádí mechanické pohyby na elektronické pulsy. Skládá se z knoflíku, který se při otáčení bude krok za krokem pohybovat a vytvářet sekvenci sledů pulzů s předdefinovanou šířkou pro každý krok. Existuje mnoho typů kodérů, z nichž každý má svůj vlastní pracovní mechanismus, o typech se dozvíme později, ale prozatím se soustředíme pouze na inkrementální kodér KY040, protože jej používáme pro náš výukový program.
Níže je uvedena vnitřní mechanická struktura kodéru. V zásadě se skládá z kruhového disku (šedá barva) s vodivými podložkami (barva mědi) umístěnými na vrcholu tohoto kruhového disku. Tyto vodivé podložky jsou umístěny ve stejné vzdálenosti, jak je znázorněno níže. Výstupní kolíky jsou upevněny na horní části tohoto kruhového disku takovým způsobem, že při otáčení knoflíku se vodivé podložky dostanou do kontaktu s výstupními kolíky. Zde jsou dva výstupní kolíky, výstup A a výstup B, jak je znázorněno na obrázku níže.
Tvar vlny produkovaný výstupním pinem A a výstupem B je zobrazen v modré a zelené barvě. Když je vodivá podložka přímo pod kolíkem, jde vysoko, což vede k jeho času, a když se vodivá podložka pohybuje pryč, kolík klesá, což má za následek dobu mimo průběh znázorněný výše. Pokud nyní spočítáme počet pulzů, budeme schopni určit, o kolik kroků byl kodér přesunut.
Nyní může vyvstat otázka, proč potřebujeme dva pulzní signály, když jeden stačí k počítání počtu kroků při otáčení knoflíku. Je to proto, že musíme určit, kterým směrem byl knoflík otočen. Pokud se podíváte na tyto dva impulsy, můžete si všimnout, že oba jsou 90 ° mimo fázi. Proto když se knoflík otáčí ve směru hodinových ručiček, výstup A půjde nejprve vysoko a když se knoflík otočí proti směru hodinových ručiček, výstup B půjde nejprve vysoko.
Typy rotačního kodéru
Na trhu existuje mnoho typů rotačních kodérů, které si designér může vybrat podle své aplikace. Nejběžnější typy jsou uvedeny níže
- Inkrementální kodér
- Absolutní kodér
- Magnetický kodér
- Optický kodér
- Laserový kodér
Tyto kodéry jsou klasifikovány na základě výstupního signálu a snímací technologie, inkrementální kodér a absolutní kodéry jsou klasifikovány na základě výstupního signálu a magnetický, optický a laserový kodér jsou klasifikovány na základě snímací technologie. Zde používaný kodér je kódovač přírůstkového typu.
Popis a popis otočného kodéru KY-040
Níže jsou zobrazeny vývody rotačního kodéru inkrementálního typu KY-040
První dva piny (zem a Vcc) se používají k napájení kodéru, obvykle se používá napájení + 5V. Kromě otáčení knoflíku ve směru hodinových ručiček a proti směru hodinových ručiček má kodér také spínač (Aktivní nízký), který lze stisknout stisknutím knoflíku uvnitř. Signál z tohoto spínače je získáván přes kolík 3 (spínač). Nakonec má dva výstupní piny, které vytvářejí křivky, jak již bylo uvedeno výše. Nyní se naučíme, jak jej propojit s Arduinem.
Obvodové schéma rotačního kodéru Arduino
Kompletní schéma zapojení pro rozhraní Rotary Encoder s Arduino je zobrazeno na obrázku níže
Rotační kodér má 5 pinů v pořadí uvedeném na štítku výše. První dva kolíky jsou uzemnění a Vcc, které jsou připojeny k uzemnění a kolíku + 5V na Arduinu. Přepínač enkodéru je připojen k digitálnímu kolíku D10 a je také tažen vysoko pomocí rezistoru 1k. Dva výstupní piny jsou připojeny k D9, respektive D8.
Pro zobrazení hodnoty proměnné, která se zvýší nebo sníží otočením rotačního kodéru, potřebujeme zobrazovací modul. Zde použitý je běžně dostupný 16 * 2 Alpha numerický LCD displej. Připojili jsme displej, který má být provozován ve 4bitovém režimu, a napájeli jsme jej pomocí kolíku + 5V od Arduina. Potenciometr se používá k nastavení kontrastu LCD displeje. Pokud se chcete dozvědět více o propojení LCD displeje s Arduino, klikněte na odkaz. Celý obvod může být postaven na prkénku, můj vypadal něco takového níže, jakmile budou všechna připojení provedena.
Programování vašeho Arduina pro Rotary Encoder
Je poměrně snadné a přímé naprogramovat desku Arduino pro propojení s Rotary Encoder, pokud jste pochopili princip fungování Rotary Encoder. Jednoduše musíme přečíst počet pulzů, abychom zjistili, kolik otáček kodér udělal, a zkontrolovat, který pulz se dostal vysoko, abychom zjistili, kterým směrem se kodér otáčí. V tomto tutoriálu zobrazíme číslo, které se zvyšuje nebo snižuje na první řadě LCD a směr kodéru na druhém řádku. Kompletní program pro to samé lze nalézt v dolní části této stránky s video demonstrace, to nevyžaduje žádné knihovny. Nyní rozdělíme program na malé kousky, abychom porozuměli fungování.
Protože jsme použili LCD displej, zahrnuli jsme knihovnu tekutých krystalů, která je ve výchozím nastavení přítomna v Arduino IDE. Poté definujeme piny pro připojení LCD k Arduinu. Nakonec na těchto pinech inicializujeme LCD displej.
#zahrnout
Vedle uvnitř nastavení funkce, jsme zobrazení úvodní zprávy na LCD obrazovce, a pak čekat na 2 sekundy tak, že zpráva je uživatel čitelný. To zajišťuje správnou funkci LCD.
lcd.print ("Rotační kodér"); // Úvod Řádek zprávy 1 lcd.setCursor (0, 1); lcd.print („With Arduino“); // Úvodní zpoždění řádku zprávy 2 (2000); lcd.clear ();
Rotační kodér má tři výstupní piny, které budou vstupními piny pro Arduino. Tyto tři piny jsou přepínač, výstup A a výstup B. Ty jsou deklarována jako vstup pomocí pinMode funkci, jak je uvedeno níže.
// deklarace režimu pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Uvnitř funkce nastavení neplatnosti čteme stav výstupního pinu A, abychom zkontrolovali poslední stav pinu. Tyto informace pak použijeme k porovnání s novou hodnotou ke kontrole, který pin (výstup A nebo výstup B) se dostal vysoko.
Previous_Output = digitalRead (Encoder_OuputA); // Přečte počáteční hodnotu výstupu A
Nakonec uvnitř funkce hlavní smyčky musíme porovnat hodnotu výstupu A a výstupu B s předchozím výstupem, abychom zkontrolovali, který z nich jde jako první. Toho lze dosáhnout jednoduchým porovnáním hodnoty proudového výstupu A a B s předchozím výstupem, jak je znázorněno níže.
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 ("ve směru hodinových ručiček"); }
Ve výše uvedeném kódu se podmínka druhého if provede, pokud se výstup B změnil od předchozího výstupu. V takovém případě se hodnota proměnné kodéru zvýší a na LCD displeji se zobrazí, že se kodér otáčí ve směru hodinových ručiček. Podobně, pokud podmínka if if failed, in the subsequent else condition we decrement the variable and display that the encoder is rotated in the counterlockwise direction. Kód stejné je uveden níže.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("proti směru hodinových ručiček"); } }
Nakonec na konci hlavní smyčky musíme aktualizovat předchozí výstupní hodnotu o aktuální výstupní hodnotu, aby se smyčka mohla opakovat se stejnou logikou. Následující kód dělá totéž
Previous_Output = digitalRead (Encoder_OuputA);
Další volitelnou věcí je zkontrolovat, zda je stisknutý spínač na kodéru. To lze sledovat kontrolou spínacího kolíku na rotačním kodéru. Tento kolík je aktivní nízký kolík, což znamená, že se po stisknutí tlačítka sníží. Pokud není stisknuto, pin zůstává vysoký, také jsme použili pull up rezistor, abychom zajistili, že zůstane vysoký, když není stisknutý spínač, čímž se zabrání podmínce s plovoucí desetinnou čárkou.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Spínač stisknutý"); }
Práce rotačního kodéru s Arduino
Jakmile je hardware a kód připraven, stačí nahrát kód na desku Arduino a zapnout desku Arduino. Můžete jej napájet pomocí kabelu USB nebo použít 12V adaptér. Po zapnutí by se na displeji LCD mělo zobrazit úvodní hlášení a poté by mělo být prázdné. Nyní otočte rotační kodér a měli byste vidět, jak se hodnota začíná zvyšovat nebo snižovat na základě směru, kterým otáčíte. Druhý řádek vám ukáže, zda se kodér otáčí ve směru nebo proti směru hodinových ručiček. Obrázek níže ukazuje to samé
Také při stisknutí tlačítka se na druhém řádku zobrazí, že je stisknuto tlačítko. Kompletní práci najdete ve videu níže. Toto je pouze ukázkový program pro propojení kodéru s Arduinem a ověření, zda funguje podle očekávání. Jakmile se sem dostanete, měli byste být schopni používat kodér pro jakýkoli ze svých projektů a podle toho programovat.
Doufám, že jste pochopili výukový program a věci fungovaly tak, jak mají. Pokud máte nějaké problémy, použijte sekci s komentáři nebo fóra pro technickou pomoc.