Arduino Nano - Drehencoder
Dieses Tutorial erklärt dir, wie man den Drehencoder mit dem Arduino Nano verwendet. Folgendes werden wir behandeln:
- Wie der Drehencoder funktioniert
- Der Unterschied zwischen einem Drehencoder und einem Potentiometer (eine andere Art von Knopf)
- Wie man den Drehencoder an einen Arduino Nano anschließt
- Wie man Code für den Arduino Nano schreibt, um die Richtung und Position des Drehencoders auszulesen
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
1 | × | DIYables Sensor-Kit (30 Sensoren/Displays) | |
1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über Drehencoder
Ein drehender Knopf, der als Drehencoder bezeichnet wird, kann Drehungen in ein Signal umwandeln. Er zeigt, wie stark sich etwas gedreht hat und wo es sich befindet. Es gibt zwei Haupttypen:
- Inkrementalencoder: Er verwendet schnelle Signale, um festzustellen, wie weit sich etwas bewegt hat.
- Absolutencoder: Diese Art liefert für jede Position einen eindeutigen Code, der dabei hilft, genau zu bestimmen, wo sich etwas befindet, auch wenn die Stromversorgung ausfällt.
Dieser Leitfaden dreht sich ganz um den Inkrementalencoder.
Drehgeber-Modul Pinbelegung

Ein Drehencoder-Modul hat 4 Pins:
- CLK-Pin (Ausgang A): ist der Hauptimpuls, der uns sagt, wie viel Drehung erfolgt ist. Immer wenn du den Drehknopf um eine Rastung (Klick) in eine Richtung drehst, liefert der CLK-Pin ein Signal aus, das einen vollständigen Zyklus durchläuft (LOW → HIGH → LOW).
- DT-Pin (Ausgang B): verhält sich wie der CLK-Pin, gibt aber ein Signal aus, das dem CLK-Signal um 90 Grad hinterherhinkt. Es hilft uns, die Drehrichtung (im Uhrzeigersinn oder gegen den Uhrzeigersinn) zu ermitteln.
- SW-Pin: ist der Ausgang des Druckknopfs im Encoder. Er ist normalerweise offen. Wenn wir an diesem Pin einen Pull-up-Widerstand verwenden, ist der SW-Pin HIGH, wenn der Knopf nicht gedrückt ist, 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 (0 V) verbunden werden
Drehencoder im Vergleich zu Potentiometer
Sie könnten den Drehencoder mit dem Potentiometer verwechseln, aber es handelt sich um zwei unterschiedliche Bauteile. Hier ist ein Vergleich zwischen ihnen:
- Der Drehgeber kann sich vollständig um 360° drehen, ohne anzuhalten, während das Potentiometer nur etwa drei Viertel einer Umdrehung schafft.
- Der Drehgeber gibt Impulse aus, während das Potentiometer eine analoge Spannung liefert.
- Wenn Sie nur wissen müssen, wie weit der Drehknopf gedreht wurde, ohne seine genaue Position zu bestimmen, ist der Drehgeber praktisch. Andererseits ist das Potentiometer wertvoll, wenn Sie die genaue Position eines Drehknopfs benötigen.
Wie ein Drehencoder funktioniert

