- Erforderliche Materialien
- Wie funktioniert ein Drehgeber?
- Arten von Drehgebern
- Pinbelegung und Beschreibung des Drehgebers KY-040
- Arduino Drehgeber-Schaltplan
- Programmieren Ihres Arduino für Drehgeber
- Arbeiten des Drehgebers mit Arduino
Ein Drehgeber ist ein Eingabegerät, mit dem der Benutzer mit einem System interagieren kann. Es sieht eher aus wie ein Funkpotentiometer, gibt jedoch eine Folge von Impulsen aus, was seine Anwendung einzigartig macht. Wenn der Knopf des Encoders gedreht wird, dreht er sich in Form kleiner Schritte, wodurch er zur Steuerung des Schritt- / Servomotors, zum Navigieren durch eine Menüfolge und zum Erhöhen / Verringern des Werts einer Zahl und vielem mehr verwendet werden kann.
In diesem Artikel erfahren Sie mehr über die verschiedenen Arten von Drehgebern und deren Funktionsweise. Wir werden es auch mit Arduino verbinden und den Wert einer Ganzzahl durch Drehen des Encoders steuern und seinen Wert auf einem 16 * 2-LCD-Bildschirm anzeigen. Am Ende dieses Tutorials werden Sie mit der Verwendung eines Drehgebers für Ihre Projekte vertraut sein. Also lasst uns anfangen…
Erforderliche Materialien
- Drehgeber (KY-040)
- Arduino UNO
- 16 * 2 Alphanumerisches LCD
- Potentiometer 10k
- Steckbrett
- Kabel anschließen
Wie funktioniert ein Drehgeber?
Ein Drehgeber ist ein elektromechanischer Wandler, der mechanische Bewegungen in elektronische Impulse umwandelt. Es besteht aus einem Knopf, der sich beim Drehen Schritt für Schritt bewegt und für jeden Schritt eine Folge von Impulsfolgen mit vordefinierter Breite erzeugt. Es gibt viele Arten von Encodern, von denen jeder seinen eigenen Arbeitsmechanismus hat. Wir werden die Typen später kennenlernen, aber jetzt konzentrieren wir uns nur auf den KY040 Incremental Encoder, da wir ihn für unser Tutorial verwenden.
Die interne mechanische Struktur für den Encoder ist unten gezeigt. Es besteht im Wesentlichen aus einer kreisförmigen Scheibe (graue Farbe) mit leitenden Pads (kupferne Farbe), die auf dieser kreisförmigen Scheibe angeordnet sind. Diese leitenden Pads sind in einem gleichen Abstand wie unten gezeigt angeordnet. Die Ausgangsstifte sind so auf dieser kreisförmigen Scheibe befestigt, dass die leitenden Pads beim Drehen des Knopfes mit den Ausgangsstiften in Kontakt kommen. Hier gibt es zwei Ausgangspins, Ausgang A und Ausgang B, wie in der folgenden Abbildung gezeigt.
Die vom Ausgangsstift A und vom Ausgang B erzeugte Ausgangswellenform wird in blauer bzw. grüner Farbe angezeigt. Wenn sich das leitende Pad direkt unter dem Stift befindet, wird es hoch, was zu einer Einschaltdauer führt, und wenn sich das leitende Pad wegbewegt, wird der Stift niedrig, was zu einer Ausschaltzeit der oben gezeigten Wellenform führt. Wenn wir nun die Anzahl der Impulse zählen, können wir bestimmen, um wie viele Schritte der Encoder bewegt wurde.
Nun kann sich die Frage stellen, warum wir zwei Impulssignale benötigen, wenn eines ausreicht, um die Anzahl der Schritte zu zählen, die beim Drehen des Knopfes ausgeführt werden. Dies liegt daran, dass wir identifizieren müssen, in welche Richtung der Knopf gedreht wurde. Wenn Sie sich die beiden Impulse ansehen, können Sie feststellen, dass beide um 90 ° phasenverschoben sind. Wenn also der Knopf im Uhrzeigersinn gedreht wird, geht der Ausgang A zuerst hoch und wenn der Knopf gegen den Uhrzeigersinn gedreht wird, geht der Ausgang B zuerst hoch.
Arten von Drehgebern
Es gibt viele Arten von Drehgebern auf dem Markt, die der Konstrukteur je nach Anwendung auswählen kann. Die häufigsten Typen sind unten aufgeführt
- Inkrementalgeber
- Absolutwertgeber
- Magnetischer Encoder
- Optischer Encoder
- Lasercodierer
Diese Codierer werden basierend auf der Ausgangssignal- und Sensortechnologie klassifiziert, der Inkrementalcodierer und die Absolutcodierer werden basierend auf dem Ausgangssignal klassifiziert und der magnetische, optische und Lasercodierer werden basierend auf der Sensortechnologie klassifiziert. Der hier verwendete Encoder ist ein inkrementeller Encoder.
Pinbelegung und Beschreibung des Drehgebers KY-040
Die Pinbelegung des Inkremental-Drehgebers vom Typ KY-040 ist unten dargestellt
Die ersten beiden Pins (Masse und Vcc) werden zur Stromversorgung des Encoders verwendet. In der Regel wird eine + 5V-Versorgung verwendet. Neben der Drehung des Knopfes im Uhrzeigersinn und gegen den Uhrzeigersinn verfügt der Encoder auch über einen Schalter (Active Low), der durch Drücken des Knopfes im Inneren gedrückt werden kann. Das Signal von diesem Schalter wird über Pin 3 (Schalter) erhalten. Schließlich hat es die zwei Ausgangspins, die die Wellenformen erzeugen, wie bereits oben diskutiert. Lassen Sie uns nun lernen, wie man es mit Arduino verbindet.
Arduino Drehgeber-Schaltplan
Das vollständige Schaltbild für die Schnittstelle von Drehgeber und Arduino ist in der folgenden Abbildung dargestellt
Der Drehgeber hat 5 Stifte in der auf dem Etikett oben angegebenen Reihenfolge. Die ersten beiden Pins sind Ground und Vcc, die mit dem Ground- und + 5V-Pin des Arduino verbunden sind. Der Schalter des Encoders ist mit dem digitalen Pin D10 verbunden und wird über einen 1k-Widerstand ebenfalls hochgezogen. Die beiden Ausgangspins sind mit D9 bzw. D8 verbunden.
Um den Wert der Variablen anzuzeigen, der durch Drehen des Drehgebers erhöht oder verringert wird, benötigen wir ein Anzeigemodul. Das hier verwendete ist ein allgemein verfügbares 16 * 2 alphanumerisches LCD-Display. Wir haben das Display für den Betrieb im 4-Bit-Modus angeschlossen und über den + 5V-Pin von Arduino mit Strom versorgt. Mit dem Potentiometer wird der Kontrast des LCD-Displays eingestellt. Wenn Sie mehr über die Schnittstelle zwischen LCD-Display und Arduino erfahren möchten, folgen Sie dem Link. Die gesamte Schaltung kann auf einem Steckbrett aufgebaut werden. Nachdem alle Verbindungen hergestellt wurden, sah es unten so aus.
Programmieren Ihres Arduino für Drehgeber
Es ist ziemlich einfach und unkompliziert, die Arduino-Karte für die Anbindung eines Drehgebers daran zu programmieren, wenn Sie das Funktionsprinzip eines Drehgebers verstanden haben. Wir müssen einfach die Anzahl der Impulse ablesen, um festzustellen, wie viele Umdrehungen der Codierer gemacht hat, und prüfen, welcher Impuls zuerst hoch ging, um festzustellen, in welche Richtung der Codierer gedreht wurde. In diesem Tutorial zeigen wir die Zahl, die in der ersten Zeile des LCD erhöht oder verringert wird, und die Richtung des Encoders in der zweiten Zeile an. Das vollständige Programm dazu finden Sie unten auf dieser Seite mit einem Demonstrationsvideo. Es ist keine Bibliothek erforderlich. Lassen Sie uns nun das Programm in kleine Teile aufteilen, um die Funktionsweise zu verstehen.
Da wir ein LCD-Display verwendet haben, enthalten wir die Flüssigkristallbibliothek, die standardmäßig in der Arduino IDE vorhanden ist. Dann definieren wir Pins für die Verbindung von LCD mit Arduino. Schließlich initialisieren wir die LCD-Anzeige an diesen Pins.
#einschließen
Als nächstes zeigen wir innerhalb der Setup- Funktion eine Einführungsmeldung auf dem LCD-Bildschirm an und warten dann 2 Sekunden, damit diese Meldung vom Benutzer gelesen werden kann. Dies soll sicherstellen, dass das LCD ordnungsgemäß funktioniert.
lcd.print ("Drehgeber"); // Intro Message Zeile 1 lcd.setCursor (0, 1); lcd.print ("Mit Arduino"); // Intro Message Line 2 Delay (2000); lcd.clear ();
Der Drehgeber verfügt über drei Ausgangspins, die als EINGANGS-Pins für den Arduino dienen. Diese drei Pins sind der Schalter, Ausgang A bzw. Ausgang B. Diese werden mit der PinMode- Funktion wie unten gezeigt als Eingabe deklariert.
// Pin- Modusdeklaration pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Innerhalb der Void-Setup- Funktion lesen wir den Status des Ausgangs-A-Pins, um den letzten Status des Pins zu überprüfen. Wir werden diese Informationen dann verwenden, um sie mit dem neuen Wert zu vergleichen und zu überprüfen, welcher Pin (Ausgang A oder Ausgang B) hoch gegangen ist.
Previous_Output = digitalRead (Encoder_OuputA); // Den Anfangswert von Ausgang A lesen
Schließlich innerhalb der Hauptschleifenfunktion, haben wir den Wert von Ausgang A und Ausgang B mit dem vorhergehenden Ausgang vergleichen zu überprüfen, welche ein hohen ersten geht. Dies kann durch einfaches Vergleichen des Werts der aktuellen Ausgabe von A und B mit der vorherigen Ausgabe erfolgen, wie unten gezeigt.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Im Uhrzeigersinn"); }}
Im obigen Code wird die zweite if- Bedingung ausgeführt, wenn sich Ausgang B gegenüber dem vorherigen Ausgang geändert hat. In diesem Fall wird der Wert der Gebervariablen erhöht und das LCD zeigt an, dass der Geber im Uhrzeigersinn gedreht ist. Ebenso, wenn die wenn Bedingung in der nachfolgenden ausfällt, sonst Zustand verringern wir die Variable und die Anzeige, dass der Geber in der gedreht wird gegen den Uhrzeigersinn Richtung. Der Code dafür ist unten gezeigt.
sonst { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Gegen den Uhrzeigersinn"); } }
Schließlich, am Ende der Hauptschleife haben wir den vorherigen Ausgabewert mit dem aktuellen Ausgangswert zu aktualisieren, so daß die Schleife mit der gleichen Logik kann wiederholt werden. Der folgende Code macht dasselbe
Previous_Output = digitalRead (Encoder_OuputA);
Eine weitere optionale Möglichkeit besteht darin, zu überprüfen, ob der Schalter am Encoder gedrückt ist. Dies kann überwacht werden, indem der Schaltstift am Drehcodierer überprüft wird. Dieser Pin ist ein aktiver Low-Pin, was bedeutet, dass er beim Drücken der Taste auf Low geht. Wenn der Stift nicht gedrückt wird, bleibt er hoch. Wir haben auch einen Pull-up-Widerstand verwendet, um sicherzustellen, dass der Stift hoch bleibt, wenn der Schalter nicht gedrückt wird, wodurch ein Gleitkommazustand vermieden wird.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Schalter gedrückt"); }}
Arbeiten des Drehgebers mit Arduino
Sobald die Hardware und der Code fertig sind, laden Sie den Code einfach auf die Arduino-Karte hoch und schalten Sie die Arduino-Karte ein. Sie können es entweder über das USB-Kabel mit Strom versorgen oder einen 12-V-Adapter verwenden. Bei eingeschalteter Stromversorgung sollte das LCD die Intro-Meldung anzeigen und dann leer sein. Drehen Sie nun den Drehgeber und Sie sollten sehen, dass der Wert je nach Drehrichtung inkrementiert oder dekrementiert beginnt. Die zweite Zeile zeigt an, ob der Encoder im oder gegen den Uhrzeigersinn gedreht wird. Das Bild unten zeigt dasselbe
Auch wenn die Taste gedrückt wird, zeigt die zweite Zeile an, dass die Taste gedrückt wurde. Die komplette Arbeit finden Sie im Video unten. Dies ist nur ein Beispielprogramm, um den Encoder mit Arduino zu verbinden und zu überprüfen, ob er wie erwartet funktioniert. Sobald Sie hier angekommen sind, sollten Sie in der Lage sein, den Encoder für jedes Ihrer Projekte zu verwenden und entsprechend zu programmieren.
Ich hoffe, Sie haben das Tutorial verstanden und die Dinge haben so funktioniert, wie es soll. Wenn Sie Probleme haben, nutzen Sie den Kommentarbereich oder die Foren für technische Hilfe.