Ausgabegeräte und Aktoren

Im vorherigen Kapitel wurden verschiedene Eingabegeräte bzw. Sensoren vorgestellt. Dieses Kapitel beschäftigt sich mit verschiedenen Ausgabegeräten bzw. Aktoren.

Dabei sollen auf folgende Komponenten eingegangen werden.

7-Segment Anzeigen

7-Segment Anzeigen werden z.B. in digitalen Uhren oder Timern verwendet.

https://static.educalingo.com/img/en/800/seven-segment-display.jpg

Die obere Abbildung visualisiert eine 7-Segment Anzeige. Sie besteht grundsätzlich aus sieben LEDs, die gemeinsam eine Kathode oder Anode besitzen. Die LED-Ansteuerung benötigt dabei lediglich nur 8 Kontaktzugänge, in Gegensatz zu 14, wenn einzelne LED für die Umsetzung der Anzeige benutzt werden würden.

Gruppen von 7-Segment Anzeigen können mehrere Ziffern darstellen. Besitzen die Segmente eine gemeinsame Kathode, so sind die Anoden der einzelnen Segmente über alle Ziffern miteinander verbunden. Je Ziffer steht dann eine gemeinsame Kathode für die Segmente bereit, sodass die Kathoden unter den Ziffern nicht verbunden sind.

https://www.exp-tech.de/media/image/c2/71/00/adafruit-0-56-4-digit-7-segment-display-w-featherwing-white-01_600x600.jpg

Die untere visualisierte Abbildung einer 7-Segment Anzeige besitzt eine gemeinsame Anode und soll hier als Beispiel herangezogen werden. Die einzelnen Segmente der 7-Segment Anzeigen werden mit A-G und falls ein Dezimalpunkt existiert mit DP bezeichnet.

https://res.cloudinary.com/mynewsdesk-cld/image/upload/t_limit_1000/nxe09i6l6qi8ioi6cw6q.jpg

Die folgende Animation stellt eine durch den Arduino angesteuerte 7-Segment Anzeige dar. Sie stellt die Ziffernfolge von 0 bis 9 dar.

Der folgende Quellcode setzt die Funktionalität dabei um.

LC Displays

Informationen können auch mit Hilfe sogenannter LC Displays dargestellt werden. Der englische Begriff lautet Liquid Crystal Displays, oder in Kurzschreibweise LCD. Auch LCDs gibt es in diversen Ausführungen. Ein mit dem Arduino häufig verwendeter Formfaktor ist 16×2. Dies bedeutet, das LCD besteht aus zwei Zeilen zu je 16 Zeichen.

https://www.robotshop.com/media/catalog/product/cache/image/400×400/9df78eab33525d08d6e5fb8d27136e95/1/6/16×2-character-lcd-display-white-blue-5v.jpg

Die LCDs besitzen mehr Anschlüsse als die 7-Segment-Anzeige, allerdings können sie auch wesentlich mehr Daten darstellen als diese.

Die folgende Abbildung möchte die Pin-Konfiguration darstellen, die beim LCD zur Verfügung stehen.

https://i.pinimg.com/originals/b1/08/95/b10895e1f39347f4eec1ab0d5d9152c4.png

Die LyquidCrystal-Bibliothek unterstützt den Anwender bei der Ansteuerung des LCD-Displays. Alle Datenpins (D0 – D7) werden dabei nicht verwendet, sondern nur die letzten vier (D4 – D7). Der Read/Write-Pin ist für das folgende Beispiel ebenfalls nicht relevant.

Das Display wird jede Sekunde heller. Mit dem Potentiometer kann der Kontrat des Displays eingestellt werden.

Der visualisierte Quellcode soll als Beispiel dienen. Zuerst wird die Display-Konfiguration umgesetzt. Seine Anzeige wird dabei jede Sekunde einmalig aktualisiert. Dazu zählen die angezeigte Zeit, wie auch die Anpasung der Hintergrundbeleuchtung.

