Els encoders rotatius són components electrònics que han guanyat popularitat en projectes DIY i l'ecosistema d'Arduino. Aquests dispositius permeten la lectura del moviment d'un eix, el que es tradueix en la possibilitat de fer un seguiment de la velocitat i la posició angular de diferents sistemes. No obstant això, malgrat que poden ser útils, moltes vegades es confonen amb altres aparells com els potenciòmetres, cosa que pot generar malentesos sobre el seu ús i funcionalitat.
En aquest article t'explicarem detalladament què són els encoders rotatius, com funcionen i com en pots utilitzar un amb Arduino. També revisarem les connexions, l'ús del codi i alguns exemples pràctics que us ajudaran a integrar-lo en els vostres projectes d'una manera eficaç. Però abans d'entrar en detalls tècnics, és important entendre què fa aquest dispositiu un dels preferits en projectes d'electrònica.
Què és un encoder rotatiu?

Un encoder rotatiu és un dispositiu electromecànic que converteix el moviment de rotació dun eix en una sèrie de senyals, generalment digitals. Aquests senyals poden ser utilitzats per un sistema com Arduino per interpretar informació relacionada amb la velocitat de gir, la posició de l'eix i fins i tot el sentit de rotació. A diferència dels potenciòmetres, que tenen un límit al nombre de girs, els encoders poden girar indefinidament.
Hi ha diferents tipus d'encoders rotatius, però es poden dividir en dues grans categories: absoluts e incrementals. Els encoders absoluts ofereixen una lectura exacta de la posició de l'eix en tot moment, sense importar quantes voltes hagi fet. D'altra banda, els encoders incrementals només registren el moviment relatiu des d'una posició inicial sense tenir una referència absoluta de l'angle.
El tipus d'encoder més comú en projectes DIY o amb Arduino és el encoder incremental. Són econòmics, fàcils de trobar i es poden utilitzar per a una àmplia gamma d'aplicacions com a control de volum, ajustament de brillantor de pantalles LCD, entre altres. A més, molts inclouen un botó polsador, que ajuda a integrar accions de control addicionals en els teus projectes.
Com funciona un encoder rotatiu
El cor d'un encoder rotatiu està format per una sèrie de interrupcions que s'activen cada cop que l'eix gira. Això genera un senyal digital que pot ser llegit per un dispositiu electrònic. Aquest tipus d'encoder sol tenir dues sortides principals, que generen senyals en fase de quadratura. Això significa que hi ha un desfasament de 90 graus entre els dos senyals, cosa que permet no només comptar els girs, sinó també determinar el sentit del gir (horari o antihorari).
El dispositiu proporciona un nombre de polsos per cada volta, i segons el nombre de polsos, podem determinar amb més precisió el moviment de l'eix. Un encoder estàndard pot tenir des de 20 fins a més de 256 polsos per volta, depenent del model. Els polsos s'expliquen utilitzant un sistema de quadratura, la qual cosa també permet determinar si el gir ha estat en sentit horari (CW) o antihorari (CCW), cosa que ho fa molt pràctic per a sistemes de quadratura control i navegació.
A més, aquests dispositius poden incloure un polsador que actua en pressionar leix. Aquest polsador permet registrar una acció com si fos un botó, cosa que amplia les possibilitats dús. En resum, l'encoder no només permet registrar el gir de l'eix, sinó també el Direcció y posició en temps real.
Diferències entre un encoder rotatiu i un potenciòmetre
És molt comú confondre un encoder rotatiu amb un potenciòmetre a causa del seu aspecte similar, però hi ha diferències fonamentals que els separen. Un potenciòmetre ajusta un valor de resistència segons l'angle de gir, proporcionant una sortida analògica. En canvi, un encoder rotatiu genera una sèrie d'impulsos digitals que representen el gir de l'eix. Una altra diferència clau és que els encoders poden girar indefinidament, mentre que els potenciòmetres tenen un límit físic en el nombre de girs.
Per aquestes raons, els encoders són ideals per a situacions en què es requereix un control continu i precís del gir, com en sistemes de control de motors, mentre que els potenciòmetres s'utilitzen comunament per ajustar paràmetres estàtics com el volum o la lluminositat.
Connexió d'un encoder a Arduino
Connectar un encoder rotatiu a un Arduino és relativament senzill. Depenent del model, l'encoder tindrà tres sortides principals: dues per als canals A i B, i una per al polsador. El polsador es connecta a una entrada digital d'Arduino, mentre que els canals A i B es connecten a dues entrades digitals més.
Per obtenir una lectura precisa del moviment de l'encoder, és recomanable fer servir pins de interrupció a Arduino per als canals A i B. No obstant això, això no sempre és necessari. Si només necessiteu precisió simple o doble, podeu obtenir lectures consultant aquestes sortides periòdicament (mètode de polling), encara que això afectarà l'eficiència del codi.
La connexió per a un projecte típic seria una cosa com això:
- Canal A connectat a D9
- Canal B connectat a D10
- Polsador connectat a D11
És important assegurar-se que els pins seleccionats per a les interrupcions siguin els correctes, ja que no tots els pins a les plaques Arduino admeten interrupcions. En resum, pots connectar un encoder sense tenir interrupcions, però la precisió serà menor.
Codi per utilitzar un encoder rotatiu amb Arduino

