Utilisation d'un encodeur rotatif avec le Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

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

  1. Raspberry Pi (Tout modèle avec le support GPIO, par ex., PI 3, PI 4)
  2. Encodeur rotatif (par exemple, KY-040)
  3. Fils de planche à pain et de cavalier
  4. 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

  1. Navigation par menu - Faites défiler les menus LCD ou OLED.
  2. Contrôle du volume - Ajustez le volume dans les applications médiatiques.
  3. Machines CNC - Contrôle de mouvement précis dans les applications du moteur pas à pas.
  4. Robotique - détecter la rotation des roues pour la vitesse et le suivi de la position.
  5. Home-Automation intelligente - Utilisez comme sélecteur pour différentes fonctions domestiques.

Dépannage

  1. 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).
  2. 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).
  3. 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. 🚀

Laissez un commentaire

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.