A 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
- Frambuesa pi (Cualquier modelo con soporte de GPIO, por ejemplo, PI 3, PI 4)
- Codificador rotativo (por ejemplo, KY-040)
- Cables de placa y jersey
- 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
- Navegación de menores - Desplácese por los menús LCD o OLED.
- Control de volumen - Ajuste el volumen en aplicaciones de medios.
- Máquinas CNC - Control de movimiento preciso en aplicaciones de motor paso a paso.
- Robótica - Detectar la rotación de la rueda para el seguimiento de velocidad y posición.
- Automatización inteligente del hogar - Use como selector para diferentes funciones de inicio.
Solución de problemas
-
El codificador rotativo no responde
- Revise el Asignaciones de pines de cableado y GPIO.
- Asegurar Las resistencias pull-up están habilitadas (
PUD_UP
).
-
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
).
- Agregar Retraso de eliminación (
-
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. 🚀