Raspberry Pi - Rotary Encoder

Dieses Tutorial erklärt Ihnen, wie Sie den inkrementellen Rotary Encoder mit Raspberry Pi verwenden. Hier ist, was wir behandeln werden:

Erforderliche Hardware

1×Raspberry Pi 5
1×Drehgeber
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Raspberry Pi
1×(Empfohlen) Raspberry Pi Prototyping-Grundplatte & Breadboard-Kit
1×(Empfohlen) HDMI-Touchscreen-Monitor für Raspberry Pi

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den Rotary Encoder

Ein sich drehender Knopf, der Bewegung in ein Signal umwandelt, wird Rotary Encoder genannt. Er zeigt Ihnen, wie viel sich etwas gedreht hat und wo es sich befindet. Es gibt zwei Haupttypen:

  • Inkrementeller Encoder: Dieser verwendet schnelle Signale, um zu messen, wie viel sich etwas verändert hat.
  • Absoluter Encoder: Diese Art bietet einen eindeutigen Code für jede Position, sodass Sie genau wissen, wo sich etwas befindet, auch wenn der Strom ausfällt.

Dieser Leitfaden konzentriert sich auf den inkrementellen Encoder.

Rotary Encoder Modul Pinout

rotary encoder pinout

Ein Rotary Encoder Modul hat 4 Pins:

  • CLK Pin (Output A): ist das Hauptsignal, das uns sagt, wie viel Rotation stattgefunden hat. Wann immer Sie den Knopf um eine Raste (Klick) in jede Richtung drehen, gibt der CLK Pin ein Signal aus, das einen vollständigen Zyklus abschließt (LOW HIGH LOW).
  • DT Pin (Output B): funktioniert wie der CLK Pin, gibt aber ein Signal aus, das dem CLK Signal um 90 Grad nachläuft. Er hilft uns, die Drehrichtung (im Uhrzeigersinn oder gegen den Uhrzeigersinn) zu bestimmen.
  • SW Pin: ist der Ausgang des Druckknopfs im Encoder. Er ist normalerweise offen. Wenn wir einen Pull-up-Widerstand an diesem Pin verwenden, wird der SW Pin HIGH sein, wenn der Knopf nicht gedrückt wird, und LOW, wenn er gedrückt wird.
  • VCC Pin (+): muss mit VCC verbunden werden (zwischen 3,3 und 5 Volt)
  • GND Pin: muss mit GND (0V) verbunden werden

Rotary Encoder vs Potentiometer

Sie könnten den Rotary Encoder mit dem Potentiometer verwechseln, aber sie sind unterschiedliche Komponenten. Hier ist ein Vergleich zwischen ihnen:

  • Rotary Encoder ist wie die moderne Version des Potentiometers, aber sie können mehr Dinge tun.
  • Rotary Encoder kann sich im vollen Kreis ohne Stopp drehen, während Potentiometer sich nur etwa drei Viertel des Kreises drehen können.
  • Rotary Encoder gibt Impulse aus, während Potentiometer die analoge Spannung ausgeben.
  • Rotary Encoder ist praktisch, wenn Sie nur herausfinden müssen, wie viel sich der Knopf bewegt hat, nicht genau wo er ist. Potentiometer ist nützlich, wenn Sie wirklich genau wissen müssen, wo sich ein Knopf befindet.

Wie der Rotary Encoder funktioniert

rotary encoder output

