Nota
¡Hola, bienvenido a la Comunidad de Entusiastas de Raspberry Pi, Arduino y ESP32 de SunFounder en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
¿Por qué unirte?
Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Preestrenos exclusivos: Accede anticipadamente a anuncios de nuevos productos y adelantos.
Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones festivas y sorteos: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [aquí] y únete hoy mismo!
Lección 17: Módulo de Codificador Rotatorio
En esta lección, aprenderás a conectar y programar un codificador rotatorio con Raspberry Pi. Te guiaremos paso a paso para escribir un script en Python que monitoree la posición del codificador y el estado del botón, con los resultados mostrados en la consola.
Componentes Requeridos
En este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ARTÍCULOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Universal Maker Sensor |
94 |
También puedes comprarlos por separado desde los enlaces a continuación.
Introducción del componente |
Enlace de compra |
|---|---|
Raspberry Pi 5 |
|
- |
|
Cableado
Código
from gpiozero import RotaryEncoder, Button
from time import sleep
# Inicializa el codificador rotatorio en los pines GPIO 17(CLK) y 27(DT) con retroceso en max_steps de 16
encoder = RotaryEncoder(a=17, b=27, wrap=True, max_steps=16)
# Inicializa el pin SW del codificador rotatorio en el GPIO 22
button = Button(22)
last_rotary_value = 0 # Variable para almacenar el último valor del codificador rotatorio
try:
while True: # Bucle infinito para monitorear continuamente el codificador
current_rotary_value = encoder.steps # Lee el valor actual de los pasos del codificador rotatorio
# Verifica si el valor del codificador rotatorio ha cambiado
if last_rotary_value != current_rotary_value:
print("Result =", current_rotary_value) # Muestra el valor actual
last_rotary_value = current_rotary_value # Actualiza el último valor
# Verifica si el codificador rotatorio ha sido presionado
if button.is_pressed:
print("Button pressed!") # Muestra un mensaje cuando se presiona el botón
button.wait_for_release() # Espera hasta que el botón sea liberado
sleep(0.1) # Pequeña pausa para evitar un uso excesivo de la CPU
except KeyboardInterrupt:
print("Program terminated") # Muestra un mensaje cuando el programa se termina con la interrupción del teclado
Análisis del Código
Importación de Bibliotecas:
El script comienza importando las clases
RotaryEncoderyButtonde la biblioteca gpiozero para interactuar con el codificador rotatorio, respectivamente, y la funciónsleepdel módulo time para agregar retrasos.from gpiozero import RotaryEncoder, Button from time import sleep
Inicialización del Codificador Rotatorio y del Botón:
Esta línea inicializa un objeto
RotaryEncoderde la bibliotecagpiozero. El codificador está conectado a los pines GPIO 17 y 27.El parámetro
wrap=Truesignifica que el valor del codificador se reiniciará después de alcanzar el valor demax_steps(16 en este caso), imitando el comportamiento de un dial circular.Aquí, se crea un objeto
Button, conectado al pin GPIO 22. Este objeto se utilizará para detectar cuando el codificador rotatorio sea presionado.
encoder = RotaryEncoder(a=17, b=27, wrap=True, max_steps=16) button = Button(22)
Implementación del Bucle de Monitoreo:
Se utiliza un bucle infinito (
while True:) para monitorear continuamente el codificador rotatorio.El valor actual del codificador rotatorio se lee y se compara con el último valor registrado. Si hay un cambio, se imprime el nuevo valor.
El script verifica si el codificador rotatorio ha sido presionado. Al detectar una pulsación, se muestra un mensaje y espera hasta que el codificador sea liberado.
Se incluye
sleep(0.1)para agregar un breve retraso, evitando un uso excesivo de la CPU.
last_rotary_value = 0 try: while True: current_rotary_value = encoder.steps if last_rotary_value != current_rotary_value: print("Result =", current_rotary_value) last_rotary_value = current_rotary_value if button.is_pressed: print("Button pressed!") button.wait_for_release() sleep(0.1) except KeyboardInterrupt: print("Program terminated")