Rotary Encoder

Ein Potentiometer (kurz Poti) an einem Arduino zu betreiben ist nicht schwierig, ein Rotary Encoder (Drehimpulsgeber) hingegen erfordert ein wenig mehr Aufwand, denn so ein „Drehknopf“ ist nicht zu unterschätzen. Um es für euch einfacher zu machen, habe ich drei bekannte Rotary Encoder getestet und ein HowTo erstellt.
Rotary Encoder

Was ist ein Rotary Encoder?

Er sieht so aus wie ein Poti hat aber den Vorteil, dass der Rotary Encoder endlos in jede Richtung gedreht werden kann und dabei ein Gray-Code-Signal erzeugt. Damit kann bei jeder Drehbewegung die Winkelveränderung und die Drehrichtung präzise errechnet werden. Bei einem Potentiometer hingegen ist irgendwann immer der Start- (0%) oder Endwert (100%) erreicht.

Die Testkandidaten

Zuerst habe ich den Sparkfun (COM-10596) getestet, da dieser kein Gewinde zur Befestigung besitzt, war er für mein Projekt ungeeignet. Der Sparkfun (COM-10982) ist mein Favorit da er ein Gewinde und eine RGB LED besitzt. Der robuste Keyes KY-040 besitzt zwar ein Gewinde, hat dafür aber keine LEDs.

Hier die wichtigsten Daten auf einen Blick:

Sparkfun (COM-10982) Sparkfun (COM-10596) Keyes KY-040
Rotary Encoder - Sparkfun COM-10982 Rotary Encoder - Sparkfun COM-10596 Rotary Encoder - Keyes KY-040
24 Impulse
LED (RGB)
Taster
Geriffelte transparente Achse
Mit Rastung
M9 Gewinde zur Befestigung
24 Impulse
LED (Red/Green)
Taster
Geriffelte transparente Achse
Ohne Rastung
Kein Gewinde zur Befestigung
20 Impulse
Keine LED
Taster
Abgeflachte und glatte Achse
Mit Rastung
M7 Gewinde zur Befestigung

Verdrahtung

Normalerweise haben Rotary Encoder die Pins A, B und C für GND. Die Pins A und B müssen auf dem Arduino mit Digitalen Pins verbunden werden die Interrupts unterstützen. Weitere Infos hierzu erhaltet ihr auf der Arduino – AttachInterrupt Webseite. Zusätzlich können aber auch Pins für Taster und mehrfarbige LEDs vorhanden sein.

Der Keyes KY-040 hat die Pins CLK (A), DT (B), SW, +, and GND wobei hier SW für den Taster vorgesehen ist. Da auf dem KY-040 jeweils Widerstände von A und B zu VCC verbaut sind, sollte auch + verbunden werden da es sonst zu Problemen bei der Auswertung kommt.

Für die SparkFun Rotary Encoder kann ich zum basteln die SparkFun Rotary Encoder Breakout Board (BOB-11722) empfehlen. Hier sieht man auch sehr gut das die Pinbelegung der beiden sehr unterschiedlich ist! Beim COM-10982 laufen die 3 LEDs und der Taster über ein gemeinsames +, beim COM-10596 ist es GND. Wichtig! Nicht vergessen vor den LEDs einen Widerstand zu schalten.

Entweder kann ich den Schaltplan nicht lesen oder dieser ist falsch?! Es ist scheinbar nicht möglich alle LEDs (egal welcher Sparkfun Rotary Encoder) gleichzeitig zu betreiben. Die LEDs haben scheinbar eine Priorität. Die rote LED hat die höchste Priorität gefolgt von der blauen LED und die niedrigste Priorität hat die grüne LED.

Arduino Sketch

Nachdem ich gefühlt jeden Sketch und jede Library ausprobiert habe, bin ich auf der Arduino Playground Webseite fündig geworden. Es werden alle drei Rotary Encoder richtig auswertet und zudem wird keine Library benötigt. Die Beschreibung dort finde ich sehr passend: „Another Interrupt Library THAT REALLY WORKS (the Encoder interrupts the processor and debounces like there is no tomorrow) by rafbuff“

Aktuell ist die Ausgabe auf den Serial Monitor beschränkt. Aktuell wird nur eine Zahl 0-65535 ausgegeben.
Rotary Encoder - Arduino Serial Monitor

Der Rotary Encoder sollte an einem Arduino Uno mit Pin 2 und 3 verbunden werden da diese Interrupts unterstützen. Wenn die Drehrichtung nicht passen sollte, einfach A und B bzw. CLK und DT tauschen. Ich habe den Sketch auf das wesentliche gekürzt damit man den Aufbau besser verstehen kann.

Wie geht es weiter?

Im nächste Schritt bekommt das Arduino Info Display einen Rotary Encoder. Ich werde dazu den Sparkfun Rotary Encoder (COM-10982) als „digitaler Endlos-Poti“ zur Eingabe von Werten bzw. zur Menüführung verwenden. Zusätzlich werden dort die LEDs zur Statusanzeige und der Taster für die Navigation eingesetzt. Mal schauen ob das so klappt wie ich es mir vorstelle. 🙂

Ein Gedanke zu „Rotary Encoder

  1. Hi,
    ich versuche den Rotary encoder meiner alten DX6i mit dem Arduino auszuwerten. Habe schon einige Sketches probiert. Deines funktioniert soweit ganz gut nur leider wird nur jede zweite drehung erkannt.
    hast du eine Idee wo man hier ansetzen könnte?
    grüße
    tobias

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

code