- Materials necessaris
- Com funciona un codificador rotatiu?
- Tipus de codificador rotatiu
- Piny i descripció del codificador rotatiu KY-040
- Diagrama de circuits del codificador rotatiu Arduino
- Programació del vostre Arduino per al codificador rotatiu
- Funcionament del codificador rotatiu amb Arduino
Un codificador rotatiu és un dispositiu d’entrada que ajuda l’usuari a interactuar amb un sistema. Sembla més aviat un radiopotòmetre, però genera un tren de pulsacions que fa que la seva aplicació sigui única. Quan es gira el comandament del codificador, gira en forma de petits passos, cosa que ajuda a utilitzar-lo per controlar el pas a pas / el servomotor, navegar per una seqüència de menú i augmentar / disminuir el valor d’un nombre i molt més.
En aquest article coneixerem els diferents tipus de codificadors rotatius i el seu funcionament. També el connectarem amb Arduino i controlarem el valor d’un enter girant el codificador i mostrarem el seu valor en una pantalla LCD de 16 * 2. Al final d'aquest tutorial, us sentireu còmode utilitzant un codificador rotatiu per als vostres projectes. Comencem doncs…
Materials necessaris
- Codificador rotatiu (KY-040)
- Arduino UNO
- 16 * 2 LCD alfanumèric
- Potenciòmetre 10k
- Taula de pa
- Connexió de cables
Com funciona un codificador rotatiu?
Un codificador rotatiu és un transductor electromecànic, el que significa que converteix els moviments mecànics en polsos electrònics. Consisteix en un pom que quan gira es mourà pas a pas i produirà una seqüència de trens d’impulsos amb amplada predefinida per a cada pas. Hi ha molts tipus de codificadors cadascun amb el seu propi mecanisme de treball; en coneixerem els tipus més endavant, però ara ens concentrem només en el codificador incremental KY040, ja que el fem servir per al nostre tutorial.
A continuació es mostra l'estructura mecànica interna del codificador. Bàsicament consisteix en un disc circular (color gris) amb coixinets conductors (color coure) col·locats a sobre d’aquest disc circular. Aquests coixinets conductors es col·loquen a una distància igual, tal com es mostra a continuació. Els pins de sortida es fixen a la part superior d’aquest disc circular, de manera que quan gira el pom els coixinets conductors entren en contacte amb els pins de sortida. Aquí hi ha dos pins de sortida, la sortida A i la sortida B, tal com es mostra a la figura següent.

La forma d'ona de sortida produïda pel pin de sortida A i la sortida B es mostra en color blau i verd respectivament. Quan el coixinet conductor es troba directament a sota del passador puja elevat, donant-lo puntualment i quan el coixinet conductor s’allunya, el passador baixa baixant el temps d’aturada de la forma d’ona que es mostra més amunt. Ara, si comptem el nombre d’impulsos, podrem determinar quants passos s’ha mogut el codificador.
Ara pot sorgir la pregunta de: per què necessitem dos senyals d'impulsos quan n'hi ha prou per comptar el nombre de passos realitzats mentre gireu el comandament? Això es deu al fet que hem d’identificar en quina direcció s’ha girat el pom. Si mireu els dos polsos, podeu notar que tots dos estan desfasats a 90 °. Per tant, quan el comandament gira en sentit horari, la sortida A pujarà primer i quan el comandament es giri en sentit antihorari, la sortida B passarà primer en alt.
Tipus de codificador rotatiu
Hi ha molts tipus de codificadors rotatius al mercat que el dissenyador pot triar segons la seva aplicació. A continuació s’enumeren els tipus més habituals
- Codificador incremental
- Codificador absolut
- Codificador magnètic
- Codificador òptic
- Codificador làser
Aquests codificadors es classifiquen en funció de la tecnologia de detecció i senyal de sortida, el codificador incremental i els codificadors absoluts es classifiquen en funció del senyal de sortida i el codificador magnètic, òptic i làser es basa en la tecnologia de detecció. El codificador utilitzat aquí és un codificador de tipus incremental.
Piny i descripció del codificador rotatiu KY-040
A continuació es mostren els pinouts del codificador rotatiu de tipus incremental KY-040

Els dos primers pins (Ground i Vcc) s’utilitzen per alimentar el codificador, normalment s’utilitza una font de + 5V. A part de girar el comandament en sentit antihorari i horari, el codificador també té un interruptor (Actiu baix) que es pot prémer prement el comandament interior. El senyal d’aquest commutador s’obté a través del pin 3 (Switch). Finalment té els dos pins de sortida que produeixen les formes d'ona com ja s'ha comentat anteriorment. Ara anem a aprendre a relacionar-lo amb Arduino.
Diagrama de circuits del codificador rotatiu Arduino
El diagrama complet del circuit per a la interfície del codificador rotatiu amb Arduino es mostra a la imatge següent

El codificador rotatiu té 5 pins en l'ordre que es mostra a l'etiqueta anterior. Els dos primers pins són Ground i Vcc, que està connectat a la terra i al pin de + 5V de l’Arduino. El commutador del codificador està connectat al pin digital D10 i també s’eleva a través d’una resistència de 1 k. Els dos pins de sortida estan connectats a D9 i D8 respectivament.
Per mostrar el valor de la variable que augmentarà o disminuirà girant el codificador rotatiu, necessitem un mòdul de visualització. El que s'utilitza aquí és la pantalla LCD numèrica alfa de 16 * 2 disponible habitualment. Hem connectat la pantalla per funcionar en mode de 4 bits i l’hem alimentada mitjançant el pin + 5V d’Arduino. El potenciòmetre s’utilitza per ajustar el contrast de la pantalla LCD. Si voleu obtenir més informació sobre Interfacing LCD LCD amb Arduino, seguiu l'enllaç. El circuit complet es pot construir a la part superior d’una tauleta de pa, el meu aspecte semblava a continuació un cop fetes totes les connexions.