Motoren

Gegenstandsbewegungen werden in der Elektrotechnik mit Magnetfelder realisiert. Magnetfelder können durch Spulen erzeugt werden. Durch das Zusammenspiel von Permanentmagneten und Elektromagneten können rotierende Bewegungen umgesetzt werden.

Eine sehr einfache und kostengünstige Art von Elektromotoren sind Gleichstrommotoren.

https://cdn-learn.adafruit.com/assets/assets/000/016/663/medium800/components_IMG_4848.jpg?1400434920

Gleichstrommotoren sind vielseitig einsetzbar und in diversen Größen verfügbar. In der Regel gilt, je Größer ein Motor ist, desto mehr Leistung benötigt er, entsprechend bringt er aber auch mehr Kraft. Diese Art von Motor erreicht sehr hohe Geschwindigkeiten – 20000 Umdrehungen pro Minute sind keine Seltenheit. Hohe Drehzahlen werden durch Getriebe in Kraft überführt. Es existieren Getriebe die 20000 Umdrehungen in 800 Umdrehungen, oder aber auch in 1 Umdrehung pro Minute, überführen können. Je stärker das Getriebe die Geschwindigkeit des Motors verringert, desto höher wird dessen Antriebskraft.
Getriebe und Motor werden oft in Kombination miteinander angeboten.

https://www.robotshop.com/community/uploads/tutorials/c/b/cbenson/imported/1420fa6ddf604aecb697b5826262ff57/full.jpg?v=20191213094851

Motoren werden zu unterschiedlichen Zwecken eingesetzt, z.B. als Antrieb eines Autos, in Bohrmaschinen, im Handy zur Erzeugung des Vibration, etc..

Die Motoransteuerung mit dem Arduino erfordert es, dass die Grenze der maximalen Arduino-Stromabgabe nicht überschritten wird. Motoren benötigen in der Regel viel Energie bzw. Strom.

Auf der Stromquelle erkennt man, dass ein Gesamtstrom von 346mA fließt. Mindestens ein Motor benötigt also zu viel Strom um direkt mit einem Arduino Pin verbunden zu werden.

Die Motorengeschwindigkeit kann durch das PWM-Signal gesteuert werden. Je nach Motor-Typ könnte es erforderlich sein den Mindest-Duty-Cycle-Faktor mit anzugeben, da ansonsten keine Motorbewegung passieren würde.

Der folgende visualisierte Quellcode würde ein PWM-Signal für eine mögliche Motorsteuerung erzeugen.

Servos

Eine spezielle Motorenart sind Servos. Servos sind Motoren inkl. Steuerungselektronik, die eine genaue Winkelpositionierung und eine genaue Steuerung der Drehgeschwindigkeit erlauben.

https://www.starthardware.org/wp-content/uploads/2017/01/servomotor-aufbau.jpg

Die obere Abbildung visualisiert.

  1. Regelungselektronik: Steuert die Position und Geschwindigkeit des Motors.
  2. Motor: Führt die Drehbewegung aus.
  3. Getriebe: Erhöht die Kraft und senkt die Geschwindigkeit des Motors.
  4. Positionssensor: Oft ein Potentiometer, das die aktuelle Position an die Regelungselektronik übermittelt.

Die Position des Servos-Achse wird über ein 50Hz PWM-Signal gesteuert. Der Duty-Cycle-Faktor bestimmt den gewünschten Winkel. Zur Servo-Steuerung könnte die Servo-Bibliothek verwendet werden, die sich um die Regelung des PWM-Signals kümmert.

Der folgende Quellcode möchte diesen Sachverhalt verdeutlichen.

Serial.readString() gibt einen String aus dem Seriellen Puffer zurück. Die Funktion „.toInt“ direkt hinter einem String wandelt diesen String in eine Zahl um.

Das Codefragment könnte die Servo-Ausrichtung über die serielle Schnittstelle steuern.