Obtenga entrega gratuita en todas las órdenes más de £20!

Usando un codificador rotativo con la Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

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

  1. Raspberry Pi (cualquier modelo con soporte GPIO, p. ej., Pi 3, Pi 4)
  2. Codificador rotatorio (p. ej., KY-040)
  3. Protoboard y cables de conexión
  4. 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

  1. Navegación de menús – Desplazarse por menús LCD u OLED.
  2. Control de volumen – Ajustar el volumen en aplicaciones multimedia.
  3. Máquinas CNC – Control preciso del movimiento en aplicaciones con motores paso a paso.
  4. Robótica – Detectar la rotación de ruedas para el seguimiento de velocidad y posición.
  5. Automatización del hogar – Usarlo como selector para diferentes funciones del hogar.

Solución de problemas

  1. 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).
  2. 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).
  3. 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. 🚀

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.

Escribir un comentario