4. Arduino-Projekt: Blinkschaltung
Die Hardware
Die folgende Schaltung lässt eine Led auf dem Steckbrett blinken. Die Leuchtdiode hängt über einen Widerstand zwischen Pin 12 des Arduino und Masse (GND = Ground):
So könnte der Steckbrettaufbau aussehen:
Die Programmierung
Arduino-Programme - auch Sketche genannt - sind eigentlich in der Programmiersprache C++ geschrieben. Die Arduino-Programmierumgebung versteckt aber geschickt sehr viel von der Komplexität von C++ und lässt sich so "relativ leicht" nutzen.
Vorbereitung:
1. Arduino-Programmierumgebung (IDE = Integrated Developement Environment) downloaden: https://www.arduino.cc/en/Main/Software
2. Nach der Installation den Arduino UNO (oder eine Variante) per USB-Kabel mit dem PC verbinden und evtl. warten, bis die Treiberinstallation abgeschlossen ist.
3. Unter dem Menupunkt "Werkzeuge" das "Board" auswählen: in der Regel "Arduino/Genuino UNO" und den "Port", an dem der Arduino angezeigt wird. Ist kein Port mit "Arduino" gekennzeichnet, so die USB-Verbindung trennen und erneut versuchen.
Zur Sache:
So sieht das Blink-Programm zur Gänze aus:
// // Blinkschaltung für Pin 12 // // Pinnummer an variable led knüpfen const byte led = 12; // setup() wird zu Beginn genau einmal // aufgerufen void setup() { pinMode(led, OUTPUT); } // loop() ist die Programmschleife, // alles, was darin steht, wird wiederholt // aufgerufen void loop() { digitalWrite(led,HIGH); delay(300); digitalWrite(led,LOW); delay(300); }
Die Kommentare (mit // eingeleitet oder zwischen /* und */ geklammert) erläutern, was vor sich geht.
4. Nach der Eingabe des Programms, klicken Sie das Pfeilsymbol oben links in der Arduino-IDE an. Es passiert folgendes: Das Programm wird in eine für den Arduino lesbare Form übersetzt (kompiliert) und anschließend über das USB-Kabel zum Arduino übertragen. Sie sehen an der kleinen blinkenden Led auf dem Arduino, dass die Übertragung läuft. Die Arduino-IDE blendet im Fußbereich Status- und Fehlermeldungen des Übersetzungsprogramms (Compiler) und des Übertragungsprogramms ein.
5. Wenn alles klappt, sollte jetzt die Led auf dem Steckbrett blinken.
Hier noch einige Erklärungen zu den Bezeichnungen, es empfiehlt sich, die umfangreiche Arduino-Referenz zu Rate zu ziehen:
Der Ausdruck
const byte led = 12;
kann so gelesen werden:
const : gibt an, dass die folgende Variable nicht veränderbar (konstant) ist
byte: gibt die Art der Variable an, die Variable hat hier also die Länge von einem Byte (8 Bit = 2 hoch 8 = 256, es lassen sich also die Zahlen von 0 bis 255 mit einem char darstellen)
led : der Name der Variable, der beliebig geändert werden kann (allerdings sind einige Namen reserviert für spezielle Zwecke, z. B. const und char)
= : das ist der Zuweisungsoperator und tut genau das, was man von ihm erwartet
12 : der Wert der Variable, in diesem Fall die Arduino-Pin-Nummer an der die Led hängt
; : markiert das Ende einer Anweisung in C++
Der Ausdruck definiert also eine unveränderliche (const) Variable mit dem maximal größten Wert 255 (byte) und dem Namen led und weist (=) ihr den Wert 12 zu.
Wichtig: alle Anweisungen außerhalb der beiden Funktionen setup() und loop() können nur entweder Definitionen von Variablen und Funktionen sein, ggf. mit Wertezuweisung wie im Beispiel. Es können hier keine Rechenoperationen oder Funktionsaufrufe stehen. Die hier definierten Werte stehen als sogenannte globale Variablen allen Funktionen zur Verfügung.
Es folgt die Definition der Setup()-Funktion:
// setup() wird zu Beginn genau einmal // aufgerufen void setup() { pinMode(led, OUTPUT); }
Dies kann so gelesen werden:
Beim Einschalten des Arduino oder nach einem Reset, wie er nach dem Hochladen eines Sketches (Programms) automatisch ausgelöst wird, springt das Arduino-Programm in die Setup-Funktion und arbeitet die darin befindlichen Teile einmal ab.
Dabei bedeutet:
void : gibt an, dass die Funktion setup() keinen Rückgabewert hat
setup() : der Name der Funktion - hier von der Arduino-IDE fest vorgegeben und kann nicht geändert werden
{ ... } : alles zwischen diesen Klammern wird der Reihe nach abgearbeitet
pinMode(led,OUTPUT); : die Arduino-Funktion "pinMode(pin, mode)" legt fest, ob der angegebene pin als Ausgang (mode = OUTPUT), z. B. zur Ansteuerung einer Led wie hier, oder als Eingang (mode = INPUT), z. B. zum Einlesen eines Tasters verwendet wird. Hier wird als pin-Wert die Konstante "led" übergeben (zeigt auf den Wert 12) und als mode OUTPUT gewählt
Es folgt die loop()-Funktion:
// loop() ist die Programmschleife, // alles, was darin steht, wird wiederholt // aufgerufen void loop() { digitalWrite(led,HIGH); delay(300); digitalWrite(led,LOW); delay(300); }
Diese kann so gelesen werden:
Nachdem die setup()-Funktion abgearbeitet ist geht das Arduino-Programm in eine Dauerschleife in der rasch hintereinander die loop()-Funktion aufgerufen wird. Auch diesen Namen darf man nicht ändern.
Dabei bedeutet:
void : gibt an, dass die Funktion loop() keinen Rückgabewert hat
loop() : der Name der Funktion - hier von der Arduino-IDE fest vorgegeben und kann nicht geändert werden
{ ... } : alles zwischen diesen Klammern wird der Reihe nach in einer Dauerschleife abgearbeitet
digitalWrite(led,HIGH); : die digitalWrite(pin,value)-Funktion schaltet den angegebenen Pin (pin, hier der durch die Konstante "led" gewählte) entweder auf +5V (HIGH) oder 0V (LOW). Der Funktionsaufruf bewirkt aufgrund der gewählten Hardwareverdrahtung, dass die Led eingeschaltet wird
delay(300); : die delay(value)-Funktion bewirkt, dass das Programm die angegebene Anzahl von Millisekunden (ms) pausiert. Das ist deshalb notwendig, da sonst durch den schnellen loop()-Durchlauf kein Ein- und Ausschalten mit bloßem Auge bemerkt werden könnte, da es zu schnell geht
digitalWrite(led,LOW); : schaltet die Led wieder aus
delay(300); : belässt die led für die angegebene Anzhal von Millisekunden im Aus-Zustand
So sieht das Ergebnis aus.
Kniffliges:
1. Modifizieren Sie den Sketch so, dass die Blinkzeiten schneller oder kürzer werden.
2. Verwenden Sie anstelle der Zahl 300 ein Konstante, das erleichtert das Ändern des Wertes, da er nur mehr an einer Stelle geändert werden muss.
3. Probieren Sie einen anderen Arduino-Pin aus.
4. Modifizieren Sie die Schaltung und das Programm so, dass zwei Leds unabhängig voneinander blinken.
Screenshots wurden mit Fritzing erstellt, falls nicht anders angegeben (https://fritzing.org)
3. Widerstands-Farbwerte
Für die Durchsteck-Widerstände, wie man sie auch für das Steckbrett verwendet, werden der Wert in Ohm (Ω) und die Abweichung in Prozent (%) in Farbringen aufgedruckt.
Für die kleinen SMD-Widerstände (Surface-Mounted-Devices), wird der Wert direkt in Zahlen aufgedruckt, zum Entziffern braucht es manchmal eine Lupe.
Es gelten folgende Farbwerte:
Für den Widerstand oben bedeutet das:
1. Ziffer grün = 5
2. Ziffer blau = 6
Esponent rot = 10²
Das macht zusammen: 56 * 10² = 5600 Ω = 5,6 kΩ
Ein zweites Beispiel:
Das macht: 1 und 0 und 10³ = 10000Ω = 10 kΩ
Und jetzt zum selber üben:
2. Steckbrett: Schaltplan und Steckbrett-Aufbau
Die einfache Schaltung zum Ein- und Ausschalten einer Leuchtdiode mit Hilfe eines Tasters wird als Schaltplanentwurf symbolisch so dargestellt:
Dabei bedeuten die Symbole im Einzelnen:
Im Steckbrettaufbau kann das so realisiert werden:
Dabei ist genau auf die Polung der Leuchtdiode zu achten.
Quelle: https://de.cleanpng.com/
Auch der Taster muss so eingebaut werden, dass die schließenden Kontakte im Schaltkreis liegen (ggf. einfach ausprobieren).
Und so schaut ein realer Aufbau der oben angeführten Schaltung aus:
Screenshots wurden mit Fritzing erstellt, falls nicht anders angegeben (https://fritzing.org)
1. Das Steckbrett (Breadboard)
Mit dem Steckbrett, auf englisch "Breadboard", also "Brotbrett", können eletronische Schaltungen als Versuchsaufbau zusammengestellt werden.
Die englische Bezeichnung rührt daher, dass früher das Brotbrett aus der Küche mit Hilfe von Nägeln oder metallischen Reißzwecken für diese Aufgabe verwendet wurde.
Heute gibt es Plastikausführungen, in die die meisten elektronischen Bauteile direkt eingesteckt werden können. Dazu sind die Lochreihen des Steckbretts elektrisch verbunden, wie hier durch die grünen Linien angedeutet:
Deshalb gibt es auch sinnlose oder fehlerhafte Bestückungsvarianten:
Die rot markierten Teile sind in dieser Anordnung sinnlos platziert, da alle Pins (Beinchen) kurzgeschlossen sind und so keine Funktion möglich ist. Die Drahtbrücke unten zwischen Plus- (+) und Minuspol (-) erzeugt einen Kurzschluss, wenn die Lochreihen wie vorgesehen für die Spannungsversorgung benutzt werden.
Die grün markierten Bauteile sind hingegen sinnvoll platziert, da alle Pins einen elektrisch getrennten Zugang haben.
Screenshots wurden mit Fritzing erstellt (https://fritzing.org)