Arduino Mega - Rotary Encoder (Drehgeber)
Diese Anleitung zeigt, wie Sie einen Incremental Encoder mit Arduino Mega verwenden. Wir behandeln:
- Was ein Rotary Encoder (Drehgeber) macht und wie er funktioniert
- Wie sich ein Rotary Encoder von einem Potentiometer unterscheidet
- Wie Sie einen Rotary Encoder mit einem Arduino Mega verbinden
- Wie Sie einen Rotary Encoder mit einem Arduino Mega ohne Interrupts auslesen
- Wie Sie einen Rotary Encoder mit einem Arduino Mega mit Interrupts auslesen

Benötigte Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (30 Sensoren/Displays) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über Rotary Encoder (Drehgeber)
Ein Rotary Encoder ist ein Gerät, das Drehbewegungen in ein elektrisches Signal umwandelt. Es misst, wie weit sich eine Welle oder ein Knopf gedreht hat und deren Position. Es gibt zwei Haupttypen:
- Incremental Encoder: Er sendet Impulse zur Verfolgung von Bewegungen.
- Absolute Encoder: Er gibt einen eindeutigen digitalen Code für jede Position aus, sodass er auch bei ausgeschalteter Stromversorgung die exakte Position anzeigt.
Diese Anleitung behandelt den Incremental Encoder.
Rotary Encoder Modul Pinbelegung

Ein Rotary Encoder Modul hat vier Pins:
- CLK Pin (Output A): Sendet bei jeder Drehung des Knopfs um einen Klick in beide Richtungen einen Impuls, von niedrig zu hoch und zurück zu niedrig. Dies zeigt, wie weit sich der Knopf bewegt hat.
- DT Pin (Output B): Genauso wie CLK, aber der Impuls kommt etwas später—90 Grad nach dem CLK-Impuls. Diese Verzögerung hilft uns zu erkennen, ob die Drehung im oder gegen den Uhrzeigersinn erfolgt.
- SW Pin: Verbindet sich mit dem eingebauten Druckknopf des Encoders, der normalerweise offen ist. Mit einem Pull-up-Widerstand liest dieser Pin HIGH, wenn er nicht gedrückt wird, und LOW, wenn er gedrückt wird.
- VCC Pin (+): Verbindung zu einer Stromversorgung von 3,3 bis 5 Volt.
- GND Pin: Verbindung zur Masse (0V).
Rotary Encoder vs Potentiometer
Sie könnten den Rotary Encoder mit dem Potentiometer verwechseln, aber es sind zwei verschiedene Bauteile. So unterscheiden sie sich:
- Ein Rotary Encoder kann endlos drehen, aber ein Potentiometer kann nur etwa 3/4 eines Kreises drehen.
- Ein Rotary Encoder sendet Impulse, während ein Potentiometer eine sich ändernde Spannung liefert.
- Ein Rotary Encoder hilft Ihnen ungefähr zu wissen, wie weit der Knopf gedreht wurde, aber nicht die exakte Position. Ein Potentiometer gibt die exakte Position des Knopfs an.
Wie der Rotary Encoder funktioniert

Im Encoder ist eine runde Scheibe mit Schlitzen mit einem Pin namens C verbunden, welcher die gemeinsame Masse ist. Es gibt auch zwei andere Pins, A und B.
- Wenn Sie den Knopf drehen, berühren die Pins A und B den gemeinsamen Masse-Pin C in einer bestimmten Reihenfolge. Die Reihenfolge hängt davon ab, ob Sie im oder gegen den Uhrzeigersinn drehen.
- Diese Berührung erzeugt zwei Signale, die etwas außer Tritt sind, weil ein Pin vor dem anderen zur Masse geht. Die Signale sind um 90 Grad phasenverschoben. Diese Methode wird Quadratur-Kodierung genannt.
- Drehung im Uhrzeigersinn: Pin A erreicht die Masse vor Pin B. Drehung gegen den Uhrzeigersinn: Pin B erreicht die Masse vor Pin A.
- Indem wir beobachten, wann jeder Pin den Kontakt zur Masse herstellt oder unterbricht, können wir erkennen, in welche Richtung sich der Knopf dreht. Wir bestimmen die Richtung, indem wir schauen, wie sich Pin B relativ zu Pin A ändert.

