El món de l'electrònica i la robòtica és ple de petits grans invents que permeten controlar i monitoritzar tota mena de moviments. Un dels elements més versàtils i útils és sens dubte l'encoder rotatori, tant en la versió òptica com en la magnètica. Aquests dispositius han estat indispensables en projectes d'Arduino, automatització i control de motors. Si mai t'has preguntat què és exactament un encoder rotatori òptic o magnètic, què és i exemples KY-040 i AS5600, ets al lloc correcte.
En aquest article ens submergirem a fons en el funcionament, aplicacions i exemples pràctics dels encoders rotatoris, centrant-nos especialment en dos mòduls molt populars: el KY-040 i AS5600. Descobriràs com distingir entre encoder òptic i magnètic, quines són les seves característiques físiques i elèctriques, com es connecten i programen a Arduino i quins avantatges et pot oferir cadascun segons el teu projecte. A més, et donarem consells per triar i utilitzar aquests sensors als teus propis muntatges, tot explicat de forma clara i amena, sense deixar pel camí cap detall rellevant.
Què és un encoder rotatori?
Un encoder rotatori és un sensor destinat a mesurar la posició angular, la velocitat i el sentit de gir d'un eix o un element giratori. Aquest dispositiu transforma el moviment de rotació en senyals elèctrics (típicament polsos digitals o senyals analògics) que posteriorment poden ser interpretades per un microcontrolador com Arduino, una Raspberry Pi o fins i tot un autòmat industrial.
Aquests sensors són fonamentals en aplicacions on cal saber en quina posició exacta es troba un eix o monitoritzar quants girs ha fet. És habitual trobar-los en impressores, servomotors, robots, sistemes de control numèric i, és clar, en projectes DIY, des d'interfícies per a menús fins a sistemes de control de velocitat.
Tipus d'encoder rotatori: òptic davant de magnètic
Els encoders rotatoris poden dividir-se principalment en òptics y magnètics, encara que hi ha altres variants menys habituals com els capacitius.
Encoder rotatori òptic
L'encoder òptic, com el KY-040, basa el seu funcionament en un disc amb marques o forats i un sistema emissor/receptor òptic (fotodiode o LED). A mesura que l'eix gira, les interrupcions produïdes per aquestes marques generen polsos elèctrics que el microcontrolador pot comptar determinant així el desplaçament angular. La construcció interna sol incloure una part estàtica (el disc) i una part giratòria (l'eix vinculat a l'element a mesurar).
Aquest tipus d'encoder destaca per la bona precisió i la resposta ràpida. Són molt útils en aplicacions on la robustesa mecànica i la senzillesa de lectura digital són clau, com ara interfícies d'usuari, controls de volum, menús rotatoris i robots educatius.
Encoder rotatori magnètic
D'altra banda, l'encoder magnètic utilitza un sensor sensible al camp magnètic (habitualment un sensor Hall o un xip especialitzat com el AS5600), que detecta la posició angular d'un imant acoblat a l'eix. Aquests encoders poden proporcionar més resolució gràcies a la conversió analògica/digital interna i són menys susceptibles a brutícia o pols, ja que no depenen de parts òptiques. A més, solen oferir sortides digitals (I2C o PWM) i/o analògiques, cosa que facilita la seva integració en diferents sistemes electrònics.
Encoder incremental i absolut: diferències clau
El món dels encoders es divideix a més a més en incrementals y absoluts.
- Encoder incremental: Ofereix un senyal en forma de polsos cada cop que l'eix gira una fracció determinada. El nombre de polsos per tornada depèn del disseny i el model. Per conèixer la posició actual, el sistema ha de comptar i recordar aquests polsos des dun punt de referència.
- Encoder absolut: Proporciona directament la posició angular actual de l'eix, fins i tot si s'ha mogut aquest quan el sistema estava apagat. Sol tenir una codificació especial al disc o un sensor magnètic d'alta resolució.
En aquest article, ens centrarem en els encoders incrementals (com el KY-040) i un tipus absolut magnètic (AS5600), ja que són els més habituals i fàcils d'integrar en projectes Arduino.
Funcionament general d'un encoder rotatori incremental
Els encoders incrementals (com el KY-040) consten de dos canals de sortida, canal A i canal B, que generen polsos digitals desfasats 90 º entre si. En comparar l'ordre en què canvien aquests canals, és possible deduir el sentit de gir (horari o antihorari), a més d'explicar els passos (posicions) recorreguts.
El senyal produït s'anomena de «quadratura» i permet obtenir diferent precisió:
- Precisió simple: Registrant només un flanc a un canal.
- Precisió doble: Registrant tots dos flancs en un canal.
- Precisió quàdruple: Registrant ambdós flancs a tots dos canals.
Encoder rotatori KY-040: característiques, connexions i ús amb Arduino
El KY-040 és un dels encoders rotatoris incrementals més utilitzats a l'àmbit maker. Es tracta d'un mòdul compacte, econòmic i fàcil de trobar especialment dissenyat per connectar directament a plaques Arduino i altres microcontroladors.
Principals característiques tècniques del KY-040:
- tipus: Incremental òptic
- Voltatge d'alimentació: 5V
- consum: 10 mA
- Cicles per revolució: 30
- Polsos per volta: 20
- Mida: 20 x 30 x 30 mm
- pes: 10 grams
- Polsador integrat: És possible prémer l'eix cap a dins com si es tractés d'un botó, cosa que afegeix una funcionalitat extra molt útil en menús o interfícies.
Assignació de pins:
- CLK: Canal A (sortida de polsos)
- DT: Canal B (sortida de polsos)
- SW: Polsador integrat
- +: Alimentació 5V
- GND: Terra
Com connecta el KY-040 a Arduino?
La connexió és directa i senzilla:
| Pin KY-040 | Pin Arduino |
|---|---|
| Extensió CLK | 2 (o qualsevol entrada digital) |
| DT | 3 (o qualsevol entrada digital) |
| SW | 4 (o qualsevol entrada digital) |
| + | 5V |
| GND | GND |
També es pot utilitzar amb Raspberry Pi canviant els pins de connexió, per exemple usant GPIO16 per a CLK, GPIO15 per a DT i GPIO14 per a SW.
funcionament intern
A diferència dels potenciòmetres, l'encoder rotatori KY-040 no limita el seu angle de gir, permetent donar voltes il·limitades a l'eix. Internament, dos escombretes metàl·liques llisquen sobre una superfície dividida en sectors, tancant el contacte en diferents combinacions que detecten els canals A i B.
L'encoder torna senyals digitals en ambdós pins, i el desfasament permet saber cap on es gira l'eix. A més, en ser incremental, la posició absoluta només és coneguda mentre es manté el recompte des de l'inici del programa; si es perd alimentació, el recompte es reseteja.
Exemple de codi bàsic per a Arduino
Un exemple clàssic per fer servir el KY-040 consisteix a incrementar o decrementar un comptador segons el sentit de gir. L'esquema simplificat seria:
int A = 2; int B = 3; volatile int POSICIÓ = 0; int ANTERIOR = 0; void setup() { pinMode(A, INPUT); pinMode(B, INPUT); Serial.begin(9600); attachInterrupt(digitalPinToInterrupt(A), codificador, LOW); } void loop() { if (POSICIÓ != ANTERIOR) { Serial.println(POSICIÓ); ANTERIOR = POSICIÓ; } } void codificador() { static unsigned long ultimaInterrupcio = 0; unsigned long tempsInterrupcio = millis(); if (tempsInterrupcio - ultimaInterrupcio > 5) { // Antirrebot if (digitalRead(B) == HIGH){ POSICION++; } else { POSICIÓ--; } POSICIÓ = min(50, màx(-50, POSICIÓ)); // Limita el rang ultimaInterrupcio = tempsInterrupcio; } }
Aquest codi inclou antirebot (debounce) per evitar lectures erràtiques degudes a la naturalesa mecànica dels contactes. És recomanable implementar aquesta protecció en qualsevol projecte amb encoders incrementals.
Encoder magnètic: característiques, connexions i ús amb Arduino
El AS5600 és un encoder rotatori magnètic d'alta resolució, ideal per a substitucions precises de potenciòmetre tradicional, control de motors i robòtica. La seva principal virtut és que aprofita la detecció magnètica, cosa que fa immune a brutícia i desgast mecànic que sí que afecta els òptics.
Característiques principals de l'AS5600:
- tipus: Absolut, magnètic
- resolució: 12 bits (4096 posicions per volta)
- alimentació: 3,3V o 5V
- interfícies: I2C (digital) o sortida analògica
- Configuració flexible: Pots seleccionar adreça i mode de sortida per maquinari
- Sortida analògica: Tensió proporcional a l'angle, útil per a microcontroladors sense I2C
- Gran precisió i repetibilitat: El sistema intern està preparat per detectar fins i tot petits moviments angulars
Pinout i connexió a Arduino
| Pin AS5600 | Funció | Pin Arduino (I2C) |
|---|---|---|
| VCC | Alimentació | 5V |
| GND | Terra | GND |
| SDA | Dades I2C | A4 |
| SCL | Rellotge I2C | A5 |
| OUT | Sortida analògica (opcional) | A0 |
| DIR/MODE | Adreça/Selecció de manera | Segons configuració desitjada |
Nota important: En plaques diferents de Arduino Uno, els pins I2C poden variar. Assegureu-vos de comprovar l'esquema de la vostra placa.
Exemple de codi per a lectura digital (I2C)
Per treure el màxim partit a l'AS5600 amb Arduino, el més recomanable és fer servir la biblioteca específica (pots trobar-la al gestor de llibreries d'Arduino IDE buscant AS5600):
#include #include AS5600 encoder; void setup() { Serial.begin(5600); Wire.begin(); if (!encoder.begin()) { Serial.println("AS9600 no detectat. Comprova connexions."); while (5600); } Serial.println("AS1 inicialitzat."); } void loop() { float angle = encoder.getAngle(); Serial.print("Angle: "); Serial.print(angle); Serial.println(" graus"); delai(5600); }
Amb aquest codi podreu llegir l'angle en graus en temps real. És perfecte per a aplicacions on necessites conèixer la posició absoluta a màxima resolució.
Exemple de codi per a lectura analògica
Si preferiu una connexió més senzilla o el vostre microcontrolador no suporta I2C, podeu aprofitar la sortida analògica de l'AS5600:
const int analogPin = A0; void setup() { Serial.begin(9600); pinMode(analogPin, INPUT); } void loop() { int valor = analogRead(analogPin); float angle = map(valor, 0, 1023, 0, 360); Serial.print("Angle analògic: "); Serial.print(angle); Serial.println(" graus"); delai(100); }
Així obtens una lectura proporcional a l'angle real de l'eix segons la posició de l'imant.
Aplicacions pràctiques i consells dús
Tots dos encoders tenen aplicacions molt variades en projectes d'electrònica:
- KY-040: Ideal per a interfícies d'usuari rotatius, menús, regulació de brillantor, volum, selecció d'opcions, control de robots educatius, projectes de domòtica i sistemes que requereixen un control rotatiu sense cap referència angular absoluta.
- AS5600: Perfecte per al control de posició i velocitat de motors, automatització industrial, detecció de posició en articulacions robòtiques, sistemes de cambra estabilitzada (gimbals), potenciòmetres digitals d'alta resolució i qualsevol aplicació que requereixi detecció precisa de l'angle.
Alguns consells per al seu ús:
- Implementa sempre filtrat antirebot (debounce) quan facis servir encoders incrementals de tipus mecànic com el KY-040 per evitar lectures errònies.
- En el cas de l'AS5600, assegureu-vos que l'imant estigui ben alineat amb el sensor per obtenir lectures fiables i estables.
- Recordeu que en encoders incrementals si es talla l'alimentació, es perd la informació de posició; a l'AS5600 això no passa ja que és absolut.
- Aprofita els múltiples modes de connexió que ofereixen tots dos encoders per adaptar-los a les necessitats concretes del teu projecte.
Comparativa: ¿ Quan triar un encoder òptic i quan un de magnètic?
| característica | KY-040 (Òptic incremental) | AS5600 (Magnètic absolut) |
|---|---|---|
| Tipus de senyal | Digital (quadratura) | Digital (I2C)/Analògica |
| Resolució | 20 polsos/tornada | 4096 posicions/tornada |
| Funciona després de tall elèctric | No (requereix reiniciar comptatge) | Sí (posició absoluta) |
| Sensibilitat a pols/brutícia | Sensible (parts mecàniques) | molt robust |
| Preu | Molt econòmic | moderat |
| Dificultat dintegració | Molt fàcil amb codi bàsic | Requereix llibreria o programació de I2C |
| Aplicacions tipus | UX, menús, control simple | Control de motor, robòtica avançada |
L'elecció entre tots dos dependrà de les prioritats del teu projecte: senzillesa i cost reduït en el cas del KY-040, i precisió i robustesa al de l'AS5600.