Im Inneren des Encoders befindet sich eine Scheibe mit Schlitzen, die mit einem Pin namens C verbunden ist, der wie eine gemeinsame Masse ist. Es gibt zwei weitere Pins, A und B.

  • Wenn Sie den Knopf drehen, berühren die Pins A und B den gemeinsamen Masse-Pin C, aber in einer bestimmten Reihenfolge, je nachdem, in welche Richtung Sie den Knopf drehen (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
  • Diese Berührungen erzeugen zwei Signale. Sie unterscheiden sich etwas im Timing, weil ein Pin die Masse vor dem anderen berührt. Zwei Signale sind 90 Grad außer Sync miteinander. Dies wird Quadratur-Kodierung genannt.
  • Wenn Sie den Knopf im Uhrzeigersinn drehen, berührt Pin A die Masse vor Pin B. Wenn Sie den Knopf gegen den Uhrzeigersinn drehen, berührt Pin B die Masse vor Pin A.
  • Durch Überwachung, wann jeder Pin die Masse berührt oder verlässt, können wir herausfinden, in welche Richtung sich der Knopf dreht. Wir tun dies, indem wir prüfen, was mit Pin B passiert, wenn sich Pin A ändert.
How rotary encoder works

Wenn A den Zustand von LOW zu HIGH ändert:

  • Wenn B LOW ist, wird der Knopf im Uhrzeigersinn gedreht.
  • Wenn B HIGH ist, wird der Knopf gegen den Uhrzeigersinn gedreht.

※ Notiz:

Pin A und B sind mit CLK und DT Pins verbunden. Je nach Hersteller kann die Reihenfolge jedoch unterschiedlich sein. Die unten bereitgestellten Codes sind mit dem Rotary Encoder von DIYables getestet

Wie man für Rotary Encoder programmiert

  • Prüfen Sie das Signal vom CLK Pin
  • Wenn sich der Zustand von LOW zu HIGH ändert, prüfen Sie den Zustand des DT Pins.
    • Wenn der Zustand des DT Pins HIGH ist, wird der Knopf gegen den Uhrzeigersinn gedreht, erhöhen Sie den Zähler um 1
    • Wenn der Zustand des DT Pins LOW ist, wird der Knopf im Uhrzeigersinn gedreht, verringern Sie den Zähler um 1

Verdrahtungsdiagramm

Raspberry Pi rotary encoder Wiring Diagram

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Um Ihren Verdrahtungsaufbau zu vereinfachen und zu organisieren, empfehlen wir die Verwendung eines Schraubklemmenblock-Shields für Raspberry Pi. Dieses Shield gewährleistet sicherere und besser verwaltbare Verbindungen, wie unten gezeigt:

Raspberry Pi Schraubklemmenblock-Shield

Raspberry Pi Code – Rotary Encoder

Der folgende Raspberry Pi Code macht:

  • Erkennt die Richtung und Menge der Drehung des Encoders.
    • Wenn erkannt wird, dass der Knopf um eine Raste (Klick) im Uhrzeigersinn gedreht wurde, erhöhe den Zähler um eins.
    • Wenn erkannt wird, dass der Knopf um eine Raste (Klick) gegen den Uhrzeigersinn gedreht wurde, verringere den Zähler um eins.
  • Erkennt, ob der Button gedrückt wird.

Schnelle Schritte

  • Stellen Sie sicher, dass Sie Raspbian oder ein anderes Raspberry Pi-kompatibles Betriebssystem auf Ihrem Pi installiert haben.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit demselben lokalen Netzwerk wie Ihr PC verbunden ist.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit dem Internet verbunden ist, wenn Sie einige Bibliotheken installieren müssen.
  • Wenn Sie Raspberry Pi zum ersten Mal verwenden, siehe Raspberry Pi einrichten
  • Verbinden Sie Ihren PC über SSH mit dem Raspberry Pi unter Verwendung des integrierten SSH-Clients unter Linux und macOS oder PuTTY unter Windows. Siehe PC mit Raspberry Pi über SSH verbinden.
  • Stellen Sie sicher, dass Sie die RPi.GPIO Bibliothek installiert haben. Falls nicht, installieren Sie sie mit folgendem Befehl:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Erstellen Sie eine Python-Script-Datei rotary_encoder.py und fügen Sie folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-rotary-encoder import RPi.GPIO as GPIO import time # Pin numbers on Raspberry Pi CLK_PIN = 7 # GPIO7 connected to the rotary encoder's CLK pin DT_PIN = 8 # GPIO8 connected to the rotary encoder's DT pin SW_PIN = 25 # GPIO25 connected to the rotary encoder's SW pin DIRECTION_CW = 0 DIRECTION_CCW = 1 counter = 0 direction = DIRECTION_CW CLK_state = 0 prev_CLK_state = 0 button_pressed = False prev_button_state = GPIO.HIGH # Configure GPIO pins GPIO.setmode(GPIO.BCM) GPIO.setup(CLK_PIN, GPIO.IN) GPIO.setup(DT_PIN, GPIO.IN) GPIO.setup(SW_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Read the initial state of the rotary encoder's CLK pin prev_CLK_state = GPIO.input(CLK_PIN) try: while True: # Read the current state of the rotary encoder's CLK pin CLK_state = GPIO.input(CLK_PIN) # If the state of CLK is changed, then pulse occurred # React to only the rising edge (from LOW to HIGH) to avoid double count if CLK_state != prev_CLK_state and CLK_state == GPIO.HIGH: # If the DT state is HIGH, the encoder is rotating in counter-clockwise direction # Decrease the counter if GPIO.input(DT_PIN) == GPIO.HIGH: counter -= 1 direction = DIRECTION_CCW else: # The encoder is rotating in clockwise direction => increase the counter counter += 1 direction = DIRECTION_CW print("Rotary Encoder:: direction:", "CLOCKWISE" if direction == DIRECTION_CW else "ANTICLOCKWISE", "- count:", counter) # Save last CLK state prev_CLK_state = CLK_state # State change detection for the button button_state = GPIO.input(SW_PIN) if button_state != prev_button_state: time.sleep(0.01) # Add a small delay to debounce if button_state == GPIO.LOW: print("The button is pressed") button_pressed = True else: button_pressed = False prev_button_state = button_state except KeyboardInterrupt: GPIO.cleanup() # Clean up GPIO on program exit
  • Speichern Sie die Datei und führen Sie das Python-Script aus, indem Sie folgenden Befehl im Terminal ausführen:
python3 rotary_encoder.py
  • Drehen Sie den Knopf im Uhrzeigersinn, dann gegen den Uhrzeigersinn
  • Drücken Sie den Knopf
  • Schauen Sie sich das Ergebnis im Terminal an.
PuTTY - Raspberry Pi
DIRECTION: Clockwise | COUNTER: 1 DIRECTION: Clockwise | COUNTER: 2 DIRECTION: Clockwise | COUNTER: 3 DIRECTION: Clockwise | COUNTER: 4 DIRECTION: Clockwise | COUNTER: 5 DIRECTION: Counter-clockwise | COUNTER: 4 DIRECTION: Counter-clockwise | COUNTER: 3 DIRECTION: Counter-clockwise | COUNTER: 2 DIRECTION: Counter-clockwise | COUNTER: 1 DIRECTION: Counter-clockwise | COUNTER: 0 The button is pressed

Code-Erklärung

Schauen Sie sich die zeilenweisen Kommentare im Code an

Raspberry Pi Rotary Encoder Anwendungen

Mit Rotary Encoder können wir folgende Anwendungen durchführen, aber nicht darauf begrenzt:

  • Raspberry Pi - Rotary Encoder steuert Position des Servo Motors
  • Raspberry Pi - Rotary Encoder steuert Helligkeit der LED
  • Raspberry Pi - Rotary Encoder steuert Geschwindigkeit des Stepper Motors

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Verwandte Tutorials

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!