Freitag, 4. September 2015

Rotary Encoder

In diesem Post geht es darum, wie man einen Rotary Encoder mit dem Arduino verwendet. Rotary Encoder sind, ähnlich wie Potentiometer, Bauteile welche einen "Drehknüppel" haben. Der wesentliche Unterschied zwischen einem Potentiometer und einem Rotary Encoder ist jedoch, dass man einen Rotary Encoder in beide Richtungen unendlich weit drehen kann.


Die Funktionsweise eines Rotary Encoders

Ich besitze den Keyes KY 040 Rotary Encoder, welchen man für ca. 1 Euro kaufen kann. Dieser Rotary Encoder hat fünf Pins. Der GND Pin muss mit dem Ground verbunden werden, und der + Pin mit den 5V des Arduino. Über den SW Pin kann man auslesen, ob der, in den Knüppel integrierte, Button gedrückt wird oder nicht. Dieser wird mit einem digitalen Pin des Arduino verbunden. 

Auch der DT und der CLK Pin müssen mit einem digital Pin des Arduino verbunden werden. Dabei sind die beiden Pins normalerweise auf HIGH geschaltet. Sobald man jedoch anfängt den Knüppel in eine Richtung zu drehen, so werden die beiden Pins auf LOW geschaltet. 

Dabei ist jedoch die Reihenfolge entscheidend. Wird erst der eine Pin LOW, so wird der Knüppel in Richtung A gedreht, wird erst der andere Pin LOW, wird der Knüppel in Richtung B gedreht. Da an dieser Stelle das Programm sehr schnell reagieren muss, sollte man die Überprüfung in einen Interrupt machen. Hier ist ausführlich erklärt, wie man Interrupts mit dem Arduino verwendet.

Arduino Sketch zum Auslesen

Zunächst einmal muss man die beiden belegten digital Pins als INPUT definieren(der eine muss Pin 2 sein, da wir einen Interrupt verwenden). Außerdem muss der Interrupt definiert werden. In der Interruptroutine werden die Zustände der Pins geprüft und die Richtung ermittelt, und im loop Teil die Werte ausgewertet.

In diesem Beispielsketch wird die LED des Arduino(Pin 13) entsprechend dem Rotary Encoder gedimmt.

Keine Kommentare:

Kommentar veröffentlichen