KY-040 Inkrementaler Drehgeber-Modul (Rotary Encoder) mit Taster für Arduino
€ 2,40
Erlebe präzise, digitale Eingaben mit dem KY-040 Drehgeber-Modul. Anders als ein Potentiometer hat dieser „unendliche“ Drehknopf keinen Anschlag und erfasst sowohl die Richtung als auch die Anzahl der Dreh-Schritte. Zusätzlich ist ein praktischer Taster integriert, der durch Drücken des Knopfes betätigt wird. Er ist das perfekte Eingabegerät für die Navigation in Menüs oder die feinfühlige Einstellung von Werten.
2 vorrätig
Du willst Werte nicht nur irgendwie, sondern absolut präzise einstellen? Dann ist der KY-040 Drehgeber, auch Rotary Encoder genannt, genau dein Werkzeug. Stell ihn dir wie ein digitales Volumenrad vor, das du endlos in beide Richtungen drehen kannst. Bei jeder kleinen Rastung sendet er digitale Impulse an deinen Mikrocontroller.
Das Geniale daran: Durch die Auswertung von zwei separaten Signalleitungen (CLK und DT) weiß dein Arduino nicht nur, dass gedreht wurde, sondern auch in welche Richtung. Damit kannst du Werte exakt erhöhen oder verringern. Als Bonus dient der Drehknopf selbst als Taster, mit dem du eine Auswahl bestätigen oder eine Funktion aufrufen kannst. Von der Menüführung auf einem Display bis zur Steuerung eines Schrittmotors – dieser Encoder bietet dir eine professionelle und intuitive Eingabemöglichkeit.
Deine technischen Vorteile im Überblick:
- Präzise digitale Eingabe: Erfasst Drehrichtung und -schritte, ideal für genaue Einstellungen.
- Integrierter Taster: Bietet eine zusätzliche Eingabemöglichkeit für Bestätigungen.
- Endlose Rotation: Kein mechanischer Anschlag, perfekt für zyklische Menüs oder Werte.
- Haptisches Feedback: Die leichten Rastungen bei der Drehung geben ein gutes Gefühl für jeden Schritt.
- Einfache Anbindung: Mit 5 Pins schnell an jeden Mikrocontroller angeschlossen.
- Universell einsetzbar: Ideal für Menü-Navigation, Lautstärkeregelung, Frequenzeinstellung und vieles mehr.
Technisches Datenblatt
Arduino Code
Hinweis: Die zuverlässigste Methode zum Auslesen eines Drehgebers ist die Verwendung von Interrupts, um keine schnellen Drehungen zu verpassen.
/*
KY-040 Drehgeber Beispiel mit Interrupts
Dieses Programm liest die Drehrichtung und den Tasterdruck aus
und gibt die Änderungen auf dem Seriellen Monitor aus.
*/
// Definiere die Pins für den Drehgeber
#define CLK_PIN 2 // CLK muss an einem Interrupt-Pin sein (z.B. 2 oder 3 beim Uno)
#define DT_PIN 3 // DT muss an einem Interrupt-Pin sein (z.B. 2 oder 3 beim Uno)
#define SW_PIN 4 // Taster-Pin
// Eine Variable, um den Zählerstand zu speichern
// 'volatile', da sie in einer Interrupt-Routine geändert wird
volatile int counter = 0;
void setup() {
Serial.begin(9600);
// Konfiguriere die Pins als Eingänge
pinMode(CLK_PIN, INPUT);
pinMode(DT_PIN, INPUT);
// Aktiviere den internen Pull-up-Widerstand für den Taster
pinMode(SW_PIN, INPUT_PULLUP);
// Füge die Interrupts für die Dreh-Pins hinzu
// Löst bei jeder Änderung am CLK-Pin die Funktion 'readEncoder' aus
attachInterrupt(digitalPinToInterrupt(CLK_PIN), readEncoder, CHANGE);
Serial.println("KY-040 Drehgeber bereit.");
}
void loop() {
// Lese den Taster-Status im Haupt-Loop aus
if (digitalRead(SW_PIN) == LOW) {
Serial.println("Taster gedrückt! Zähler zurückgesetzt.");
counter = 0; // Setze den Zähler zurück
delay(200); // Einfache Entprellung
}
}
// Interrupt-Service-Routine (ISR)
void readEncoder() {
// Lese den Zustand von Pin DT
int dtState = digitalRead(DT_PIN);
// Lese den Zustand von Pin CLK
int clkState = digitalRead(CLK_PIN);
// Wenn der Zustand von DT und CLK unterschiedlich ist,
// wurde im Uhrzeigersinn gedreht.
if (dtState != clkState) {
counter++;
} else {
// ansonsten gegen den Uhrzeigersinn
counter--;
}
// Gib den neuen Zählerstand aus
Serial.print("Position: ");
Serial.println(counter);
}