Arduino - Drehencoder
In diesem Tutorial lernen wir, wie man den Inkrementalgeber mit Arduino verwendet. Im Detail werden wir lernen:
- Wie ein Drehencoder funktioniert
- Drehencoder im Vergleich zu Potentiometern
- Wie man den Drehencoder an Arduino anschließt
- Wie man Arduino programmiert, um die Richtung und Position vom Drehencoder ohne Interrupt zu lesen
- Wie man Arduino programmiert, um die Richtung und Position vom Drehencoder mit Interrupt zu lesen
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
1 | × | DIYables STEM V3 Starter-Kit (Arduino enthalten) | |
1 | × | DIYables Sensor-Kit (30 Sensoren/Displays) | |
1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über Drehgeber
Ein Drehgeber ist ein elektromechanisches Gerät, das Rotationsbewegung in ein elektrisches Signal umwandelt. Es misst die Rotation und die Position einer Welle oder eines Knopfes. Es gibt zwei Haupttypen:
- Inkrementaler Encoder: Er erzeugt Impulse, um relative Änderungen zu messen.
- Absolutencoder: Er liefert für jede Position einen eindeutigen digitalen Code, was ihn ideal für eine präzise Positionierung auch nach einem Spannungsverlust macht.
Dieser Leitfaden befasst sich mit dem Inkrementalencoder.
Pinbelegung des Drehencoder-Moduls

