Arduino Nano ESP32 - Codificador rotatorio
En esta guía, aprenderás a usar el codificador rotatorio con un Arduino Nano ESP32. Esto es lo que aprenderemos:
- Cuáles son las diferencias entre un codificador rotatorio y un potenciómetro
- Cómo funciona el codificador rotatorio
- Cómo conectar el codificador rotatorio al Arduino Nano ESP32
- Cómo escribir código para el Arduino Nano ESP32 para leer la dirección y la posición del codificador rotatorio sin interrupciones.
- Cómo escribir código para el Arduino Nano ESP32 para leer la dirección y la posición del codificador rotatorio con interrupciones.
Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del codificador rotatorio
Una perilla giratoria, como la de una radio, puede enviar señales que se convierten en electricidad. Nos ayuda a saber cuánto giró y dónde está colocada. Hay dos tipos principales:
- Codificador incremental: Este utiliza señales rápidas para medir cuánto ha cambiado la posición de algo.
- Codificador absoluto: Este tipo proporciona un código secreto para cada posición, lo que nos ayuda a saber dónde está algo, incluso si se corta la energía.
Esta lección se centra principalmente en el primer tipo, el codificador incremental.
Pinout del módulo de codificador rotatorio

Un módulo de codificador rotatorio tiene 4 pines:
- Pin CLK (Salida A): es el pulso principal que nos indica cuánta rotación ha ocurrido. Cada vez que giras la perilla un tope (clic) en cualquiera de las direcciones, el pin CLK emite una señal que completa un ciclo completo (BAJO → ALTO → BAJO).
- Pin DT (Salida B): actúa como el pin CLK, pero emite una señal que queda rezagada respecto a la señal CLK en 90 grados. Nos ayuda a determinar la dirección de rotación (en sentido horario o antihorario).
- Pin SW: proviene del botón del codificador. Normalmente está abierto. Cuando añadimos una resistencia de pull-up a este pin, el pin SW estará en ALTO cuando la perilla no esté presionada y BAJO cuando esté presionada.
- Pin VCC (+): debe conectarse a VCC (entre 3,3 y 5 voltios)
- Pin GND: debe conectarse a GND (0 V)
Codificador rotatorio vs potenciómetro
Podrías confundir el codificador rotatorio con el potenciómetro, pero son componentes distintos. Aquí hay una comparación entre ellos:
- El codificador giratorio es como la versión moderna de un potenciómetro, pero puede hacer más cosas.
- El codificador giratorio puede girar en un círculo completo sin detenerse, mientras que el potenciómetro solo puede girar aproximadamente tres cuartos del círculo.
- El codificador giratorio emite pulsos, mientras que el potenciómetro emite voltaje analógico.
- El codificador giratorio es útil cuando solo necesitas averiguar cuánto se ha movido la perilla, no exactamente dónde está. El potenciómetro es útil cuando realmente necesitas saber exactamente dónde está la perilla.
Cómo funciona un codificador rotatorio

Dentro del codificador hay un pequeño disco con ranuras que está conectado a un pin llamado C, el cual actúa como una tierra común. Tienes dos pines más, A y B.
- Cuando giras la perilla, los pines A y B tocan ese pin de tierra común C, pero el orden en que lo hacen depende de la dirección en la que gires la perilla (ya sea en sentido horario o antihorario).
- Estos toques generan dos señales. Tienen un ligero desfase en el tiempo porque un pin toca la tierra antes que el otro. Esas señales están desfasadas en 90 grados, lo que se llama codificación en cuadratura.
- Si giras la perilla en sentido horario, el pin A toca la tierra antes que el pin B. Pero si giras en sentido antihorario, el pin B toca la tierra primero antes que el pin A.
- Al verificar cuándo cada pin toca o se aparta de la tierra, podemos determinar hacia qué dirección está girando la perilla. Hacemos esto observando qué le sucede al pin B cuando cambia el pin A.

Cuando A cambia de estado de bajo a alto:
- Si B está ALTO, la perilla se gira en sentido antihorario.
- Si B está BAJO, la perilla se gira en sentido horario.
※ Nota:
Los pines A y B están conectados a los pines CLK y DT. Sin embargo, dependiendo del fabricante, el orden puede ser diferente. Los códigos que se proporcionan a continuación han sido probados con el codificador rotatorio de DIYables.
Cómo programar para un codificador rotatorio
- Arduino Nano ESP32 lee la señal del pin CLK
- Si el estado cambia de bajo a alto, entonces Arduino Nano ESP32 lee el estado del pin DT.
- Si el pin DT está en alto, la perilla se gira en sentido antihorario, Arduino Nano ESP32 incrementa el contador en 1
- Si el pin DT está en bajo, la perilla se gira en sentido horario, Arduino Nano ESP32 disminuye el contador en 1
Diagrama de Cableado

This image is created using Fritzing. Click to enlarge image
Código de Arduino Nano ESP32 – Codificador rotatorio
El siguiente código de Arduino Nano ESP32 hace:
- Detecta la dirección y la cantidad de rotación del codificador.
- Si detecta que el mando giratorio se ha movido un clic en dirección horaria, incremente el contador en uno.
- Si detecta que el mando giratorio se ha movido un clic en dirección antihoraria, disminuya el contador en uno.
- Detecta si el botón está pulsado.
Para simplificar el código de antirrebote de botones, se utiliza la biblioteca ezButton.
Pasos R\u00e1pidos
Si esta es la primera vez que usas Arduino Nano ESP32, consulta cómo configurar el entorno para Arduino Nano ESP32 en Arduino IDE.
- Instala la biblioteca ezButton en el IDE de Arduino.
- Copia el código anterior y ábrelo en el IDE de Arduino.
- Haz clic en el botón Subir en el IDE de Arduino para subir el código a Arduino Nano ESP32.
- Gira la perilla en sentido horario, luego antihorario.
- Presiona la perilla.
- Consulta el resultado en el Monitor Serial.
Explicación del código
Echa un vistazo a los comentarios línea por línea en el código.
Código Arduino Nano ESP32 – Codificador rotatorio con interrupción
En el código anterior, usar sondeo para comprobar continuamente el estado del pin puede desperdiciar los recursos del Arduino Nano ESP32 y provocar conteos perdidos si la ejecución de otro código es lenta.
Una solución efectiva es utilizar la interrupción, lo que elimina la necesidad de sondear. Esto permite que el Arduino Nano ESP32 realice otras tareas sin perder los conteos. A continuación se muestra el código para Arduino Nano ESP32 que utiliza la interrupción para leer la dirección y la posición del codificador rotatorio.
Ahora, al girar la perilla, notarás que aparece información en el Monitor Serial, similar a lo que viste en el código anterior.
※ Nota:
- Podrías encontrarte con tutoriales en otros sitios web que usan dos interrupciones para un codificador único, pero esto es innecesario y un desperdicio. Solo una interrupción es suficiente.
- Es importante usar la palabra clave volatile para las variables globales utilizadas en la interrupción. Omitir esto podría provocar problemas inesperados.
- Mantén el código dentro de la interrupción lo más sencillo posible. Evita usar Serial.print() o Serial.println() dentro de la interrupción.
Aplicación de codificador rotatorio para Arduino Nano ESP32
Con el codificador rotatorio, podemos hacer las siguientes aplicaciones, pero no limitadas a:
- Arduino Nano ESP32 - El codificador rotatorio controla la posición del motor Sevo
- Arduino Nano ESP32 - El codificador rotatorio controla el brillo del LED
- Arduino Nano ESP32 - El codificador rotatorio controla la velocidad del motor paso a paso
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.