Usando un codificador rotativo con la Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

codificador giratorio es un sensor que convierte el movimiento de rotación en señales digitales, lo que permite un control preciso sobre la posición, la velocidad y la dirección. Se usa comúnmente en Controles de volumen, robótica, máquinas CNC y navegación de menú. Esta guía le mostrará cómo configurar y usar un codificador rotativo con una Raspberry Pi usando Python.


Lo que necesitarás

  1. Frambuesa pi (Cualquier modelo con soporte de GPIO, por ejemplo, PI 3, PI 4)
  2. Codificador rotativo (por ejemplo, KY-040)
  3. Cables de placa y jersey
  4. Python instalado en la frambuesa pi

Paso 1: Comprender cómo funciona un codificador rotativo

A codificador giratorio tiene dos salidas principales:

  • Clk (a) - señal de pulso de reloj
  • Dt (b) - señal de dirección
  • SUDOESTE (opcional) - Botón Push (utilizado para seleccionar opciones)

Cuando se gira, el Los pines CLK y DT generan pulsos. El orden de estos pulsos determina el dirección de rotación.


Paso 2: Cableado el codificador giratorio al Raspberry Pi

Pasador de codificador giratorio Pin de frambuesa Pi Función
VCC 3.3V (pin 1) Fuente de alimentación
Gnd Tierra (pin 6) Suelo
Clk (a) GPIO17 (pin 11) Pulso de reloj
Dt (b) GPIO27 (pin 13) Señal de dirección
SW (botón) GPIO22 (pin 15) Botón Presione

Paso 3: Instale las bibliotecas requeridas

Actualice su Raspberry Pi e instale el Rpi.gpio Biblioteca para manejar interrupciones de GPIO.

sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio

Paso 4: Código de Python para leer la entrada del codificador rotativo

Código básico de Python para leer la rotación

import RPi.GPIO as GPIO
import time

# Define GPIO pins
CLK = 17
DT = 27
counter = 0
last_state = None

# Setup 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)

# Read initial state
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 = "Clockwise"
            else:
                counter -= 1
                direction = "Counterclockwise"
            print(f"Position: {counter}, Direction: {direction}")
        last_state = current_state
        time.sleep(0.01)  # Debounce delay
except KeyboardInterrupt:
    print("Exiting...")
finally:
    GPIO.cleanup()

Agregar botón Presione la detección

# Define button pin
SW = 22
GPIO.setup(SW, GPIO.IN, pull_up_down=GPIO.PUD_UP)

def button_pressed(channel):
    print("Button Pressed!")

# Add event detection for button press
GPIO.add_event_detect(SW, GPIO.FALLING, callback=button_pressed, bouncetime=300)

Paso 5: Aplicaciones de un codificador rotativo con Raspberry Pi

  1. Navegación de menores - Desplácese por los menús LCD o OLED.
  2. Control de volumen - Ajuste el volumen en aplicaciones de medios.
  3. Máquinas CNC - Control de movimiento preciso en aplicaciones de motor paso a paso.
  4. Robótica - Detectar la rotación de la rueda para el seguimiento de velocidad y posición.
  5. Automatización inteligente del hogar - Use como selector para diferentes funciones de inicio.

Solución de problemas

  1. El codificador rotativo no responde

    • Revise el Asignaciones de pines de cableado y GPIO.
    • Asegurar Las resistencias pull-up están habilitadas (PUD_UP).
  2. Saltar pasos o movimiento errático

    • Agregar Retraso de eliminación (time.sleep(0.01)).
    • Usar GPIO interrumpe en lugar de encuestar (GPIO.add_event_detect).
  3. Botón presione no detectado

    • Asegurar El pin del botón está correctamente conectado a gnd.
    • Agregar un Tiempo de desbloqueo de 300 ms en GPIO.add_event_detect.

Conclusión

A codificador giratorio es un dispositivo de entrada versátil para navegación del menú, control del motor y seguimiento de posición. Siguiendo esta guía, puede integrar fácilmente un codificador rotativo con su Frambuesa pi para proyectos interactivos. 🚀

Escribir un comentario

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.