Die folgende Seite bietet jeweils eine Einführung in neue Bauteile aus der Kategorie Aktoren, für die unterschiedliche Grundlagen aus dem Kapitel “Bausteine von Algorithmen” benötigt werden. Das Kapitel “Elektrische Grundlagen” ist zum tieferen Verständnis sicherlich hilfreich, aber für diese vorkonfigurierten Bauteile nicht unbedingt notwendig. Mit den hier vorgestellten Bauteilen lässt sich bereits eine Vielzahl an größeren Projekten umsetzen. Vielleicht hast du eine tolle Idee?
Im Folgenden werden Bauteile erklärt, die eine Ausgabe machen, also z. B. sich bewegen, etwas anzeigen, Licht aussenden oder Töne erzeugen. In der Roboterkonfiguration handelt es sich um die orangen Blöcke.
RGB steht für Rot, Grün und Blau. In einer RGB-LED sind also drei LEDs gleichzeitig verbaut, die sich in unserem Fall eine gemeinsame Anode (Kontakt mit GND) teilen. Die Anode gehört zum längsten Beinchen. Die anderen Kontakte sollten an einen PWM-Pin (gekennzeichet durch eine Tilde: ~) angeschlossen werden.
Schließe die RGB-LED wie beschrieben an und experimentiere mit den Befehlen für die Farben. Vervollständige mit Hilfe deiner Experimente die unten stehende Tabelle.
Hinweis: Die Werte für die Farbanteile von rot, grün und blau reichen von 0 bis 255.
Farbe | Farbanteile |
---|---|
![]() |
![]() |
![]() |
|
![]() |
|
![]() |
|
![]() |
|
![]() |
Wenn man die Farbanteile mit einer Zählschleife durchlaufen lässt, ergeben sich besonders schöne Farbeffekte. Probiere dies in verschiedenen Varianten aus!
Im RGB-Farbmodell werden alle Farben mit Hilfe von verschiedenen Anteilen von Rot, Grün und Blau zusammengesetzt. Dabei handelt es sich um ein additives Farbmodell, bei dem die Farbe umso heller wird, je größer der Anteil jeder Farbe ist. Werden rot, grün und blau in voller Stärke vermischt, ergibt sich weiß. Wenn ihr Anteil jeweils null beträgt, ergibt sich schwarz.
Die Anteile werden durch eine Zahl zwischen 0 und 255 angegeben, welches sich jeweils durch acht Bit bzw. ein Byte speichern lassen. Statt der Dezimalzahlen von 0 bis 255 wird der Anteil auch häufig mit Hexadezimalzahlen von \(00_{hex}\) bis \(ff_{hex}\) angegeben. Der Code sieht dann zum Beispiel so aus: \(\#72b9fa\), wobei \(72\) der Rotanteil, \(b9\) der Grünanteil und \(fa\) der Blauanteil ist.
Wie oben beschrieben handelt es sich bei der RGB-LED eigentlich um drei einzelne LEDs, die jeweils mit einem PWM-Pin verbunden werden müssen, damit die Farbanteile eingestellt werden können.
Überprüfe dies, indem du jede LED einzeln als analogen Aktor konfigurierst und die Farben aus der ersten Aufgabe mit dem Befehl schalte analogen Wert Aktor <led name> <zahl>
mit einer Zahl von 0 bis 255 erzeugst.
Rücklink: Pulsweitenmodulation
Der Servo wird mit drei Anschlüssen an den Arduino angeschlossen:
Baue mit einem Servo eine Schranke, die auf Knopfdruck geöffnet und wieder geschlossen werden kann.
Recherche: Wie funktioniert die Steuerung eines Servos?
Der Winkel, auf den sich die Ausgangswelle des Servo drehen soll, wird über ein PWM-Signal geregelt. Recherchiere im Internet, wie dies realisiert wird und fasse es zusammen.
Herzstück des Motors sind zwei Spulen, die jeweils in der Mitte durch eine 5 V-Spannungsversorgung in zwei Teile geteilt werden. Weil der Pol mit dem positiven 5 V-Potential dadurch festgelegt ist und nicht flexibel an beiden Enden angelegt werden kann, nennt man den Motor auch unipolaren Schrittmotor.
In der Mitte der Spulen befindet sich ein Permanentmagnet, an dessen Ende ein Zahnrad angebracht ist, das wiederum weitere Zahnräder in Bewegung versetzt. Die Spulen werden nun abwechselnd an und aus geschaltet und wirken dabei als Elektromagnet. Durch die wechselnde Anziehung und Abstoßung des Permanentmagneten in der Mitte beginnt dieser, sich zu drehen. Für das Ein- und Ausschalten der Spulen wird ein Motortreiber genutzt, der den Arduino vor zu hohen und rückläufigen Strömen schützt (vgl. den Abschnitt Elektromotoren mit dem Motortreiber-IC L293D steuern). Aufgrund der Stromaufnahme von ca. \(240 \, mA\) ist es empfehlenswert, eine externe Spannungsversorgung am Motortreiber anzuschließen (zum Beispiel mit Hilfe des Power Supply Module - denke an die gemeinsame Erdung mit dem Arduino!). Da die Spulen auch beim Halten der Position dauerhaft unter Strom stehen müssen, ist der Stromverbrauch konstant hoch.
Die korrekte Reihenfolge des Ein- und Ausschaltens der Spulen ist bereits in Nepo implementiert, sodass die Steuerung sich einfach bewerkstelligen lässt. Es ist aber wichtig zu verstehen, dass jede Spuleneinstellung den Permanentmagneten in der Mitte dazu bringt, sich um einen kleinen Winkel zu drehen. Dieser Winkel wird auch Schritt genannt und dies gibt dem Schrittmotor seinen Namen. Dieser Schritt oder Winkel ist auch die kleinste Schrittweite, die der Motor ansteuern kann und gibt somit die Präzision des Motors an. Beim hier verwendeten Modell 28BYJ-48 beträgt der Schrittwinkel \(5,625°\) (vgl. Datenblatt), woraus sich ergibt, dass der Motor 64 Schritte für eine Umdrehung benötigt. Durch die eingebauten Zahnräder wird die Drehung des Schafts aber weiter verlangsamt, sodass ein Motorschritt nur einer Schaftdrehung von etwa \(0,176°\) (1/32 der Motorschrittweite) entspricht. Dies bedeutet, dass der Motor 2048 Schritte für eine Umdrehung braucht. Wenn du in den textbasierten Quellcode von Nepo schaust, nachdem du einen Schrittmotor konfiguriert hast, wirst du diese Zahl wiederfinden!
In Nepo lässt sich einfach angeben, mit welcher Geschwindigkeit (in Umdrehungen pro Minute, engl. revolutions per minute, rpm) und um wie viele Umdrehungen sich der Schaft drehen soll. Alternativ kann angegeben werden, um wie viel Grad sich der Schaft drehen soll.
Programmiere einen möglichst präzisen Sekundenzeiger. Überprüfe ihn mit der Stoppuhr deines Smartphones.
Tipp: Nutze Klebeband, um eine kleine Fahne als Zeiger zu basteln.
Für Interessierte: Die Funktionsweise eines Schrittmotors
Um ein LC-Display anzusteuern, werden ziemlich viele Kabel benötigt. Daher gibt es neben den normalen LC-Displays häufig auch eine Variante, bei der ein I2C-Modul am LC-Display angebracht ist, was die benötigten Kabel deutlich reduziert. Im Folgenden werden beide Varianten beschrieben.
LC-Display ohne I2C-Modul
Im Schaltplan sind die Kabel so mit dem Arduino verbunden, wie es die Standardkonfiguration für das LCD 1602 in Nepo angibt. Es empfiehlt sich, die zahlreichen 5V- und GND-Anschlüsse auf den Längsseiten des Steckbretts zu sammeln.
LCD | Arduino |
---|---|
VSS | GND |
VDD | 5V |
V0 | Drehregler (Mitte) |
RS | 12 |
RW | GND |
E | 11 |
D0 - D3 | – |
D4 | 5 |
D5 | 4 |
D6 | 3 |
D7 | 2 |
A | 5V |
K | GND |
Die Anschlüsse A und K stehen für die Anode und Kathode der LEDs, die die Hintergrundbeleuchtung ausmachen. Mit dem Drehregler wird der Kontrast des Bildschirms eingestellt.
LCD mit I2C-Modul
Die I2C-Schnittstelle erlaubt es, ein LC-Display mit nur vier Kabel anzusteuern. Der Anschluss an den Arduino erfolgt wie in der Abbildung dargestellt.
I2C steht für Inter-Intergrated-Circuit. Dies ist ein sogenannter Datenbus, also ein System zur Übertragung von Daten zwischen mehreren Teilnehmern. Die Datenübertragung funktioniert über ein getaktetes An- und Ausstellen der Datenleitung, um die Daten in Binärform (1 und 0) zu übertragen. Neben der Spannungsversorgung (GND und VCC) wird dazu ein Kabel für die serielle Datenübertragung (SDA - Serial Data) und ein Kabel für die Abstimmung des Taktes (SCL - Serial Clock) benötigt.
Da auch mehrere I2C-kompatible Geräte an denselben Datenbus angeschlossen werden können, bekommt jedes Gerät eine Adresse, damit klar ist, welches Gerät die Daten bekommen soll. Die Adresse wird bei der Konfiguration als Hexadezimalzahl angegeben und kann prinzipiell zwischen 0 und 127 liegen. Typischerweise ist die voreingestellte Adresse 0x27
. Dabei bedeutet 0x
, dass die folgenden beiden Ziffern als Hexadezimalzahl zu interpretieren sind. Falls bereits ein anderes Gerät auf dem gleichen Datenbus dieselbe Adresse hat, kann die Adresse über die Lötbrücken verändert werden (siehe bastelgarage.ch).
Schließe das LC-Display wie beschrieben an den Arduino an und erstelle ein Programm, das “Hello World!” auf dem LC-Display anzeigt.
Hinweis: Falls alle Pixel weiß oder blau bleiben, kann es sein, dass der Drehregler falsch eingestellt ist. Drehe in diesem Fall an dem Drehregler, um den Kontrast zu verbessern. Für den Drehregler auf dem I2C-Modul (blauer Kasten) brauchst du einen Schraubendreher o. ä.
In vielen Anwendungen soll auf dem LC-Display ein Messwert o. ä. angezeigt werden, der sich mit der Zeit ändern kann. Diese Anzeige soll aber schön formatiert sein.
Erstelle ein Programm, das alle drei Sekunden eine Zufallszahl z
zwischen 0 und 200 erzeugt und auf dem Display folgende Anzeige ausgibt:
Messwert: z E
Hinweise:
E
soll für eine beliebige Einheit stehen.z
gelöscht wird (Lösche LCD1602 (I2C)
).z
soll immer rechtsbündig erfolgen, sodass zwischen den Einern von z
und der Einheit genau ein Leerzeichen steht.LCD 1602 (I2C) zeige Text "..." in Spalte <_> in Zeile <_>
. Die Zeile ist entweder \(0\) (oben) oder \(1\) (unten). Die Spalte kann sich von \(0\) bis \(15\) erstrecken. (In der Informatik beginnt das Zählen stets mit der Null!)Codierung von Zeichen auf dem LCD
Für die Darstellung von Zeichen auf dem LCD muss im Hintergrund geklärt werden, welche Pixel an- und ausgestellt werden müssen. Dazu lohnt ein genauer Blick auf die Zellen des LCD.
Jede Zelle besteht aus \(5 \times 8\) Pixeln, von denen manche weiß und manche blau sind. Wenn man für jedes Pixel eine 1
(weiß) oder eine 0
(blau) notiert, dann erhält man Bitfolgen (gekennzeichnet durch das vorstehende 0b
), die sich in einer Reihung notieren lassen.
Man könnte die Reihung von Bitfolgen auch als Reihung von Dezimalzahlen notieren und käme auf das gleiche Ergebnis. Das macht den Code zwar kürzer, jedoch leidet die Lesbarkeit des Codes deutlich.
Entwerfe einen Smiley und ein eigenes Symbol auf \(5 \times 8\) Pixeln und notiere die zugehörige Reihung von Bitfolgen, die dieses Zeichen codiert.
Hinweis: Mit der textbasierten Arduino-IDE lassen sich nach dem oben beschriebenen Prinzip auch eigene Zeichen für das LC-Display codieren. Ein Beispiel findet sich unter Datei
\(\rightarrow\) Beispiele
\(\rightarrow\) LiquidCrystal
\(\rightarrow\) CustomCharacter
.
Das SSD1306 ist ein kostengünstiges, kleines Display in zwei Versionen: Eine mit 128 x 64 OLEDs und somit 128 x 64 Pixeln und eine mit 128 x 32 OLEDs / Pixeln. Achtung: In Onlineshops werden häufig 64 Pixel Höhe angegeben, obwohl nur 32 Pixel Höhe vorhanden sind! Die Bildschirmdiagonale beträgt 0,96", also ca. 2,44cm. Die OLEDs haben in der Regel eine weiße Farbe, es gibt aber auch Versionen mit einer integrierten Farbfolie, sodass blaue und gelbe Farbtöne möglich sind (aber immer nur ein Farbton pro LED). Es verfügt über vier Pins, von denen VCC und GND wie üblich die Stromversorgung sicherstellen, während die Datenübertragung über den I2C-Datenbus realisiert wird. Dazu wird der SCL-Pin mit A5 und der SDA-Pin mit A4 verbunden (siehe Schaltplan / Roboterkonfiguration).
Die Adresse, unter der das Display über den I2C-Datenbus erreichbar ist, ist in der Regel 0x3D
(Standard bei 128 x 64 Pixeln) oder 0x3C
(Standard bei 128 x 32 Pixeln). Bei manchen Displays kann man die Adresse auch auf der Rückseite ablesen und ggf. abändern, indem man eine Lötstelle überbrückt.
min. | max. | |
---|---|---|
Spalte | 0 | 122 |
Zeile | 0 | 56 bzw. 24 |
Hinweis zur maximalen Zeile:
56px bei 64 px Höhe und 24px bei 32px Höhe.
In vielen Anwendungen soll auf dem Display ein Messwert o. ä. angezeigt werden, der sich mit der Zeit ändern kann. Diese Anzeige soll aber schön formatiert sein.
Erstelle ein Programm, das alle drei Sekunden eine Zufallszahl z
zwischen 0 und 200 erzeugt und auf dem Display folgende Anzeige ausgibt:
Messwert: z E
Hinweise:
E
soll für eine beliebige Einheit stehen.z
gelöscht wird (Lösche OLED SSD1306 I²C
).z
soll immer rechtsbündig erfolgen, sodass zwischen den Einern von z
und der Einheit genau ein Leerzeichen steht.Recherche: Vor- und Nachteile der OLED-Technologie
Auf dem Markt für Displays gibt es immer noch eine harte Konkurrenz und längst nicht alle Hersteller setzen auf OLEDs. Recherchiere, welche Vor- und Nachteile diese Technologie für die Verwendung in Bildschirmen hat.