Programació del vostre Arduino per al codificador rotatiu
És bastant senzill i senzill programar la placa Arduino per a la interfície d’un codificador rotatiu si hagués entès el principi de funcionament d’un codificador rotatiu. Simplement hem de llegir el nombre de polsos per determinar quantes voltes ha fet el codificador i comprovar quin pols va augmentar primer per trobar en quina direcció es va girar el codificador. En aquest tutorial mostrarem el número que s’incrementa o disminueix a la primera fila de la pantalla LCD i la direcció del codificador a la segona línia. El programa complet per fer el mateix es pot trobar a la part inferior d’aquesta pàgina amb un vídeo de demostració, no requereix cap biblioteca. Ara, dividim el programa en petits trossos per entendre el funcionament.
Com que hem utilitzat una pantalla LCD, incloem la biblioteca de cristalls líquids, que per defecte està present a l'IDE Arduino. A continuació, definim els pins per connectar LCD amb Arduino. Finalment, inicialitzem la pantalla LCD d’aquests pins.
#incloure
A continuació, dins de la funció de configuració , mostrarem un missatge introductori a la pantalla LCD i, a continuació, esperarem 2 segons perquè aquest missatge sigui llegible per l'usuari. Per assegurar-vos que el LCD funciona correctament.
lcd.print ("Codificador rotatiu"); // Línia inicial del missatge 1 lcd.setCursor (0, 1); lcd.print ("Amb Arduino"); // Retard de la línia 2 del missatge d'introducció (2000); lcd.clear ();
El codificador rotatiu té tres pins de sortida que seran uns pins INPUT per a l’Arduino. Aquests tres pins són el commutador, la sortida A i la sortida B respectivament. Es declaren com a entrada mitjançant la funció pinMode , tal com es mostra a continuació.
// declaració del mode pin pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Dins de la funció de configuració del buit , llegim l'estat del pin A de sortida per comprovar l'últim estat del pin. A continuació, farem servir aquesta informació per comparar-la amb el nou valor per comprovar quin pin (sortida A o sortida B) ha estat elevat.
Previous_Output = digitalRead (Encoder_OuputA); // Llegiu el valor inicial de la sortida A.
Finalment, dins de la funció de bucle principal, hem de comparar el valor de la sortida A i la sortida B amb la sortida anterior per comprovar quina passa primer. Això es pot fer simplement comparant el valor de la sortida actual d'A i B amb la sortida anterior, tal com es mostra a continuació.
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 ("en sentit horari"); }
En el codi anterior, la segona condició si s'executa si la sortida B ha canviat respecte a la sortida anterior. En aquest cas, s'incrementa el valor de la variable del codificador i la pantalla LCD mostra que el codificador gira en sentit horari . De la mateixa manera, si que si la condició falla, en la posterior altres condicions que decrementar la variable i la pantalla que el codificador es gira en el sentit antihorari direcció. A continuació es mostra el codi del mateix.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("anti-horari"); } }
Finalment, al final del bucle principal hem d’actualitzar el valor de sortida anterior amb el valor de sortida actual de manera que es pugui repetir el bucle amb la mateixa lògica. El següent codi fa el mateix
Previous_Output = digitalRead (Encoder_OuputA);
Una altra opció és comprovar si es prem l’interruptor del codificador. Això es pot controlar comprovant el pin del commutador del codificador rotatiu. Aquest pin és un pin actiu baix, és a dir, baixarà quan es prem el botó. Si no es prem el pin, es manté alt, també hem utilitzat una resistència de tracció cap amunt per assegurar-nos que es manté alta quan no es prem l'interruptor, evitant així la condició de punt flotant.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Interruptor premut"); }
Funcionament del codificador rotatiu amb Arduino
Un cop el maquinari i el codi estiguin preparats, només cal que pengeu el codi a la placa Arduino i engegueu la placa Arduino. Podeu alimentar-lo mitjançant el cable USB o utilitzar un adaptador de 12 V. Quan estigui alimentat, la pantalla LCD hauria de mostrar el missatge d'introducció i després quedar-se en blanc. Ara gireu el codificador rotatiu i hauríeu de veure com el valor comença incrementat o disminuït en funció de la direcció que gireu. La segona línia us mostrarà si el codificador s’està girant en sentit horari o antihorari. La imatge següent mostra el mateix

També quan es prem el botó, es mostrarà a la segona línia que es prem el botó. El funcionament complet es pot trobar al vídeo següent. Aquest és només un programa de mostra per connectar el codificador amb Arduino i comprovar si funciona com s’esperava. Un cop arribeu aquí, hauríeu de poder utilitzar el codificador per a qualsevol dels vostres projectes i programes en conseqüència.
Espero que hàgiu entès el tutorial i les coses funcionin tal i com se suposa. Si teniu algun problema, utilitzeu la secció de comentaris o els fòrums per obtenir ajuda tècnica.
