Inhaltsverzeichnis:

Drehgeber - Verstehen und Verwenden (Arduino / other ΜController) - Gunook
Drehgeber - Verstehen und Verwenden (Arduino / other ΜController) - Gunook

Video: Drehgeber - Verstehen und Verwenden (Arduino / other ΜController) - Gunook

Video: Drehgeber - Verstehen und Verwenden (Arduino / other ΜController) - Gunook
Video: 2# The MIDIUSB Library - MIDI Programming for the Arduino - 2024, November
Anonim
Rotary Encoder - Verstehen und verwenden (Arduino/andere Controller)
Rotary Encoder - Verstehen und verwenden (Arduino/andere Controller)

Ein Drehgeber ist ein elektromechanisches Gerät, das Drehbewegungen in digitale oder analoge Informationen umwandelt. Es kann im oder gegen den Uhrzeigersinn gedreht werden. Es gibt zwei Arten von Drehgebern: Absolute und relative (inkrementelle) Geber.

Während ein Absolutwertgeber einen zum aktuellen Wellenwinkel proportionalen Wert ausgibt, gibt ein Inkrementalgeber den Schritt der Welle und deren Richtung aus. (In diesem Fall haben wir einen Inkrementalgeber)

Drehgeber werden immer beliebter, weil Sie zwei Funktionen in einem Elektromodul nutzen können: Einen einfachen Schalter zum Bestätigen von Vorgängen und den Drehgeber zum Navigieren, z. B. durch ein Menü.

Ein inkrementaler Drehgeber erzeugt bei rotierender Welle zwei Ausgangssignale. Je nach Richtung führt eines der Signale das andere. (siehe unten)

Schritt 1: Verständnis der Ausgabedaten

Die Ausgabedaten verstehen
Die Ausgabedaten verstehen

Wie Sie sehen können, wenn die Encoderwelle beginnt, sich im Uhrzeigersinn zu drehen, fällt Ausgang A zuerst auf LOW und Ausgang B folgt ihm. Gegen den Uhrzeigersinn dreht sich der Vorgang entgegengesetzt.

Jetzt müssen wir dies nur noch auf unserem µController implementieren (ich habe einen Arduino Nano verwendet).

Schritt 2: Bauen Sie die Schaltung auf

Baue die Schaltung
Baue die Schaltung
Baue die Schaltung
Baue die Schaltung

Wie ich bereits beschrieben habe, erzeugen die Ausgänge eine HIGH- und eine LOW-Flanke. Um ein sauberes HIGH an den Datenpins A und B des µControllers zu erhalten, müssen wir Pull-Up-Widerstände hinzufügen. Der gemeinsame Pin C geht für die LOW-Flanke direkt auf Masse.

Um Informationen über den internen Schalter (Taster) zu erhalten, verwenden wir die anderen beiden Pins. Einer davon geht an VCC und der andere an einen Daten-Pin des µControllers. Wir müssen auch einen Pull-Down-Widerstand zum Datenpin hinzufügen, um ein sauberes LOW zu erhalten.

Es ist auch möglich, interne Pull-Up- und Pull-Down-Widerstände Ihres µControllers zu verwenden!

In meinem Fall sieht die Pinbelegung so aus:

  • +3, 3V => +3, 3V (Arduino)(auch +5V möglich)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Stift

    11

  • C => GND
  • SW =>

    Stift

    12

Schritt 3: Schreiben des Codes

int pinA = 10; // interner Schalter A Int PinB = 11; // interner Schalter B int pinSW = 12; // Schalter (Encoder gedrückt) Int EncoderPosCount = 0; // beginnt bei null, ändere wenn du willst

int Positionswert;

bool Schaltwert; int mrotateLast; int mrotate;

Leere Einrichtung () {

int mrotateLast = digitalRead (pinA); Serieller Anfang (9600); Verzögerung (50); }

Void Schleife () {Readencoder (); if (readswitch () == 1) {Serial.println ("Switch = 1"); } }

int-Readencoder (){

mrotate = digitalRead (pinA); if (mrotate != mrotateLast) { // Drehknopf dreht sich if (digitalRead (pinB) != mrotate) { // Schalter A zuerst geändert -> im Uhrzeigersinn drehen EncoderPosCount ++; Serial.println ("im Uhrzeigersinn gedreht"); } Else {// Schalter B zuerst geändert -> gegen den Uhrzeigersinn drehen EncoderPosCount--; Serial.println ("gegen den Uhrzeigersinn gedreht"); }

Serial.print ("Encoder-Position: "); Serial.println (encoderPosCount); Serial.println(""); } mrotateLast = mrotate; Rückgabe EncoderPosCount; } bool readswitch(){

if (digitalRead (pinSW)! = 0) {// Schalter ist gedrückt

Während (digitalRead (pinSW)! = 0) {} // Schalter ist derzeit gedrückt switchval = 1; aufrechtzuerhalten. Sonst {switchval = 0;} // Schalter ist nicht gedrückt Return switchval; }

Jetzt können Sie den Encoder drehen und die Variable encoderPosCount zählt aufwärts, wenn Sie im Uhrzeigersinn drehen, und rückwärts, wenn Sie gegen den Uhrzeigersinn drehen.

Das ist es! Einfach und nützlich.

Fühlen Sie sich frei, den Code zu ändern und auszuführen. Sie können es in Ihrem Projekt implementieren.

Ich werde auch ein LED-Projekt hochladen, bei dem ich den Encoder verwendet habe, um die Helligkeit meiner LEDs einzustellen.

Empfohlen: