Verwenden eines Rotationscodierers mit dem Raspberry Pi

Using a Rotary Encoder with the Raspberry Pi

Rotary Encoder ist ein Sensor, der Rotationsbewegung in digitale Signale umwandelt und eine präzise Steuerung über Position, Geschwindigkeit und Richtung ermöglicht. Es wird üblicherweise in verwendet Volumensteuerung, Robotik, CNC -Maschinen und Menünavigation. In dieser Anleitung wird angezeigt, wie Sie einen Rotary -Encoder mit einem Raspberry -Pi mit Python einrichten und verwenden.


Was Sie brauchen werden

  1. Raspberry Pi (Jedes Modell mit GPIO -Unterstützung, z. B. PI 3, PI 4)
  2. Rotary Encoder (z. B. KY-040)
  3. Breadboard- und Jumper -Drähte
  4. Python installiert Auf dem Raspberry Pi

Schritt 1: Verstehen Sie, wie ein Rotationscodierer funktioniert

A Rotary Encoder hat zwei Hauptausgänge:

  • Clk (a) - Taktpulssignal
  • Dt (b) - Richtungssignal
  • SW (optional) - Drucktaste (zur Auswahl der Optionen)

Beim Drehen die CLK- und DT -Stifte erzeugen Impulse. Die Reihenfolge dieser Impulse bestimmt die Rotationsrichtung.


Schritt 2: Verkabelung des Rotary -Encoders mit Raspberry Pi

Rotary -Encoder -Stift Raspberry Pi Pin Funktion
VCC 3,3 V (Pin 1) Stromversorgung
GND Masse (Pin 6) Boden
Clk (a) Gpio17 (Pin 11) Uhrpuls
Dt (b) Gpio27 (Pin 13) Richtungssignal
SW (Knopf) Gpio22 (Pin 15) Taste drücken

Schritt 3: Installieren Sie die erforderlichen Bibliotheken

Aktualisieren Sie Ihren Raspberry Pi und installieren Sie die Rpi.gpio Bibliothek zum Umgang mit GPIO -Interrupts.

sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio

Schritt 4: Python -Code zum Lesen von Rotary Encoder -Eingabe

Basic Python Code zum Lesen der 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()

Hinzufügen von Taste Drücken Sie die Erkennung

# 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)

Schritt 5: Anwendungen eines Rotary -Encoders mit Raspberry Pi

  1. Menünavigation - Scrollen Sie durch LCD- oder OLED -Menüs.
  2. Lautstärkekontrolle - Passen Sie das Volumen in Medienanwendungen an.
  3. CNC -Maschinen - Präzise Bewegungssteuerung in Schrittmotoranwendungen.
  4. Robotik - Die Raddrehung für Geschwindigkeit und Positionsverfolgung erkennen.
  5. Smart Home Automation - Verwenden Sie als Selektor für verschiedene Heimfunktionen.

Fehlerbehebung

  1. Rotary Encoder antwortet nicht

    • Überprüfen Sie die Kabel- und GPIO -PIN -Zuordnungen.
    • Sicherstellen Pull-up-Widerstände sind aktiviert (PUD_UP).
  2. Schritte überspringen oder unregelmäßige Bewegungen

    • Hinzufügen Verzögerung entlarven (time.sleep(0.01)).
    • Verwenden GPIO unterbricht anstatt zu befragen (GPIO.add_event_detect).
  3. Taste Drücken Sie nicht erkannt

    • Sicherstellen Die Knopfstift ist ordnungsgemäß verbunden zu gnd.
    • Fügen Sie a hinzu Entlieben Sie die Zeit von 300 ms In GPIO.add_event_detect.

Abschluss

A Rotary Encoder ist ein vielseitiges Eingabegerät für Menünavigation, Motorsteuerung und Positionsverfolgung. Wenn Sie diesem Handbuch folgen, können Sie leicht einen Rotary -Encoder in Ihre integrieren Raspberry Pi Für interaktive Projekte. 🚀

Hinterlasse einen Kommentar

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.