- Materiale necesare
- Cum funcționează un codificator rotativ?
- Tipuri de codificator rotativ
- KY-040 Pinout Encoder Pinout și descriere
- Diagrama circuitului codificatorului rotativ Arduino
- Programarea Arduino pentru codificator rotativ
- Funcționarea codificatorului rotativ cu Arduino
Un codificator rotativ este un dispozitiv de intrare care ajută utilizatorul să interacționeze cu un sistem. Arată mai mult ca un potențiometru radio, dar generează un tren de impulsuri, ceea ce face ca aplicația sa să fie unică. Când butonul codificatorului este rotit, acesta se rotește sub formă de pași mici, ceea ce îl ajută să fie utilizat pentru controlul pasului / servomotorului, navigând printr-o secvență de meniu și creșterea / scăderea valorii unui număr și multe altele.
În acest articol vom afla despre diferitele tipuri de codificatoare rotative și cum funcționează. De asemenea , îl vom interfața cu Arduino și vom controla valoarea unui număr întreg prin rotirea codificatorului și vom afișa valoarea acestuia pe un ecran LCD de 16 * 2. La sfârșitul acestui tutorial vă veți simți confortabil cu utilizarea unui codificator rotativ pentru proiectele dvs. Deci sa începem…
Materiale necesare
- Codificator rotativ (KY-040)
- Arduino UNO
- 16 * 2 LCD alfanumeric
- Potențiometru 10k
- Breadboard
- Conectarea firelor
Cum funcționează un codificator rotativ?
Un codificator rotativ este un traductor electromecanic, ceea ce înseamnă că transformă mișcările mecanice în impulsuri electronice. Acesta constă dintr-un buton care, atunci când se rotește, se va deplasa pas cu pas și va produce o succesiune de trenuri de impulsuri cu lățime predefinită pentru fiecare pas. Există multe tipuri de codificatoare, fiecare cu propriul său mecanism de lucru, vom afla despre tipuri mai târziu, dar deocamdată să ne concentrăm doar pe codificatorul incremental KY040, deoarece îl folosim pentru tutorialul nostru.
Structura mecanică internă pentru codificator este prezentată mai jos. Practic, este format dintr-un disc circular (culoare gri) cu plăcuțe conductoare (culoare cupru) plasate deasupra acestui disc circular. Aceste plăcuțe conductoare sunt plasate la o distanță egală așa cum se arată mai jos. Pinii de ieșire sunt fixați deasupra acestui disc circular, astfel încât atunci când butonul este rotit, tampoanele conductoare intră în contact cu pinii de ieșire. Aici există doi pini de ieșire, ieșirea A și ieșirea B, așa cum se arată în figura de mai jos.
Forma de undă de ieșire produsă de pinul de ieșire A și ieșirea B este afișată în culoare albastră și respectiv verde. Când plăcuța conductoare este direct sub știft, se ridică, rezultând la timp și când plăcuța conductivă se îndepărtează, știftul scade, rezultând timpul oprit al formei de undă prezentate mai sus. Acum, dacă numărăm numărul de impulsuri, vom putea determina câți pași a fost mutat codificatorul.
Acum poate apărea întrebarea că, de ce avem nevoie de două semnale de impulsuri când unul este suficient pentru a număra numărul de pași parcurși în timp ce rotim butonul. Acest lucru se datorează faptului că trebuie să identificăm în ce direcție a fost rotit butonul. Dacă aruncați o privire asupra celor două impulsuri, puteți observa că ambele sunt defazate la 90 °. Prin urmare, când butonul este rotit în sensul acelor de ceasornic, ieșirea A va merge mai sus în primul rând și când butonul este rotit în sens invers acelor de ceasornic, ieșirea B va merge mai sus.
Tipuri de codificator rotativ
Există multe tipuri de codificator rotativ pe piață, proiectantul poate alege unul în funcție de aplicația sa. Cele mai frecvente tipuri sunt enumerate mai jos
- Codificator incremental
- Codificator absolut
- Codificator magnetic
- Codificator optic
- Codificator laser
Aceste codificatoare sunt clasificate pe baza semnalului de ieșire și a tehnologiei de detectare, codificatorul incremental și codificatoarele absolute sunt clasificate pe baza semnalului de ieșire, iar codificatorul magnetic, optic și laser sunt clasificate pe baza tehnologiei de detectare. Encoder folosit aici este un tip de traductor incremental.
KY-040 Pinout Encoder Pinout și descriere
Pinout-urile codificatorului rotativ de tip incremental KY-040 sunt prezentate mai jos
Primii doi pini (masă și Vcc) sunt utilizați pentru alimentarea codificatorului, de obicei se utilizează o sursă de + 5V. În afară de rotirea butonului în sensul acelor de ceasornic și în sens invers acelor de ceasornic, codificatorul are și un comutator (activ activ) care poate fi apăsat apăsând butonul din interior. Semnalul de la acest comutator este obținut prin pinul 3 (Comutator). În cele din urmă are cei doi pini de ieșire care produc formele de undă așa cum am discutat mai sus. Acum, să învățăm cum să-l interfațăm cu Arduino.
Diagrama circuitului codificatorului rotativ Arduino
Schema completă a circuitului pentru interfața codificatorului rotativ cu Arduino este prezentată în imaginea de mai jos
Codificatorul rotativ are 5 pini în ordinea prezentată în eticheta de mai sus. Primii doi pini sunt Ground și Vcc, care este conectat la pământ și pinul de 5V al Arduino. Comutatorul codificatorului este conectat la pinul digital D10 și este, de asemenea, ridicat de sus printr-un rezistor de 1k. Cei doi pini de ieșire sunt conectați la D9 și respectiv D8.
Pentru a afișa valoarea variabilei care va fi mărită sau micșorată prin rotirea codificatorului rotativ avem nevoie de un modul de afișare. Cel folosit aici este disponibil în mod obișnuit afișaj LCD numeric alfa 16 * 2. Am conectat afișajul pentru a fi operat în modul 4 biți și l-am alimentat folosind pinul + 5V al Arduino. Potențiometrul este utilizat pentru a regla contrastul afișajului LCD. Dacă doriți să aflați mai multe despre interfața ecranului LCD cu Arduino, urmați linkul. Circuitul complet poate fi construit deasupra unei plăci, am arătat cam așa mai jos odată ce toate conexiunile au fost făcute.
Programarea Arduino pentru codificator rotativ
Este destul de ușor și simplu să programați placa Arduino pentru interfața unui codificator rotativ cu acesta dacă ați fi înțeles principiul de lucru al unui codificator rotativ. Pur și simplu trebuie să citim numărul de impulsuri pentru a determina câte rotații a făcut codificatorul și pentru a verifica ce impuls a crescut mai întâi pentru a găsi în ce direcție a fost rotit codificatorul. În acest tutorial vom afișa numărul care crește sau scade pe primul rând al ecranului LCD și direcția codificatorului pe a doua linie. Programul complet pentru a face același lucru poate fi găsit în partea de jos a acestei pagini cu un Demonstration Video, nu necesită nicio bibliotecă. Acum, să împărțim programul în bucăți mici pentru a înțelege funcționarea.
Deoarece am folosit un afișaj LCD, includem biblioteca de cristale lichide care este implicită prezentă în Arduino IDE. Apoi definim pinii pentru conectarea LCD-ului cu Arduino. În final, inițializăm afișajul LCD pe acei pini.
#include
Apoi în interiorul funcției de configurare , afișăm un mesaj introductiv pe ecranul LCD și apoi așteptăm 2 secunde, astfel încât mesajul să poată fi citit de utilizator. Aceasta este pentru a vă asigura că ecranul LCD funcționează corect.
lcd.print („Codificator rotativ”); // Intro Mesaj linia 1 lcd.setCursor (0, 1); lcd.print („Cu Arduino”); // Intro mesaj linie 2 întârziere (2000); lcd.clear ();
Codificatorul rotativ are trei pini de ieșire care vor fi pini INPUT pentru Arduino. Acești trei pini sunt comutatorul, ieșirea A și respectiv ieșirea B. Acestea sunt declarate ca intrare utilizând funcția pinMode așa cum se arată mai jos.
// declarație Mod pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
În interiorul funcției de configurare nulă , citim starea pinului de ieșire A pentru a verifica ultima stare a pinului. Vom folosi apoi aceste informații pentru a compara cu noua valoare pentru a verifica care pin (ieșirea A sau ieșirea B) a crescut.
Previous_Output = digitalRead (Encoder_OuputA); // Citiți valoarea inițială a ieșirii A
În cele din urmă, în funcția de buclă principală, trebuie să comparăm valoarea ieșirii A și a ieșirii B cu ieșirea anterioară pentru a verifica care dintre ele se ridică mai întâi. Acest lucru se poate face prin simpla comparare a valorii ieșirii curente a lui A și B cu ieșirea anterioară, așa cum se arată mai jos.
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 („în sensul acelor de ceasornic”); }
În codul de mai sus, a doua condiție dacă se execută dacă ieșirea B sa schimbat față de ieșirea anterioară. În acest caz, valoarea variabilei codificatorului este mărită, iar ecranul LCD afișează că codificatorul este rotit în sensul acelor de ceasornic . În mod similar în cazul în care în cazul în care condiția eșuează, în ulterioară altă condiție am decrement variabila și de afișare care codificator este rotit în sens antiorar direcția. Codul pentru același lucru este prezentat mai jos.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print („anti-acelor de ceasornic”); } }
În cele din urmă, la sfârșitul buclei principale trebuie să actualizăm valoarea de ieșire anterioară cu valoarea de ieșire curentă, astfel încât bucla să poată fi repetată cu aceeași logică. Următorul cod face același lucru
Previous_Output = digitalRead (Encoder_OuputA);
Un alt lucru opțional este să verificați dacă este apăsat comutatorul de pe Encoder. Acest lucru poate fi monitorizat prin verificarea pinului comutatorului de pe coderul rotativ. Acest pin este un pin activ activ, ceea ce înseamnă că va scădea când se apasă butonul. Dacă nu este apăsat știftul rămâne ridicat, am folosit și un rezistor de tragere pentru a ne asigura că rămâne ridicat atunci când comutatorul nu este apăsat, evitând astfel starea în virgulă mobilă.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print („Comutator apăsat”); }
Funcționarea codificatorului rotativ cu Arduino
Odată ce hardware-ul și codul sunt gata, încărcați codul pe placa Arduino și porniți placa Arduino. Puteți să îl alimentați prin cablul USB sau să folosiți un adaptor de 12V. Când este alimentat, ecranul LCD ar trebui să afișeze mesajul introductiv și apoi să rămână necompletat. Acum rotiți codificatorul rotativ și ar trebui să vedeți că valoarea începe să fie incrementată sau descrescută pe baza direcției pe care o rotiți. A doua linie vă va arăta dacă codificatorul este rotit în sensul acelor de ceasornic sau în sens invers acelor de ceasornic. Imaginea de mai jos arată același lucru
De asemenea, când butonul este apăsat, a doua linie va afișa faptul că butonul este apăsat. Lucrarea completă poate fi găsită în videoclipul de mai jos. Acesta este doar un exemplu de program pentru interfața Encoder-ului cu Arduino și pentru a verifica dacă funcționează așa cum era de așteptat. Odată ajuns aici, ar trebui să puteți utiliza codificatorul pentru oricare dintre proiectele și programul dvs. în consecință.
Sper că ați înțeles tutorialul și lucrurile au funcționat așa cum se presupune. Dacă aveți probleme, folosiți secțiunea de comentarii sau forumurile pentru ajutor tehnic.