Arduino Nano - Codificador rotatorio
Este tutorial explica cómo usar el codificador rotatorio con Arduino Nano. Esto es lo que cubriremos:
- Cómo funciona el codificador rotatorio
- La diferencia entre un codificador rotatorio y un potenciómetro (otro tipo de perilla)
- Cómo conectar el codificador rotatorio a un Arduino Nano
- Cómo escribir código para el Arduino Nano para leer la dirección y la posición del codificador rotatorio.
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 llamada codificador rotatorio puede convertir giros en una señal. Muestra cuánto giró algo y dónde se encuentra. Hay dos tipos principales:
- Codificador incremental: Utiliza señales rápidas para saber cuánto se movió algo.
- Codificador absoluto: Este tipo proporciona un código único para cada posición, lo que ayuda a determinar exactamente dónde se encuentra algo, incluso si se corta la energía.
Esta guía trata por completo sobre el codificador incremental.
Pinout del módulo codificador rotatorio

Un módulo 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 detent (clic) en cualquiera de las direcciones, el pin CLK emite una señal que completa un ciclo completo (LOW → HIGH → LOW).
- Pin DT (Salida B): funciona 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 (horaria o antihoraria).
- Pin SW: es la salida del pulsador dentro del encoder. Normalmente está abierto. Si usamos una resistencia de pull-up en este pin, el pin SW estará en HIGH cuando la perilla no esté presionada y LOW 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
Puede que confundas el codificador rotatorio con el potenciómetro, pero son piezas distintas. A continuación, una comparación entre ellos:
- El codificador rotatorio puede considerarse la versión moderna de un potenciómetro, pero ofrece más capacidades.
- El codificador rotatorio puede girar completamente sin detenerse, mientras que el potenciómetro solo puede girar aproximadamente tres cuartos de vuelta.
- El codificador rotatorio emite pulsos, mientras que el potenciómetro produce una tensión analógica.
- Cuando solo necesitas saber cuánto se ha movido la perilla sin determinar su posición exacta, el codificador rotatorio es conveniente. Por otro lado, el potenciómetro es valioso cuando necesitas conocer con precisión la posición de la perilla.
Cómo funciona un codificador rotatorio

Dentro del codificador, hay un disco con ranuras conectado a un pin llamado C, que actúa como tierra común. Hay dos pines más, A y B.
- Cuando giras el mando, los pines A y B tocan el pin de tierra común C, pero en un orden específico dependiendo de hacia qué lado gires el mando (horario o antihorario).
- Estos contactos crean dos señales. Tienen un pequeño desfase en el tiempo porque un pin toca la tierra antes que el otro. Las dos señales están desfasadas 90 grados entre sí. A esto se le llama codificación en cuadratura.
- Cuando giras el mando en dirección horario, el pin A toca la tierra antes que el pin B. Cuando giras el mando en dirección antihoraria, el pin B toca la tierra antes que el pin A.
- Observando cuándo cada pin toca o sale de la tierra, podemos deducir hacia qué dirección está girando el mando. Hacemos esto comprobando qué ocurre con el pin B cuando el pin A cambia.

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

This image is created using Fritzing. Click to enlarge image
Ver La mejor forma de alimentar Arduino Nano y otros componentes.
Código para Arduino Nano – codificador rotatorio
El código de Arduino Nano que se muestra a continuación hace lo siguiente:
- Detecta la dirección y la cantidad de rotación del codificador.
- Si detecta que la perilla ha girado un clic en dirección horaria, incremente el contador en uno.
- Si detecta que la perilla ha girado un clic en dirección antihoraria, disminuya el contador en uno.
- Detecta si el botón está presionado.
Para simplificar el código del rebote del botón, se utiliza la biblioteca ezButton.
Pasos R\u00e1pidos
- Instala la biblioteca ezButton en el IDE de Arduino. Ver Cómo
- Copia el código anterior y ábrelo con el IDE de Arduino
- Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino Nano
- Gira la perilla en sentido horario, y luego en sentido antihorario
- Pulsa la perilla
- Consulta el resultado en el Monitor Serial.
Explicación del código
Consulta los comentarios línea por línea en el código.
Código de Arduino Nano – Codificador rotatorio con interrupción
En el código del ejemplo anterior, usamos el método de sondeo, que verifica continuamente el estado del pin. Esto tiene dos desventajas:
- Malgastar el recurso del Arduino Nano
- Puede que se pierdan algunos contadores si otro código tarda mucho en ejecutarse.
Una forma de manejar esto es mediante interrupciones. Las interrupciones eliminan la necesidad de revisar constantemente un evento en particular. Esto permite que el Arduino Nano realice otras tareas sin pasar por alto un evento.
Aquí tienes un ejemplo de cómo leer un codificador rotatorio con interrupciones.
Ahora, a medida que giras la perilla, notarás que aparece información en el Monitor Serial, muy parecido a lo que viste en el código anterior.
※ Nota:
- Si usas la interrupción, debes conectar el pin CLK del codificador a un pin del Arduino Nano que pueda manejar interrupciones. Pero recuerda, no todos los pines del Arduino Nano pueden hacer esto. Por ejemplo, en el Arduino Nano, solo los pines 2 y 3 pueden funcionar con interrupciones.
- Podrías encontrarte con tutoriales en otros sitios web que usan dos interrupciones para un solo codificador, pero esto es innecesario y desperdicia recursos.
- 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
Con el codificador rotatorio, podemos realizar las siguientes aplicaciones, pero no nos limitamos a ellas:
- Arduino Nano - El codificador rotatorio controla la posición del servomotor
- Arduino Nano - El codificador rotatorio controla el brillo del LED
- Arduino Nano - 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.