UN encodeur rotatif est un capteur qui convertit le mouvement de rotation en signaux numériques, permettant un contrôle précis sur la position, la vitesse et la direction. Il est couramment utilisé dans Contrôles de volume, robotique, machines CNC et navigation au menu. Ce guide vous montrera comment configurer et utiliser un encodeur rotatif avec un Raspberry Pi à l'aide de Python.
Ce dont vous aurez besoin
- Raspberry Pi (Tout modèle avec le support GPIO, par ex., PI 3, PI 4)
- Encodeur rotatif (par exemple, KY-040)
- Fils de planche à pain et de cavalier
- Python installé sur le Raspberry Pi
Étape 1: comprendre comment fonctionne un encodeur rotatif
UN encodeur rotatif A deux sorties principales:
- CLK (A) - Signal d'impulsion d'horloge
- Dt (b) - Signal de direction
- Swin (facultatif) - bouton-poussoir (utilisé pour sélectionner les options)
Lorsqu'il est tourné, le Les broches CLK et DT génèrent des impulsions. L'ordre de ces impulsions détermine direction de rotation.
Étape 2: Câblage de l'encodeur rotatif vers le framboise PI
Broche encodeur rotatif | Pin de framboise PI | Fonction |
---|---|---|
VCC | 3.3V (broche 1) | Alimentation électrique |
GND | Terre (broche 6) | Sol |
CLK (A) | GPIO17 (broche 11) | Impulsion d'horloge |
Dt (b) | GPIO27 (broche 13) | Signal de direction |
SW (bouton) | GPIO22 (broche 15) | Appuyez sur le bouton |
Étape 3: Installez les bibliothèques requises
Mettez à jour votre framboise PI et installez le Rpi.gpio Bibliothèque pour gérer les interruptions GPIO.
sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio
Étape 4: code python pour lire l'entrée du codeur rotatif
Code python de base pour lire la rotation
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()
Ajout de la détection du bouton
# 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)
Étape 5: Applications d'un encodeur rotatif avec Raspberry Pi
- Navigation par menu - Faites défiler les menus LCD ou OLED.
- Contrôle du volume - Ajustez le volume dans les applications médiatiques.
- Machines CNC - Contrôle de mouvement précis dans les applications du moteur pas à pas.
- Robotique - détecter la rotation des roues pour la vitesse et le suivi de la position.
- Home-Automation intelligente - Utilisez comme sélecteur pour différentes fonctions domestiques.
Dépannage
-
Encodeur rotatif ne répond pas
- Vérifiez le Câblage et affectations de broches GPIO.
- Assurer Les résistances de traction sont activées (
PUD_UP
).
-
Sauter des étapes ou un mouvement erratique
- Ajouter Débouncer retard (
time.sleep(0.01)
). - Utiliser Interruptions GPIO Au lieu de sonder (
GPIO.add_event_detect
).
- Ajouter Débouncer retard (
-
Bouton appuyer non détecté
- Assurer La broche de bouton est correctement connectée à GND.
- Ajouter un Déboucher le temps de 300 ms dans
GPIO.add_event_detect
.
Conclusion
UN encodeur rotatif est un dispositif d'entrée polyvalent pour Navigation de menu, contrôle du moteur et suivi de la position. En suivant ce guide, vous pouvez facilement intégrer un encodeur rotatif avec votre Raspberry Pi pour les projets interactifs. 🚀