El codi per llegir un encoder amb Arduino és senzill. A continuació et mostrem un exemple bàsic per llegir el nombre de polsos generats al canal A, determinant a més el sentit del gir amb l'ajuda del canal B. Aquesta és una aproximació simple utilitzant el mètode Votació, però si necessites més precisió, pots modificar el codi per treballar amb interrupcions.
const int channelPinA = 9;
const int channelPinB = 10;
int prevStateChannelA = 0;
int value = 0;
unsigned long currentTime = 0;
unsigned long prevTime = 0;
void setup() {
Serial.begin(9600);
pinMode(channelPinA, INPUT);
pinMode(channelPinB, INPUT);
prevStateChannelA = digitalRead(channelPinA);
}
void loop() {
currentTime = millis();
int currentStateChannelA = digitalRead(channelPinA);
if (currentStateChannelA != prevStateChannelA) {
if (digitalRead(channelPinB) != currentStateChannelA) {
value++;
} else {
value--;
}
Serial.println(value);
prevStateChannelA = currentStateChannelA;
currentTime = millis();
}
}
aquest codi detecta el canvi d'estat al canal A i avalua el canal B per determinar el sentit en què s'ha girat l'encoder. Cada vegada que el valor canviï, el codi actualitzarà el nombre de polsos registrats i imprimirà el valor al monitor sèrie.
Exemples dús comú
Els encoders rotatius es fan servir en una àmplia gamma d'aplicacions tant professionals com casolanes. En l'àmbit dels projectes amb Arduino, es poden fer servir per ajustar paràmetres en temps real, com ara el control de la direcció d'un robot mòbil, la regulació del volum d'un altaveu o l'ajust de la brillantor d'una pantalla LCD. També són àmpliament utilitzats en sistemes de control per a motors pas a pas o servos, on es requereix un control precís de la posició de l'eix.
Una de les aplicacions més interessants és la creació d'interfícies amb feedback visual o auditiu, on l'encoder no només ajusta un paràmetre, sinó que també proporciona a l'usuari retroalimentació física en girar-lo, cosa que no s'aconsegueix amb botons tradicionals.
A més, els encoders són extremadament útils com a reemplaçament per a potenciòmetres en sistemes que requereixen un major grau de durabilitat, ja que no tenen límits de gir, la qual cosa redueix el desgast mecànic.
El ús d'encoders a la programació de robots i sistemes autònoms també està creixent. Poden connectar-se directament a les rodes d'un robot per mesurar el moviment precís, optimitzant així els càlculs de desplaçament i direcció, cosa que millora l'eficiència i la capacitat de navegació dels robots.
Els encoders rotatius també han arribat al desenvolupament de dispositius mèdics i panells de control industrials, on es requereix un control constant del moviment per aconseguir una precisió mil·limètrica a la maquinària.
En general, els encoders són una opció versàtil i econòmica per a projectes en què el mesurament precís de la rotació és clau.
Si cerques una solució econòmica i eficient per als teus projectes amb Arduino, l'ús de encoders rotatius pot proporcionar-te una excel·lent alternativa davant d'altres mètodes de control analògic, com els potenciòmetres. La seva capacitat de brindar un control precís amb un marge ampli de girs els fa ideals per a una gran varietat d'aplicacions.