A codificador rotatorio es un sensor que convierte el movimiento rotatorio en señales digitales, permitiendo un control preciso de la posición, velocidad y dirección. Se utiliza comúnmente en controles de volumen, robótica, máquinas CNC y navegación de menús. Esta guía te mostrará cómo configurar y usar un codificador rotatorio con una Raspberry Pi usando Python.
Qué necesitarás
- Raspberry Pi (cualquier modelo con soporte GPIO, p. ej., Pi 3, Pi 4)
- Codificador rotatorio (p. ej., KY-040)
- Protoboard y cables de conexión
- Python instalado en la Raspberry Pi
Paso 1: Entender cómo funciona un codificador rotatorio
Un codificador rotatorio tiene dos salidas principales:
- CLK (A) – Señal de pulso de reloj
- DT (B) – Señal de dirección
- SW (opcional) – Pulsador (usado para seleccionar opciones)
Al girarlo, los pines CLK y DT generan pulsos. El orden de estos pulsos determina la dirección de rotación.
Paso 2: Conectar el codificador rotatorio a la Raspberry Pi
| Pin del codificador rotatorio | Pin de la Raspberry Pi | Función |
|---|---|---|
| VCC | 3.3V (Pin 1) | Alimentación |
| GND | GND (Pin 6) | Masa |
| CLK (A) | GPIO17 (Pin 11) | Pulso de reloj |
| DT (B) | GPIO27 (Pin 13) | Señal de dirección |
| SW (Botón) | GPIO22 (Pin 15) | Pulsación del botón |
Paso 3: Instalar las librerías necesarias
Actualiza tu Raspberry Pi e instala la librería RPi.GPIO para manejar interrupciones GPIO.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Paso 4: Código Python para leer la entrada del codificador rotatorio
Código Python básico para leer la rotación
import RPi.GPIO as GPIO
import time
# Definir pines GPIO
CLK = 17
DT = 27
counter = 0
last_state = None
# Configurar GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(CLK, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(DT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Leer estado inicial
last_state = GPIO.input(CLK)
try:
while True:
current_state = GPIO.input(CLK)
if current_state != last_state:
if GPIO.input(DT) != current_state:
counter += 1
direction = "Horario"
else:
counter -= 1
direction = "Antihorario"
print(f"Posición: {counter}, Dirección: {direction}")
last_state = current_state
time.sleep(0.01) # Retardo para rebote
except KeyboardInterrupt:
print("Saliendo...")
finally:
GPIO.cleanup()
Agregar detección de pulsación de botón
# Definir pin del botón
SW = 22
GPIO.setup(SW, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def button_pressed(channel):
print("¡Botón presionado!")
# Agregar detección de eventos para la pulsación del botón
GPIO.add_event_detect(SW, GPIO.FALLING, callback=button_pressed, bouncetime=300)
Paso 5: Aplicaciones de un codificador rotatorio con Raspberry Pi
- Navegación de menús – Desplazarse por menús LCD u OLED.
- Control de volumen – Ajustar el volumen en aplicaciones multimedia.
- Máquinas CNC – Control preciso del movimiento en aplicaciones con motores paso a paso.
- Robótica – Detectar la rotación de ruedas para el seguimiento de velocidad y posición.
- Automatización del hogar – Usarlo como selector para diferentes funciones del hogar.
Solución de problemas
-
El codificador rotatorio no responde
- Comprueba el cableado y las asignaciones de pines GPIO.
- Asegúrate de que se activen resistencias pull-up (
PUD_UP).
-
Pasos omitidos o movimiento errático
- Añade retardo para rebote (
time.sleep(0.01)). - Usa interrupciones GPIO en lugar de sondeo (
GPIO.add_event_detect).
- Añade retardo para rebote (
-
El botón no se detecta
- Asegúrate de que el pin del botón esté correctamente conectado a GND.
- Añade un tiempo de rebote de 300ms en
GPIO.add_event_detect.
Conclusión
Un codificador rotatorio es un dispositivo de entrada versátil para navegación de menús, control de motores y seguimiento de posición. Siguiendo esta guía, puedes integrar fácilmente un codificador rotatorio con tu Raspberry Pi para proyectos interactivos. 🚀



