- Potrebni materijali
- Kako funkcionira rotacijski koder?
- Vrste rotacijskog kodera
- KY-040 Rotacijski koder Pinout i opis
- Dijagram kruga rotacijskog kodera Arduino
- Programiranje vašeg Arduina za rotacijski koder
- Rad rotacijskog kodera s Arduinom
Rotary koder je ulazni uređaj koji pomaže korisniku interakciju sa sustavom. Izgleda više poput radio potenciometra, ali odaje niz impulsa što njegovu primjenu čini jedinstvenom. Kada se okreće gumb enkodera, on se okreće u obliku malih koraka što mu pomaže da se koristi za upravljanje koračnim / servo motorom, kretanje kroz slijed izbornika i povećanje / smanjenje vrijednosti broja i još mnogo toga.
U ovom ćemo članku naučiti o različitim vrstama rotacijskih kodera i kako to funkcionira. Također ćemo ga povezati s Arduinom i kontrolirati vrijednost cijelog broja okretanjem kodera i prikazati njegovu vrijednost na LCD zaslonu 16 * 2. Na kraju ovog vodiča bit će vam ugodno koristiti rotacijski koder za svoje projekte. Pa krenimo…
Potrebni materijali
- Rotacijski davač (KY-040)
- Arduino UNO
- 16 * 2 alfanumerički LCD
- Potenciometar 10k
- Breadboard
- Spajanje žica
Kako funkcionira rotacijski koder?
Rotacijski enkoder je elektromehanički pretvarač, što znači da mehaničke pokrete pretvara u elektroničke impulse. Sastoji se od gumba koji će se pri okretanju pomicati korak po korak i stvarati niz impulsnih vlakova s unaprijed definiranom širinom za svaki korak. Postoji mnogo vrsta enkodera, svaki sa svojim vlastitim radnim mehanizmom, o vrstama ćemo saznati kasnije, ali za sada se koncentrirajmo samo na inkrementalni enkoder KY040, jer ga koristimo za naš vodič.
Unutarnja mehanička struktura kodera prikazana je u nastavku. U osnovi se sastoji od kružnog diska (siva boja) s vodljivim jastučićima (bakrena boja) postavljenih na vrh ovog kružnog diska. Ovi vodljivi jastučići smješteni su na jednakoj udaljenosti kao što je prikazano dolje. Izlazne iglice su pričvršćene na vrh ovog kružnog diska, na takav način da kad okrene gumb, provodne pločice dođu u kontakt s izlaznim iglicama. Ovdje se nalaze dva izlazna zatiča, izlaz A i izlaz B, kao što je prikazano na donjoj slici.

Izlazni valni oblik koji proizvode izlazni pin A i izlaz B prikazan je plavom, odnosno zelenom bojom. Kada se vodljiva pločica nalazi izravno ispod zatiča, ona ide visoko, što rezultira vremenom, a kad se provodna pločica odmiče, zatik se smanjuje što rezultira vremenom isključenja gore prikazanog valnog oblika. Sada, ako izbrojimo broj impulsa, moći ćemo odrediti koliko je koraka premješteno koderom.
Sad se može postaviti pitanje zašto nam trebaju dva impulsna signala kad je jedan dovoljan za brojanje koraka poduzetih tijekom okretanja gumba. To je zato što moramo prepoznati u kojem je smjeru okrenuta tipka. Ako pogledate dva pulsa, možete primijetiti da su oba van faze za 90 °. Dakle, kada se gumb okreće u smjeru kazaljke na satu, izlaz A prvo će ići visoko, a kada se okreće u smjeru suprotnom od kazaljke na satu, izlaz B prvo će se visoko pomicati.
Vrste rotacijskog kodera
Na tržištu postoji mnogo vrsta rotacijskih kodera koje dizajner može odabrati prema svojoj primjeni. Najčešće vrste navedene su u nastavku
- Inkrementalni koder
- Apsolutni koder
- Magnetski koder
- Optički koder
- Laserski koder
Ovi enkoderi klasificirani su na temelju izlaznog signala i senzorske tehnologije, inkrementalni enkoder i apsolutni enkoderi klasificirani su na temelju izlaznog signala, a magnetski, optički i laserski enkoderi klasificirani na temelju senzorske tehnologije. Davača se ovdje koristi je inkrementalni tipa davača.
KY-040 Rotacijski koder Pinout i opis
Isječci rotacijskog kodera inkrementalnog tipa KY-040 prikazani su u nastavku

Prva dva pina (uzemljenje i Vcc) koriste se za napajanje kodera, obično se koristi napajanje od + 5V. Osim rotacije gumba u smjeru kazaljke na satu i u smjeru suprotnom od kazaljke na satu, koder ima i prekidač (Active low) koji se može pritisnuti pritiskom na gumb unutar. Signal s ovog prekidača dobiva se kroz zatik 3 (prekidač). Napokon ima dva izlazna zatiča koji proizvode valne oblike kao što je već gore spomenuto. Sada ćemo naučiti kako ga povezati s Arduinom.
Dijagram kruga rotacijskog kodera Arduino
Kompletni dijagram sklopa za povezivanje rotacijskog kodera s Arduinom prikazan je na donjoj slici

Rotacijski koder ima 5 pinova prema redoslijedu prikazanom na gornjoj naljepnici. Prva dva pina su Ground i Vcc koji je povezan s uzemljenjem i + 5V pinom Arduina. Prekidač kodera spojen je na digitalni pin D10 i također je povučen visoko kroz 1k otpornik. Dva izlazna zatiča spojena su na D9 odnosno D8.
Za prikaz vrijednosti varijable koja će se povećati ili smanjiti okretanjem rotacijskog kodera potreban nam je modul prikaza. Ovdje korišteni uobičajeno je dostupan 16 * 2 alfa numerički LCD zaslon. Povezali smo zaslon za rad u 4-bitnom načinu i napajali smo ga pomoću + 5V pina Arduina. Potenciometar se koristi za podešavanje kontrasta LCD zaslona. Ako želite znati više o povezivanju LCD zaslona s Arduinom, slijedite vezu. Kompletni sklop može se sagraditi na vrhu ploče, ja sam izgledao ovako nekako u nastavku kad su sve veze bile gotove.

