UN encoder rotante è un sensore che converte il movimento di rotazione in segnali digitali, consentendo un controllo preciso su posizione, velocità e direzione. È comunemente usato in Controlli di volume, robotica, macchine a CNC e navigazione del menu. Questa guida ti mostrerà come impostare e utilizzare un encoder rotante con un Raspberry Pi usando Python.
Cosa avrai bisogno
- Raspberry Pi (Qualsiasi modello con supporto GPIO, ad esempio PI 3, PI 4)
- Encoder rotante (ad es. KY-040)
- Breadboard e fili jumper
- Python installato Sul Raspberry Pi
Passaggio 1: capire come funziona un encoder rotante
UN encoder rotante Ha due output principali:
- CLK (A) - Segnale di impulsi di clock
- Dt (b) - segnale di direzione
- SW (opzionale) - pulsante (utilizzato per la selezione delle opzioni)
Quando ruotato, il I pin CLK e DT generano impulsi. L'ordine di questi impulsi determina il direzione di rotazione.
Passaggio 2: cablaggio dell'encoder rotante su Raspberry Pi
PIN encoder rotante | Pin di lampone | Funzione |
---|---|---|
VCC | 3.3V (pin 1) | Alimentazione elettrica |
GND | Terra (pin 6) | Terra |
CLK (A) | GPIO17 (PIN 11) | Pulse dell'orologio |
Dt (b) | GPIO27 (PIN 13) | Segnale di direzione |
SW (pulsante) | GPIO22 (PIN 15) | Pulsante Premere |
Passaggio 3: installa le librerie richieste
Aggiorna il tuo Raspberry Pi e installa il RPI.GPIO Libreria per la gestione degli interrupt GPIO.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Passaggio 4: codice Python per leggere l'input dell'encoder rotante
Codice Python di base per leggere la rotazione
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()
Aggiunta del rilevamento del pulsante Aggiunta
# 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)
Passaggio 5: applicazioni di un encoder rotante con Raspberry Pi
- Navigazione del menu - Scorri attraverso menu LCD o OLED.
- Controllo del volume - Regola il volume nelle applicazioni multimediali.
- Macchine a CNC - Controllo preciso del movimento nelle applicazioni motorie a passo d'appalto.
- Robotica - Rilevare la rotazione delle ruote per il monitoraggio della velocità e della posizione.
- Automazione della casa intelligente - Utilizzare come selettore per diverse funzioni domestiche.
Risoluzione dei problemi
-
Encoder rotante non risponde
- Controlla il Assegnazioni di cablaggio e pin GPIO.
- Garantire I resistori pull-up sono abilitati (
PUD_UP
).
-
Saltare i passi o un movimento irregolare
- Aggiungere Delay di deboa (
time.sleep(0.01)
). - Utilizzo GPIO interrompe invece di polling (
GPIO.add_event_detect
).
- Aggiungere Delay di deboa (
-
Pulsante Premere non rilevato
- Garantire Il pin del pulsante è correttamente collegato a GND.
- Aggiungi a Tempo di rimonta di 300 ms In
GPIO.add_event_detect
.
Conclusione
UN encoder rotante è un dispositivo di input versatile per Navigazione del menu, controllo del motore e monitoraggio della posizione. Seguendo questa guida, è possibile integrare facilmente un encoder rotante con il tuo Raspberry Pi per progetti interattivi. 🚀