UM codificador rotativo é um sensor que converte o movimento rotacional em sinais digitais, permitindo controle preciso sobre a posição, velocidade e direção. É comumente usado em Controles de volume, robótica, máquinas CNC e navegação de menu. Este guia mostrará como configurar e usar um codificador rotativo com um Raspberry Pi usando o Python.
O que você precisará
- Raspberry Pi (Qualquer modelo com suporte GPIO, por exemplo, PI 3, PI 4)
- Codificador rotativo (por exemplo, KY-040)
- Fios de pão e jumper
- Python instalado No Raspberry Pi
Etapa 1: Entendendo como um codificador rotativo funciona
UM codificador rotativo tem duas saídas principais:
- CLK (a) - sinal de pulso de relógio
- Dt (b) - sinal de direção
- SW (opcional) - Botão (usado para selecionar opções)
Quando girado, o Os pinos CLK e DT geram pulsos. A ordem desses pulsos determina o direção de rotação.
Etapa 2: Fiação do codificador rotativo para o Raspberry Pi
Pino do codificador rotativo | Pino de framboesa pi | Função |
---|---|---|
VCC | 3.3V (pino 1) | Fonte de energia |
Gnd | Terra (pino 6) | Chão |
CLK (a) | Gpio17 (pino 11) | Pulso do relógio |
Dt (b) | Gpio27 (pino 13) | Sinal de direção |
SW (botão) | GPIO22 (pino 15) | Pressione o botão |
Etapa 3: Instale as bibliotecas necessárias
Atualize seu Raspberry Pi e instale o Rpi.gpio Biblioteca para lidar com interrupções do GPIO.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Etapa 4: Código Python para ler a entrada do codificador rotativo
Código Python básico para ler a rotação
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()
Adicionando o botão Pressione Detecção
# 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)
Etapa 5: Aplicações de um codificador rotativo com Raspberry Pi
- Navegação de menu - Role através de menus LCD ou OLED.
- Controle de volume - Ajuste o volume em aplicativos de mídia.
- Máquinas CNC - Controle preciso de movimento em aplicações de motor de passo.
- Robótica - Detecte a rotação da roda para o rastreamento de velocidade e posição.
- Automação residencial inteligente - Use como seletor para diferentes funções domésticas.
Solução de problemas
-
Codificador rotativo não respondendo
- Verifique o atribuições de fiação e pino GPIO.
- Garantir Os resistores de pull-up estão ativados (
PUD_UP
).
-
Passos de pular ou movimento irregular
- Adicionar Atraso em debounce (
time.sleep(0.01)
). - Usar GPIO interrompe Em vez de pesquisar (
GPIO.add_event_detect
).
- Adicionar Atraso em debounce (
-
Botão Pressione não detectado
- Garantir O pino do botão está conectado corretamente para gnd.
- Adicione a Tempo de debounce de 300ms em
GPIO.add_event_detect
.
Conclusão
UM codificador rotativo é um dispositivo de entrada versátil para Navegação de menu, controle do motor e rastreamento de posição. Seguindo este guia, você pode integrar facilmente um codificador rotativo com o seu Raspberry Pi para projetos interativos. 🚀