Arduino Nano ESP32 – Drehencoder
In diesem Leitfaden lernen Sie, wie Sie den Drehencoder mit dem Arduino Nano ESP32 verwenden. Hier erfahren Sie, was wir lernen werden:
- Welche Unterschiede gibt es zwischen einem Drehencoder und einem Potentiometer?
- Wie der Drehencoder funktioniert.
- Wie man den Drehencoder an den Arduino Nano ESP32 anschließt.
- Wie man Code für den Arduino Nano ESP32 schreibt, um die Richtung und Position vom Drehencoder ohne Interrupt auszulesen.
- Wie man Code für den Arduino Nano ESP32 schreibt, um die Richtung und Position vom Drehencoder mit Interrupt 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 Drehknopf, wie bei einem Radio, kann Signale senden, die in Elektrizität umgewandelt werden. Er hilft uns zu wissen, wie weit er gedreht wurde und wo er positioniert ist. Es gibt zwei Haupttypen:
- Inkrementalencoder: Dieser Typ verwendet schnelle Signale, um zu messen, wie stark sich etwas in seiner Position verändert hat.
- Absolutencoder: Dieser Typ liefert für jeden Ort einen Geheimcode, der uns hilft zu ermitteln, wo sich etwas befindet, auch wenn die Stromversorgung ausfällt.
Diese Lektion befasst sich hauptsächlich mit dem ersten Typ, dem inkrementellen Encoder.
Pinbelegung des Drehencoder-Moduls

Ein Drehencoder-Modul hat vier Pins:
- CLK-Pin (Ausgang A): ist der Hauptimpuls, der uns sagt, wie viel Drehung erfolgt ist. Immer wenn Sie den Knopf in eine der Richtungen um eine Rastung (Klick) 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 hinterherhinkt. Es hilft uns dabei, die Drehrichtung (im Uhrzeigersinn oder gegen den Uhrzeigersinn) zu bestimmen.
- SW-Pin: kommt vom Encoderknopf. Er ist normalerweise geöffnet. Wenn wir an diesen Pin einen Pull-up-Widerstand anschließen, 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 Potentiometern
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 eines Potentiometers, aber er kann mehr tun.
- Der Drehencoder kann sich eine vollständige Runde drehen, ohne anzuhalten, während das Potentiometer nur etwa drei Viertel des Kreises 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 bewegt 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 kleine Scheibe mit Schlitzen, die an einen Pin namens C angeschlossen ist und als gemeinsamer Massepunkt dient. Du hast zwei weitere Pins, A und B.
- Wenn Sie den Knopf drehen, berühren die Pins A und B den gemeinsamen Massepin C, aber die Reihenfolge, in der sie ihn berühren, hängt davon ab, in welche Richtung Sie den Knopf drehen (im Uhrzeigersinn oder gegen den Uhrzeigersinn).
- Diese Berührungen erzeugen zwei Signale. Sie unterscheiden sich im Timing, weil ein Pin die Masse berührt, bevor der andere dies tut. Diese Signale sind um 90 Grad zueinander versetzt, was Quadraturkodierung genannt wird.
- Wenn Sie den Knopf im Uhrzeigersinn drehen, berührt Pin A die Masse, bevor Pin B dies tut. Wenn Sie jedoch gegen den Uhrzeigersinn drehen, trifft Pin B zuerst die Masse, bevor Pin A dies tut.
- Indem man überprüft, wann jeder Pin die Masse berührt oder wieder verlässt, kann man feststellen, in welche Richtung sich der Knopf dreht. Dies tun wir, indem wir prüfen, was mit Pin B passiert, wenn Pin A sich ändert.