Im Encoder befindet sich eine Scheibe mit Schlitzen, die an einen Pin namens C angeschlossen ist, der wie eine gemeinsame Masse wirkt. Es gibt zwei weitere Pins, A und B.
- Wenn Sie den Drehknopf drehen, berühren die Pins A und B den gemeinsamen Massepin C, jedoch in einer bestimmten Reihenfolge, abhängig davon, in welche Richtung Sie den Drehknopf drehen (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
- Diese Berührungen erzeugen zwei Signale. Sie unterscheiden sich zeitlich leicht, weil einer der Pins die Masse vor dem anderen berührt. Zwei Signale sind zueinander um 90 Grad phasenverschoben. Dies wird Quadraturkodierung genannt.
- Wenn Sie den Drehknopf im Uhrzeigersinn drehen, berührt Pin A die Masse, bevor Pin B die Masse berührt. Wenn Sie den Drehknopf gegen den Uhrzeigersinn drehen, berührt Pin B die Masse, bevor Pin A die Masse berührt.
- Indem wir überwachen, wann jeder Pin die Masse berührt oder von der Masse trennt, können wir feststellen, in welche Richtung der Drehknopf sich dreht. Das tun wir, indem wir beobachten, was mit Pin B passiert, wenn Pin A sich ändert.

Wenn A den Zustand von LOW auf HIGH ändert:
- 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 CLK- und DT-Pins verbunden. Je nach Hersteller kann jedoch die Reihenfolge unterschiedlich sein. Die untenstehenden Codes wurden mit dem Drehencoder von DIYables getestet.
Wie programmiert man einen Drehencoder
- Prüfe das Signal vom CLK-Pin
- Wenn sich der Zustand von LOW nach HIGH ändert, prüfe den Zustand des DT-Pins.
- Wenn der Zustand des DT-Pins HIGH ist, wird der Drehknopf gegen den Uhrzeigersinn gedreht, der Zähler wird um 1 erhöht
- Wenn der Zustand des DT-Pins LOW ist, wird der Drehknopf im Uhrzeigersinn gedreht, der Zähler wird um 1 verringert
Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Siehe Der beste Weg, den Arduino Nano und andere Komponenten mit Strom zu versorgen.
Arduino Nano Code – Drehencoder
Der folgende Arduino-Nano-Code führt Folgendes aus:
- Ermittelt die Richtung und den Betrag der Drehung des Drehencoders.
- Wird erkannt, dass der Drehencoder um eine Rastung (Klick) im Uhrzeigersinn gedreht wird, erhöhe den Zähler um eins.
- Wird erkannt, dass der Drehencoder um eine Rastung (Klick) gegen den Uhrzeigersinn gedreht wird, verringere den Zähler um eins.
- Ermittelt, ob der Knopf gedrückt wird.
Zur Vereinfachung des Codes für das Entprellen von Tasten wird die ezButton-Bibliothek verwendet.
Schnelle Schritte
- Installieren Sie die ezButton-Bibliothek in der Arduino-IDE. Siehe Anleitung
- 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 Nano hochzuladen.
- Drehen Sie den Knopf im Uhrzeigersinn und anschließend gegen den Uhrzeigersinn.
- Drücken Sie den Knopf.
- Sehen Sie sich das Ergebnis im Serial Monitor an.
Code-Erklärung
Schau dir die Zeile-für-Zeile-Kommentare im Code an.
Arduino Nano-Code – Drehencoder mit Interrupt
Im vorherigen Beispielcode verwenden wir die Polling-Methode, die den Zustand des Pins kontinuierlich überprüft. Das hat zwei Nachteile:
- Ressourcen des Arduino Nano verschwenden
- Einige Zähler könnten verpasst werden, wenn ein anderer Code zu lange braucht, um ausgeführt zu werden.
Ein Ansatz, dies zu handhaben, besteht darin, Unterbrechungen zu verwenden. Unterbrechungen beseitigen die Notwendigkeit, ein bestimmtes Ereignis ständig zu überprüfen. Dies ermöglicht dem Arduino Nano, andere Aufgaben auszuführen, ohne ein Ereignis zu übersehen.
Hier ist ein Beispiel dafür, wie man einen Drehencoder mit Interrupts ausliest.
Jetzt, während du den Drehknopf drehst, wirst du feststellen, dass Informationen auf dem seriellen Monitor erscheinen, ähnlich wie du es im früheren Code gesehen hast.
※ Notiz:
- Wenn Sie den Interrupt verwenden, müssen Sie den CLK-Pin des Encoders an einen Pin des Arduino Nano anschließen, der Interrupts verarbeiten kann. Beachten Sie jedoch, dass nicht alle Pins des Arduino Nano dazu in der Lage sind. Zum Beispiel können beim Arduino Nano nur die Pins 2 und 3 Interrupts verarbeiten.
- Sie könnten auf Tutorials auf anderen Websites stoßen, die zwei Interrupts für einen einzelnen Encoder verwenden, aber das ist unnötig und ineffizient. Nur ein Interrupt ist ausreichend.
- Es ist wichtig, das Schlüsselwort volatile für globale Variablen zu verwenden, die im Interrupt verwendet werden. Wenn man dies vernachlässigt, kann dies zu unerwarteten Problemen führen.
- Halten Sie den Code innerhalb des Interrupts so einfach wie möglich. Vermeiden Sie es, Serial.print() oder Serial.println() im Interrupt zu verwenden.
Arduino Nano Drehencoder-Anwendung
Mit einem Drehencoder können wir die folgenden Anwendungen durchführen, aber diese Liste ist nicht abschließend.
- Arduino Nano – Drehencoder steuert die Position des Servomotors
- Arduino Nano – Drehencoder steuert die Helligkeit der LED
- Arduino Nano – 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.