Arduino UNO R4 - Codificador rotatorio
En esta guía, aprenderemos a usar un codificador incremental con Arduino UNO R4. Cubriremos:
- Cómo funciona un codificador rotatorio
- Diferencias entre un codificador rotatorio y un potenciómetro
- Cómo conectar un codificador rotatorio a un Arduino UNO R4
- Programar el Arduino UNO R4 para leer el valor de un codificador rotatorio sin usar interrupciones
- Programar el Arduino UNO R4 para leer el valor de un codificador rotatorio con interrupciones

Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables STEM V4 IoT Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del codificador rotatorio
Un codificador rotatorio es un dispositivo que convierte el movimiento de giro en una señal eléctrica. Detecta el giro y la posición de un eje o de una perilla. Hay dos tipos principales:
- Codificador incremental: Esto genera pulsos para medir cambios en la posición.
- Codificador absoluto: Esto proporciona un código digital especial para cada posición, lo que lo hace perfecto para un posicionamiento preciso, incluso si se interrumpe la alimentación.
Este tutorial trata sobre el codificador incremental.
Pinout del módulo del codificador rotatorio

Un módulo de codificador rotatorio viene con cuatro pines:
- Pin CLK (Salida A): Este pin envía una señal cada vez que giras la perilla un clic en cualquier dirección, mostrando un ciclo completo de la señal de BAJO a ALTO a BAJO. Esto nos indica cuánto se ha girado la perilla.
- Pin DT (Salida B): Similar al pin CLK, pero la señal de este pin se retrasa ligeramente, ocurriendo 90 grados después de la señal CLK. Este retardo nos ayuda a determinar si la rotación es en sentido horario o antihorario.
- Pin SW: Este se conecta al pulsador interno del codificador, que suele estar abierto. Usar una resistencia pull-up en este pin significa que mostrará HIGH cuando la perilla no esté presionada y LOW cuando lo esté presionada.
- Pin VCC (+): Conecta este pin a una fuente de alimentación que proporcione entre 3,3 y 5 voltios.
- Pin GND: Conecta este pin a la tierra (0 V).
Codificador rotatorio frente a potenciómetro
Podrías confundir el codificador rotatorio con el potenciómetro, pero son piezas diferentes. Así es como se comparan:
- Un codificador rotatorio puede girar completamente de forma continua, pero un potenciómetro solo puede girar tres cuartos de vuelta.
- Un codificador rotatorio emite pulsos, mientras que un potenciómetro genera una tensión analógica.
- Un codificador rotatorio es útil para saber cuánto se ha girado una perilla, pero no su posición exacta. Un potenciómetro es bueno para conocer la posición precisa de una perilla.
Cómo funciona un codificador rotatorio

En el codificador, hay un disco con ranuras conectado a un pin llamado C, que actúa como tierra común. También hay dos pines adicionales, A y B.
- Cuando giras la perilla, los pines A y B hacen contacto con el pin de tierra común C, pero en una secuencia específica según la dirección de la rotación, ya sea en sentido horario o antihorario.
- Este contacto genera dos señales que difieren ligeramente en su temporización porque un pin se conecta a la tierra antes que el otro. Estas señales están desfasadas por 90 grados, y a esto se le llama codificación en cuadratura.
- Girar la perilla en sentido horario hace que el pin A entre en contacto con la tierra antes que el pin B. Girarla en sentido antihorario hace que el pin B entre en contacto con la tierra antes que el pin A.
- Observando cuándo cada pin establece o interrumpe el contacto con la tierra, podemos determinar la dirección de la rotación de la perilla. Hacemos esto analizando los cambios de pin B en relación con el pin A.