Wenn A seinen Zustand von LOW auf HIGH ändert:
- Wenn B HIGH ist, wird der Drehknopf gegen den Uhrzeigersinn gedreht.
- Wenn B LOW ist, wird der Drehknopf im 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 unten angegebenen Codes sind mit dem Drehencoder von DIYables getestet worden.
Wie man einen Drehencoder programmiert
- Arduino Nano ESP32 liest das Signal vom CLK-Pin
- Wenn sich der Zustand von LOW nach HIGH ändert, liest der Arduino Nano ESP32 den Zustand des DT-Pins.
- Wenn der DT-Pin HIGH ist, wird der Knopf gegen den Uhrzeigersinn gedreht; der Arduino Nano ESP32 erhöht den Zähler um 1
- Wenn der DT-Pin LOW ist, wird der Knopf im Uhrzeigersinn gedreht; der Arduino Nano ESP32 verringert den Zähler um 1
Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Arduino Nano ESP32 Code – Drehencoder
Der unten stehende Arduino Nano ESP32-Code führt Folgendes aus:
- Ermittelt die Richtung und den Umfang der Drehung des Drehencoders.
- Falls der Knopf im Uhrzeigersinn um eine Rastung (Klick) gedreht wird, erhöhe den Zähler um eins.
- Falls der Knopf gegen den Uhrzeigersinn um eine Rastung (Klick) gedreht wird, verringere den Zähler um eins.
- Erfasst, ob der Knopf gedrückt wird.
Zur Vereinfachung des Codes für die Entprellung von Tasten wird die ezButton-Bibliothek verwendet.
Schnelle Schritte
Wenn Sie Arduino Nano ESP32 zum ersten Mal verwenden, sehen Sie sich wie man die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichtet.
- Installieren Sie die ezButton-Bibliothek in der Arduino IDE.
- Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE
- Klicken Sie in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code auf den Arduino Nano ESP32 hochzuladen
- Drehen Sie den Drehknopf im Uhrzeigersinn, danach gegen den Uhrzeigersinn
- Drücken Sie den Knopf
- Schauen Sie sich das Ergebnis im seriellen Monitor an.
Code-Erklärung
Schau dir die Zeilenkommentare im Code an.
Arduino Nano ESP32 Code – Drehencoder mit Interrupt
Im vorherigen Code kann die Verwendung von Polling, um den Zustand des Pins kontinuierlich zu überwachen, Ressourcen des Arduino Nano ESP32 verschwenden und zu verpassten Zählungen führen, wenn die Ausführung anderer Codeabschnitte langsam ist.
Eine effektive Lösung besteht darin, den Interrupt zu nutzen, wodurch die Notwendigkeit des Pollings entfällt. Dies ermöglicht dem Arduino Nano ESP32, andere Aufgaben auszuführen, ohne Zählwerte zu verpassen. Unten ist der Arduino Nano ESP32-Code, der den Interrupt verwendet, um die Richtung und Position vom Drehencoder auszulesen.
Nun, während Sie den Drehknopf drehen, werden Sie feststellen, dass Informationen im seriellen Monitor erscheinen, ähnlich dem, was Sie im vorherigen Code gesehen haben.
※ Notiz:
- Sie könnten auf Tutorials auf anderen Websites stoßen, die zwei Unterbrechungen für einen einzelnen Encoder verwenden, aber das ist unnötig und verschwenderisch. Nur eine Unterbrechung reicht aus.
- Es ist wichtig, das volatile-Schlüsselwort für globale Variablen zu verwenden, die in der Unterbrechung verwendet werden. Wenn man dies vernachlässigt, kann dies zu unerwarteten Problemen führen.
- Halte den Code innerhalb der Unterbrechung so einfach wie möglich. Vermeide es, Serial.print() oder Serial.println() innerhalb der Unterbrechung zu verwenden.
Arduino Nano ESP32 Drehencoder-Anwendung
Mit dem Drehencoder können wir die folgenden Anwendungen durchführen, aber nicht darauf beschränkt:
- Arduino Nano ESP32 - Drehencoder steuert die Position des Sevo-Motors
- Arduino Nano ESP32 - Drehencoder steuert die Helligkeit der LED
- Arduino Nano ESP32 - 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.