Programiranje vašeg Arduina za rotacijski koder
Prilično je jednostavno i jednostavno programirati Arduino ploču za povezivanje rotacijskog kodera s njom ako ste razumjeli princip rada rotacijskog kodera. Jednostavno moramo očitati broj impulsa kako bismo odredili koliko okretaja je enkoder napravio i provjeriti koji je impuls prije otišao visok da bismo pronašli u kojem smjeru je enkoder zakrenut. U ovom uputstvu prikazat ćemo broj koji se uvećava ili smanjuje u prvom retku LCD-a, a smjer kodera u drugom retku. Kompletan program za to isto se može pronaći na dnu ove stranice sa demonstracija video, to ne zahtijeva nikakvu knjižnicu. Sada, podijelimo program na male dijelove kako bismo razumjeli rad.
Budući da smo koristili LCD zaslon, uključujemo biblioteku tekućih kristala koja je prema zadanim postavkama prisutna u Arduino IDE-u. Zatim definiramo igle za povezivanje LCD-a s Arduinom. Na kraju inicijaliziramo LCD zaslon na tim iglama.
#include
Sljedeća unutar postavljanje funkcija, možemo prikazati uvodni poruku na LCD zaslonu, a zatim čekati za 2 sekunde, tako da je poruka korisnika čitati. To osigurava ispravnost rada LCD zaslona.
lcd.print ("rotacijski koder"); // Uvodni redak poruke 1 lcd.setCursor (0, 1); lcd.print ("With Arduino"); // Uvod u retku poruke 2 (2000); lcd.clear ();
Rotacijski koder ima tri izlazne igle koje će biti INPUT pinovi za Arduino. Ova tri pina su prekidač, izlaz A i izlaz B. To su deklarirani kao ulaz pomoću pinMode funkciju kao što je prikazano u nastavku.
// deklaracija načina pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Unutar funkcije postavljanja praznine čitamo status izlaznog A pin-a kako bismo provjerili zadnji status pin-a. Zatim ćemo te podatke upotrijebiti za usporedbu s novom vrijednošću kako bismo provjerili koji je pin (izlaz A ili izlaz B) prešao visoko.
Previous_Output = digitalRead (Encoder_OuputA); // Očitavanje početne vrijednosti izlaza A
Konačno, unutar funkcije glavne petlje , moramo usporediti vrijednost izlaza A i izlaza B s prethodnim izlazom kako bismo provjerili koji od njih prvi ide visoko. To se može učiniti jednostavnom usporedbom vrijednosti trenutnog izlaza A i B s prethodnim izlazom kao što je prikazano u nastavku.
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 ("u smjeru kazaljke na satu"); }
U gore kod druga , ako stanje bude izvršiti ako izlaz B promijenio u odnosu na prethodnu izlaz. U tom se slučaju povećava vrijednost varijable kodera i LCD prikazuje da je kodera rotirano u smjeru kazaljke na satu . Slično tome, ako to ako uvjet ne uspije, u sljedećem uvjetom else smanjujemo varijablu i prikazujemo da se koder okreće u smjeru suprotnom od kazaljke na satu . Kôd za isti prikazan je u nastavku.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0,1); lcd.print ("U suprotnom smjeru od kazaljke na satu"); } }
Konačno, na kraju glavne petlje moramo ažurirati prethodnu izlaznu vrijednost trenutnom izlaznom vrijednošću tako da se petlja može ponoviti istom logikom. Sljedeći kod čini isto
Previous_Output = digitalRead (Encoder_OuputA);
Druga neobavezna stvar je provjeriti je li pritisnuta sklopka na koderu. To se može nadzirati provjerom klina prekidača na okretnom koderu. Ovaj je pin aktivan niski pin, što znači da će pasti nisko kad se pritisne tipka. Ako se ne pritisne, klin ostaje visok, također smo upotrijebili povlačni otpor kako bismo bili sigurni da ostaje visok kad prekidač nije pritisnut, čime se izbjegava stanje plutajuće točke.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0,1); lcd.print ("Prekidač pritisnut"); }
Rad rotacijskog kodera s Arduinom
Jednom kada su hardver i kôd spremni, samo prenesite kôd na Arduino ploču i uključite Arduino ploču. Možete ga napajati putem USB kabela ili koristiti adapter od 12V. Kada se napaja, LCD bi trebao prikazati uvodnu poruku, a zatim se isprazniti. Sada zakrenite okretni koder i trebali biste vidjeti kako vrijednost počinje povećavati ili smanjivati ovisno o smjeru u kojem se okrećete. Drugi će vam red prikazati okreće li se koder u smjeru kazaljke na satu ili u smjeru suprotnom od kazaljke na satu. Slika ispod prikazuje isto

Također kada se pritisne tipka, u drugom retku prikazat će se da je tipka pritisnuta. Kompletan rad možete pronaći u videozapisu ispod. Ovo je samo primjer programa za povezivanje kodera s Arduinom i provjeru radi li prema očekivanjima. Jednom kada stignete ovdje trebali biste biti u mogućnosti koristiti koder za bilo koji od svojih projekata i u skladu s tim programirati.
Nadam se da ste razumjeli tutorial i da su stvari funkcionirale onako kako treba. Ako imate bilo kakvih problema, za tehničku pomoć koristite odjeljak za komentare ili forume.