Cuando A cambia de bajo a alto:
- Gira la perilla en sentido horario si B está en nivel bajo.
- Gira la perilla en sentido antihorario si B está en nivel alto.
※ Nota:
Los pines A y B están conectados a los pines CLK y DT. La disposición puede variar según el fabricante. Los códigos que se dan aquí han sido probados con el encoder rotatorio de DIYables.
Cómo programar para un codificador rotatorio
- Verifica la señal del pin CLK.
- Cuando la señal cambia de BAJO a ALTO, verifica qué muestra el pin DT.
- Si el pin DT muestra ALTO, la perilla se gira en sentido antihorario. Suma 1 al contador.
- Si el pin DT muestra BAJO, la perilla se gira en sentido horario. Resta 1 al contador.
Diagrama de Cableado

This image is created using Fritzing. Click to enlarge image
Ver La mejor forma de alimentar Arduino Uno R4 y otros componentes.
Código Arduino UNO R4 – Codificador rotatorio sin interrupciones
Este código para Arduino UNO R4 realiza las siguientes acciones:
- Detecta cómo y cuánto gira el codificador.
- Si detecta que la perilla se ha girado un clic hacia la derecha, aumenta el contador en uno.
- Si detecta que la perilla se ha girado un clic hacia la izquierda, disminuye el contador en uno.
- Detecta si se pulsa el botón.
Usamos la biblioteca ezButton para simplificar el código de rebote del botón.
Pasos R\u00e1pidos
Sigue estas instrucciones paso a paso:
- Si es la primera vez que usas Arduino Uno R4 WiFi/Minima, consulta el tutorial sobre configurar el entorno para Arduino Uno R4 WiFi/Minima en el IDE de Arduino.
- Conecta el encoder giratorio a la Arduino UNO R4 según el diagrama proporcionado.
- Conecta la placa Arduino Uno R4 a tu computadora usando un cable USB.
- Inicia el IDE de Arduino en tu computadora.
- Selecciona la placa Arduino Uno R4 adecuada (p. ej., Arduino Uno R4 WiFi) y el puerto COM.
- Agrega la librería ezButton al IDE de Arduino. Para instrucciones, visita este enlace: [librería ezButton](https://arduinogetstarted.com/tutorials/arduino-button-library#content_how_to_install
- Copia el código proporcionado y ábrelo en el IDE de Arduino.
- Haz clic en el botón Subir en el IDE de Arduino para cargar el código en la placa Arduino UNO R4.
- Gira la perilla en sentido horario y luego en sentido antihorario.
- Pulsa la perilla.
- Verifica los resultados en el Monitor Serial.
Explicación del código
Mira los comentarios en el código para cada línea.
Código de Arduino UNO R4 – Codificador rotatorio con interrupción
En el ejemplo de código anterior, usamos el método de sondeo, que continúa comprobando el estado del pin. Este método tiene dos desventajas:
- Utiliza los recursos del Arduino UNO R4 de forma ineficiente
- Algunos conteos pueden omitirse si otro código tarda demasiado en ejecutarse.
Un método para controlar esto es mediante interrupciones. Las interrupciones ayudan a evitar la necesidad constante de comprobar un evento específico. Esto permite que el Arduino UNO R4 realice otras tareas mientras continúa monitoreando eventos.
Veamos el código a continuación que usa una interrupción para leer el valor del codificador.
- Copia el código proporcionado y ábrelo en el IDE de Arduino.
- Haz clic en el botón Subir en el IDE de Arduino para cargar el código en el Arduino UNO R4.
Ahora, al girar la perilla, verás que la información se muestra en el Monitor Serial, similar a lo que observaste antes en el código anterior.
※ Nota:
- Para conectar el pin CLK del codificador al Arduino UNO R4 usando una interrupción, debes usar los pines 2 o 3. Estos son los únicos pines que soportan interrupciones.
- Algunas guías en línea podrían sugerir usar dos interrupciones para un codificador, pero no es necesario. Usar solo una interrupción es suficiente.
- Asegúrate de usar la palabra clave volatile para cualquier variable global en la interrupción para evitar problemas.
- Mantén la programación dentro de la interrupción simple. No uses Serial.print() ni Serial.println() allí.
Video Tutorial
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.