Wenn A von niedrig zu hoch wechselt:
- Drehen Sie den Knopf nach rechts, wenn B niedrig ist.
- Drehen Sie den Knopf nach links, wenn B hoch ist.
※ Notiz:
Die Pins A und B verbinden sich mit den CLK- und DT-Pins. Die Konfiguration kann je nach Hersteller variieren. Die hier gezeigten Codes wurden mit dem Rotary Encoder von DIYables getestet.
Programmierung für Rotary Encoder
- Überprüfen Sie das Signal am CLK-Pin.
- Wenn das Signal von niedrig zu hoch wechselt, überprüfen Sie den DT-Pin.
- Wenn der DT-Pin hoch ist, wurde der Knopf gegen den Uhrzeigersinn (nach links) bewegt. Addieren Sie 1 zum Zähler.
- Wenn der DT-Pin niedrig ist, wurde der Knopf im Uhrzeigersinn (nach rechts) bewegt. Subtrahieren Sie 1 vom Zähler.
Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Arduino Mega Code – Rotary Encoder ohne Interrupt
Dieser Arduino Mega Code macht folgende Dinge:
- Er erkennt, wie weit der Knopf gedreht wird.
- Wenn der Knopf eine Raste nach rechts gedreht wird, addiert er eins zum Zähler.
- Wenn der Knopf eine Raste nach links gedreht wird, subtrahiert er eins vom Zähler.
- Er erkennt, wenn der Button gedrückt wird.
Wir verwenden die ezButton-Bibliothek, um den Button-Code einfacher zu gestalten und Mehrfachdruck zu vermeiden.
Schnelle Schritte
Folgen Sie diesen Schritten nacheinander.
- Verbinden Sie den Rotary Encoder mit dem Arduino Mega wie im Diagramm gezeigt.
- Verbinden Sie den Arduino Mega über ein USB-Kabel mit Ihrem Computer.
- Öffnen Sie die Arduino IDE auf Ihrem Computer.
- Wählen Sie das Arduino Mega Board und den korrekten COM-Port.
- Installieren Sie die ezButton-Bibliothek in der Arduino IDE. Für die Schritte besuchen Sie https://arduinogetstarted.com/tutorials/arduino-button-library#content_how_to_install
- Kopieren Sie den angegebenen Code und öffnen Sie ihn in der Arduino IDE.
- Klicken Sie auf die Upload-Schaltfläche in der Arduino IDE, um den Code zum Arduino Mega zu senden.
- Drehen Sie den Knopf im Uhrzeigersinn, dann gegen den Uhrzeigersinn.
- Drücken Sie den Knopf.
- Überprüfen Sie die Ergebnisse im Serial Monitor.
Code-Erklärung
Lesen Sie die Kommentare im Code für jede Zeile.
Arduino Mega Code – Rotary Encoder mit Interrupt
Im vorherigen Code-Beispiel haben wir Polling verwendet, das ständig den Pin-Zustand überprüft. Dieser Ansatz hat zwei Nachteile:
- Schlechte Nutzung der Arduino Mega Ressourcen.
- Einige Zählungen könnten übersprungen werden, wenn ein anderes Programm zu langsam läuft.
Eine Lösung hierfür sind Interrupts. Interrupts ersparen Ihnen die ständige Überprüfung auf ein bestimmtes Ereignis. Dies ermöglicht es dem Arduino Mega, andere Aufgaben zu erledigen, während er trotzdem auf Ereignisse achtet.
Schauen wir uns den folgenden Code an, der einen Interrupt verwendet, um den Encoder-Wert zu lesen.
- Kopieren Sie den angegebenen Code und öffnen Sie ihn in der Arduino IDE.
- Klicken Sie auf die Upload-Schaltfläche in der Arduino IDE, um den Code zum Arduino Mega hochzuladen.
Wenn Sie nun den Knopf drehen, werden Sie Informationen im Serial Monitor sehen, genau wie beim vorherigen Code.
※ Notiz:
- Um den CLK-Pin des Encoders mit einem Interrupt an einen Arduino Mega anzuschließen, verwenden Sie Pin 2 oder 3. Dies sind die einzigen Pins, die Interrupts verarbeiten können.
- Einige Online-Anleitungen sagen, Sie sollten zwei Interrupts für einen Encoder verwenden, aber das ist nicht nötig. Ein Interrupt reicht aus.
- Deklarieren Sie alle globalen Variablen, die im Interrupt verwendet werden, als volatile, um Probleme zu vermeiden.
- Halten Sie den Code innerhalb des Interrupts einfach. Verwenden Sie dort nicht Serial.print() oder Serial.println().
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.