Ein Drehencoder-Modul hat 4 Pins:
- CLK-Pin (Ausgang A): ist der Hauptimpuls, der uns sagt, wie viel Rotation erfolgt ist. Jedes Mal, wenn Sie den Knopf um eine Rastung (Klick) in eine der Richtungen drehen, gibt der CLK-Pin ein Signal aus, das einen vollständigen Zyklus abschließt (LOW → HIGH → LOW).
- DT-Pin (Ausgang B): funktioniert wie der CLK-Pin, gibt jedoch ein Signal aus, das dem CLK-Signal um 90 Grad phasenversetzt ist. Es hilft uns, die Drehrichtung zu bestimmen (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
- SW-Pin: ist der Ausgang des Druckknopfs im Encoder. Er ist normalerweise geöffnet. Wenn wir an diesem Pin einen Pull-up-Widerstand verwenden, wird der SW-Pin HIGH sein, wenn der Knopf nicht gedrückt ist, und LOW, wenn er gedrückt wird.
- VCC-Pin (+): muss mit VCC verbunden werden (zwischen 3,3 V und 5 V)
- GND-Pin: muss mit GND (0 V) verbunden werden.
Drehencoder vs Potentiometer
Man könnte den Drehencoder mit dem Potentiometer verwechseln, aber sie sind unterschiedliche Bauteile. Hier ist ein Vergleich zwischen ihnen:
- Der Drehencoder ist wie die moderne Version des Potentiometers, aber er kann mehr Dinge tun.
- Der Drehencoder kann sich eine vollständige Umdrehung drehen, ohne anzuhalten, während das Potentiometer sich nur etwa drei Viertel einer Umdrehung drehen kann.
- Der Drehencoder erzeugt Impulse, während das Potentiometer die analoge Spannung ausgibt.
- Der Drehencoder ist praktisch, wenn man nur herausfinden muss, wie weit sich der Drehknopf gedreht hat, nicht genau, wo er sich befindet. Das Potentiometer ist nützlich, wenn man wirklich genau wissen muss, wo sich ein Drehknopf befindet.
Wie ein Drehencoder funktioniert

Im Encoder gibt es eine Scheibe mit Schlitzen, die an einen Pin namens C angeschlossen ist, der wie eine gemeinsame Masse fungiert. Es gibt zwei weitere Pins, A und B.
- Wenn Sie den Drehknopf drehen, berühren die Pins A und B den gemeinsamen Massepin C, aber in einer bestimmten Reihenfolge, abhängig davon, in welche Richtung Sie den Drehknopf drehen (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
- Diese Kontakte erzeugen zwei Signale. Sie unterscheiden sich im Timing, weil ein Pin die Masse früher berührt als der andere. Zwei Signale sind zeitlich um 90 Grad zueinander versetzt. Dies wird Quadraturkodierung genannt.
- Wenn Sie den Drehknopf im Uhrzeigersinn drehen, berührt Pin A die Masse früher als Pin B. Wenn Sie den Drehknopf gegen den Uhrzeigersinn drehen, berührt Pin B die Masse früher als Pin A.
- Indem wir überwachen, wann jeder Pin die Masse berührt oder verlässt, können wir herausfinden, in welche Richtung sich der Drehknopf dreht. Das tun wir, indem wir prüfen, was mit Pin B passiert, wenn Pin A seinen Zustand ändert.

Wenn A von LOW auf HIGH wechselt:
- Wenn B LOW ist, wird der Drehknopf im Uhrzeigersinn gedreht.
- Wenn B HIGH ist, wird der Drehknopf gegen den Uhrzeigersinn gedreht.
※ Notiz:
Pin A und Pin B sind mit den Pins CLK und DT verbunden. Je nach Hersteller kann die Reihenfolge jedoch unterschiedlich sein. Die unten angegebenen Codes wurden mit dem Drehencoder von DIYables getestet.
Wie man einen Drehencoder programmiert
- Prüfe das Signal am CLK-Pin
- Wenn der Zustand sich von LOW nach HIGH ändert, prüfe den Zustand des DT-Pins.
- Wenn der Zustand des DT-Pins HIGH ist, dreht sich der Drehknopf gegen den Uhrzeigersinn, der Zähler wird um 1 erhöht
- Wenn der Zustand des DT-Pins LOW ist, dreht sich der Drehknopf im Uhrzeigersinn, der Zähler wird um 1 verringert
Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Arduino-Code – Drehencoder ohne Interrupt
Der untenstehende Arduino-Code macht Folgendes:
- Erkennt die Richtung und das Ausmaß der Drehung des Encoders.
- Wenn festgestellt wird, dass der Drehknopf durch eine Rastung (Klick) im Uhrzeigersinn gedreht wurde, erhöhe den Zähler um eins.
- Wenn festgestellt wird, dass der Drehknopf durch eine Rastung (Klick) gegen den Uhrzeigersinn gedreht wurde, verringere den Zähler um eins.
- Erkennt, ob der Knopf gedrückt wird.
Um den Code für das Entprellen von Tastern zu vereinfachen, wird die ezButton-Bibliothek verwendet.
Schnelle Schritte
- Installieren Sie die ezButton-Bibliothek in der Arduino IDE. Siehe How To
- Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE
- Klicken Sie auf die Schaltfläche Hochladen in der Arduino IDE, um den Code auf den Arduino hochzuladen
- Drehen Sie den Knopf zuerst im Uhrzeigersinn, dann gegen den Uhrzeigersinn
- Drücken Sie den Knopf
- Sehen Sie das Ergebnis im seriellen Monitor.
Code-Erklärung
Schau dir die Zeilenkommentare im Code an.
Arduino Code – Drehencoder mit Interrupt
Im vorherigen Beispielcode verwenden wir die Polling-Methode, die den Zustand des Pins kontinuierlich überprüft. Dies hat zwei Nachteile:
- Arduino-Ressourcen verschwenden
- Einige Zähler könnten übersprungen werden, wenn ein anderer Code lange läuft.
Ein Ansatz, dies zu handhaben, besteht darin, Unterbrechungen zu verwenden. Unterbrechungen eliminieren die Notwendigkeit einer ständigen Überprüfung eines bestimmten Ereignisses. Dadurch kann der Arduino andere Aufgaben ausführen, ohne ein Ereignis zu übersehen.
Hier ist ein Beispiel dafür, wie man einen Drehencoder mit Interrupts ausliest.
Nun, während du den Drehknopf drehst, wirst du feststellen, dass Informationen im Serial Monitor erscheinen, ähnlich wie du sie im früheren Code gesehen hast.
※ Notiz:
- Wenn Sie den Interrupt verwenden, müssen Sie den CLK-Pin des Encoders mit einem Arduino-Pin verbinden, der Unterbrechungen verarbeiten kann. Aber daran denken: Nicht alle Arduino-Pins können das. Zum Beispiel können beim Arduino Uno nur die Pins 2 und 3 Unterbrechungen verarbeiten.
- Möglicherweise stoßen Sie auf Tutorials auf anderen Websites, die zwei Interrupts für einen einzelnen Encoder verwenden, aber das ist unnötig und verschwenderisch. Nur ein Interrupt ist ausreichend.
- Es ist wichtig, das volatile-Schlüsselwort für globale Variablen zu verwenden, die im Interrupt verwendet werden. Das Unterlassen davon könnte zu unerwarteten Problemen führen.
- Halten Sie den Code im Interrupt so einfach wie möglich. Vermeiden Sie es, innerhalb des Interrupts Serial.print() oder Serial.println() zu verwenden.
Arduino-Drehencoder-Anwendung
Mit dem Drehencoder können wir die folgenden Anwendungen durchführen, aber nicht darauf beschränkt:
- Arduino - Drehencoder steuert die Position des Servomotors
- Arduino - Drehencoder steuert die Helligkeit der LED
- Arduino - Drehencoder steuert die Geschwindigkeit des Schrittmotors
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.