Programmierung
Hello World!
Egal welche Programmiersprache du lernst, immer fängt man mit einem sogenannten “Hello World” Programm an. Auch wir beginnen hiermit unser erstes kleines Programm zu schreiben.
void setup()
{
// Startet Serielle Kommunikation
Serial.begin(9600);
}
void loop()
{
// Gibt etwas aus
Serial.println("Hello World");
delay(2000);
}
Todo
Lade das Programm auf deinen Mikrocontroller hoch. Wenn es geladen ist, öffne den seriellen Monitor.
Todo
Kannst du den Schriftzug “Hello World” sehen? Dann hast du erfolgreich dein erstes kleines Programm geschrieben!!
Warning
Speicher dieses und die folgenden Programme gerne mit unterschiedlichen Namen ab, sodass sie nicht überschrieben werden und du später nochmal nachlesen kannst, was du getan hast.
Wir lassen eine LED blinken
Was ist eine LED?
LEDs begegnen uns mittlerweile überall – egal ob in Ampeln oder im Fernseher, sie sind überall verbaut. Durch ihre lange Lebensdauer, ihre geringe Größe sowie die variantenreichen Formen und Farbspektren haben sich LEDs in kurzer Zeit gegenüber Glühbirnen, Halogen- und Energiesparlampen durchgesetzt.
LED bedeutet in etwa “leuchtende Diode” und sieht aus wie eine kleine, sehr helle Glühbirne. Eine Diode lässt den Strom in eine Richtung sehr leicht durch und blockiert ihn in die andere Richtung. Eine LED strahlt zudem Licht ab, wenn der Strom durch sie fließt.
Im Folgenden kannst du das Schaltzeichen einer LED sehen.
Wie verkabele ich eine LED?
Wir wollen nun damit beginnen, die LED zu verkabeln. Anschließend werden wir dann auch die LED durch Programmierung zum Blinken bringen.
Zum Verkabeln nutzen wir als Hilfe eine Steckplatine (engl. Breadboard)
Steckplatinen dienen zum Aufstecken der Bauteile, wobei die Enden in unterschiedliche Zahlenreihen (z.B. 10+12, oder 5+9, etc.) gesteckt werden sollten, da die Löcher einer Zahlenreihe, von a bis e und von f bis j, jeweils miteinander verbunden sind und deswegen sonst ein Kurzschluss entstehen würde. Daneben dienen Steckplatinen z.B. dazu ein Kabel mit zwei weiteren zu verbinden. Dazu können diese in dieselbe Zahlenreihe (z.B. 5, oder 7, etc.) aufgesteckt werden.
Todo
Stecke zuerst den Mikrocontroller mit beiden Seiten auf unterschiedliche Buchstabenreihen der Steckplatine (achte dabei darauf, dass auf beiden Seiten neben dem Mickrocontroller mindestens eine Reihe leer ist).
Todo
Stecke nun auch die LED mit beiden Enden auf unterschiedliche Zahlenreihen der Steckplatine.
Das kürzere Beinchen (Kathode/-) der LED soll mit dem GND-Pin des Arduinos verbunden werden.
Todo
Stecke das Kabel dazu mit dem einen Ende in dieselbe Zahlenreihe wie der kürzere Beinchen des LEDs und das andere Ende in die selbe Zahlenreihe wie der GND-Pin des Arduinos.
Das längere Beinchen (Anode/+) der LED soll über den Widerstand mit dem digitalen Pin 13 (also D13
) verbunden werden.
Ein Widerstand ist ein elektrisches Bauteil. Achtung: Nicht die Größe des Bauteils sagt etwas darüber aus, wie stark/groß der elektrische Widerstand ist, sondern die Linien mit ihren Farben.
Entweder will man mit dem Widerstand den Strom für eine feste Spannung einstellen, oder man braucht andere Spannungen als gegeben und verwendet dazu Widerstände, um die Spannung in bestimmten Punkten zu ändern. Letzteres ist hier der Fall.
Stell dir vor, du musst einen Ball durch einen Schlauch durchdrücken. Der Schlauch muss gespannt werden, damit der Ball durch den Schlauch passt. Je enger der Schlauch ist, desto schwieriger ist es, den Ball durchzudrücken, desto mehr Spannung tritt im Schlauch auf. Die Schwierigkeit kommt von einer Art Widerstand, die verhindert, den Ball einfach durchdrücken zu können. So ähnlich ist mit dem elektrischen Widerstand – Er erschwert den Fluss des Stroms. Damit der Strom durchfließen kann, wird mehr Spannung verbraucht. Das bedeutet, vor einem Widerstand gibt es mehr Spannung, als nach dem Widerstand, weil diese verbraucht wird, damit der Strom durch den Widerstand fließen kann. Man sagt auch, dass die Spannung am Widerstand abfällt.
Wir benutzen also einen Widerstand dazu, um die Spannung zu verkleinern, sodass die LED nicht an zu hoher Spannung zerstört wird.
Im Folgenden kannst du das Schaltzeichen eines Widerstandes sehen.
Zur Erinnerung: Das längere Beinchen (Anode/+) der LED soll über den Widerstand mit dem digitalen Pin 13 (also D13
) verbunden werden. Hierzu brauchen wir zwei Kabel.
Todo
Stecke zuerst den Widerstand mit beiden Enden (hierzu kannst du sie verbiegen) in unterschiedliche Zahlenreihen (Achtung: auch in andere Zahlenreihen, als die Enden der LEDs) ein.
Todo
Stecke dann das eine Ende des ersten Kabels in die selbe Zahlenreihe wie der längere Beinchen des LEDs und das andere Ende in die selbe Zahlenreihe wie die eine Seite des Widerstandes (es ist egal welche Seite).
Todo
Nun stecke das Ende des zweiten Kabels in die selbe Zahlenreihe wie die zweite Seite des Widerstandes und das andere Ende des Kabels in die selbe Zahlenreihe wie der GND-Pin des Arduinos.
Wie programmiere ich eine LED?
Die Verkabelung sollte zu Ende sein und wir können mit der Programmierung beginnen.
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
Die Funktion pinMode()
setzt mit seinen zwei Parametern fest, dass der Pin 13 des Mikrocontrollers die Funktion OUTPUT hat. Das bedeutet, dass der Pin 13 nur Signale verschicken kann. Die LED ist der Empfänger dieser Signale, da diese mit dem Pin 13 verbunden ist.
Mit digitalWrite()
wird dem Pin 13 ein Signal zugeordnet. Empfängt die LED ein HIGH-Signal, so leuchtet sie. Empfängt die LED ein LOW-Signal, so leuchtet sie nicht. Die delay()
-Funktion hält das Programm an und sorgt damit dafür, dass das neue Signal erst nach 1000 Milisekunden, also einer Sekunde, kommt gesendet wird. Das bedeutet, die LED leuchtet für eine Sekunde, ist dann für eine Sekunde ausgeschaltet und leuchtet dann erneut, da der LOOP-Bereich unendlich oft durchlaufen wird. Es sollte also ein Blinken mit der Periodendauer von zwei Sekunden erzeugt sein.
Todo
Lade das Programm hoch und teste, ob die LED blinkt.
Todo
Teste verschiedene Wartezeiten für das Blinken der LED aus.
Wir benutzen den Taster
Was ist ein Schalter oder Taster?
Ein Schalter (z.B. Lichtschalter) verbindet durch das Drücken zwei Punkte in einem Schaltkreis, sodass Strom fließen kann. Der Kontakt bricht erst bei erneutem Drücken ab. Ein Taster (z.B. Knöpfe im Auto) verbindet dagegen nur im gedrückten Zustand zwei Punkte in einem Schaltkreis, sodass Strom fließen kann. Wird losgelassen, so bricht der Kontakt gleich ab.
Im Folgenden kannst du das Schaltzeichen eines Tasters sehen.
Wie verkabele ich einen Taster?
Nun wollen wir auch den Taster verkabeln und anschließend programmieren.
Todo
Schaue dir den Taster von unten an, um zu sehen welche zwei Pins jeweils miteinander verbunden sind und welche sich erst beim Drücken verbinden. Du erkennst die bereits verbundenen daran, dass diese mit einem Strich verbunden sind. Nun stecke den Button so in die Platine, dass diese Linie auf einer Zahlenreihe liegt.
Todo
Jetzt betrachten wir die nicht verbundenen Seiten. Die eine Seite (hier ist egal welche) wird mit dem GND-Pin des Mikrocontrollers verbunden, die andere Seite (also die, die nicht mit der ersten Seite verbunden ist) wird mit dem digitalen Pin 2 (also D2) verbunden. Stecke die Kabel dazu mit beiden Enden in die selben Zahlenreihen, wie die zu verbindenden Pins, damit eine Verbindung gewährleistet ist.
Schließt man den Taster direkt am Arduino als INPUT an, liegt, solange der Taster nicht gedrückt ist, kein definiertes Signal an. Man sagt auch, es rauscht. Um dieses Rauschen zu unterdrücken kann man einen Pull-Up-Widerstand verwenden. Er sorgt dafür, dass ein sauberes Signal anliegt, auch wenn der Taster nicht gedrückt ist. Im Arduino ist bereits ein Pull-Up-Widerstand verbaut, den man verwenden kann, indem man die Funktion des Pins als INPUT_PULLUP deklariert.
Wie programmiere ich einen Taster?
int TasterZustand;
void setup()
{
pinMode(2, INPUT_PULLUP);
Serial.begin(9600);
}
void loop()
{
TasterZustand = digitalRead(2);
Serial.println(TasterZustand);
if(TasterZustand == 1) {
}
if(TasterZustand == 0) {
}
}
Im Setup-Bereich wird der digitalen Pin 2 (da der Taster hier verbunden) erneut mit der pinMode()
-Funktion, wie zuvor bei der LED, aber hier aus dem zuvor erklärten Grund als INPUT_PULLUP deklariert.
Anschließend wird eine Variable für den Zustand des Tasters deklariert und zur Verwendung des seriellen Monitors mit Serial.begin(9600)
eine Datenübertragungsrate festgelegt.
Im Loop-Bereich wird der Variablen TasterZustand
der gelesene Wert des Tasters, also die Information, ob es geöffnet (HIGH/1) oder geschlossen (LOW/0) ist, zugeordnet und mit der Funktion Serial.println() auf dem seriellen Bildschirm ausgegeben.
Zudem wird mit zwei if-Schleifen ohne Anweisungsteil eine einfache Abfrage durchgeführt, ob der Taster geöffnet oder geschlossen ist.
Todo
Überprüfe, ob du den Taster auslesen kannst.
Todo
Gib deine Nachricht (z.B. deinen Namen) auf dem seriellen Monitor aus, wenn der Taster gedrückt wird. Füge der if-Schleife hierzu einen Anweisungsteil hinzu.
Wir lassen den Servomotor drehen
Was ist ein Servomotor?
Ein Servomotor ist ein spezieller Elektromotor. Elektromotoren wandeln elektrische Energie in mechanische Energie um. Ein Servomotor beinhaltet folgende Komponenten: Getriebe, Steuerungseinheit und Potentiometer (variabler Widerstand). Das Besondere an einem Servomotor ist, dass die Position des Motors sehr einfach einstellbar ist. Bei unserem Motor können wir festlegen, bis zu welcher Position er sich bewegen soll. Neben der gewünschten Winkelposition kann bei einem Servomotor auch die Geschwindigkeit und die Beschleunigung geregelt werden.
Im Folgenden kannst du das Schaltzeichen des Servomotors sehen.
Wie verkabele ich einen Servomotor?
Todo
Der Motor hat drei Anschlüsse (braun, rot, orange). Der braune Anschluss soll mit dem GND
-Pin, der rote mit dem 5V-Pin und der orangene mit dem digitalen Pin 9 (also D9
) verbunden werden. Stecke das eine Ende des Kabels dazu jeweils an die Kabel des Motors dran und das andere Ende des Kabels jeweils in dieselbe Zahlenreihe wie der Pin.
Wie programmiere ich einen Servomotor mithilfe der Servo Bibliothek?
#include <Servo.h> // Einbinden der Bibliothek für den Motor
Servo motor1; // Definition eines Motors mit dem Namen motor1
void setup()
{
motor1.attach(9); // Festlegung, an welchem Pin der Motor angeschlossen wird
}
void loop()
{
for (int i = 0; i <= 30; i=i+1)
{
motor1.write(i);
delay(10);
}
for (int i = 30; i >= 0; i=i-1)
{
motor1.write(i);
delay(10);
}
}
Zu Beginn, vor dem Setup- und Loop-Bereich, muss die Implementation der Servo-Bibliothek stattfinden, d.h. der Programmcode muss informiert werden, dass die Bibliothek verwendet wird. Somit kann er die verwendeten Funktionen dort nachlesen und anschließend richtig ausführen.
Zunächst wird ein Objekt, vom Typ Servo der Servo-Bibliothek, mit dem Namen motor1
, erzeugt. Dieser wird, mit dem Funktionsaufruf motor1.attach(9)
, dem Pin 9 zugewiesen.
Um den Servomotor zu einem Winkel zwischen 0° und 180° zu drehen, gibt es in der Servo-Bibliothek wiederum eine Funktion motor1.write(Winkel)
, in den man den gewünschten Winkel einträgt, zu dem der Servo fahren soll.
Damit der Motor sich langsam von 0° zu beispielsweise 30° dreht, kann man der Funktion mehrere Winkel im Abstand von 1° übergeben, sodass er sich stückweise bewegt. Damit man hierzu nicht 30 mal die Funktion mit einem anderen Winkel aufschreiben muss, kann hier die for-Schleife als Hilfsmittel verwendet werden. Die Steuervariable i bildet den Winkel, der von 0° (das erkennt man an der Initialisierung i=0) bis 30° (das erkennt man an der Bedingung i<=30) in 1° Schritten zunimmt (das erkennt man an der Schrittweite i=i+1) und im weiteren, also in der zweiten for-Schleife, von 30° (das erkennt man an der Initialisierung i=30) bis 0° (das erkennt man an der Bedingung i>=0 in 1° Schritten wieder abnimmt (das erkennt man an der Schrittweite i=i-1), sodass sich der Motor, durch unendliches wiederholen des LOOPs, hin und her bewegt.
Todo
Lade das Programm hoch. Dreht sich der Motor?
Todo
Teste verschiedene Einstellungen der for-Schleifen aus. Siehst du die Unterschiede beim Drehen des Motors?
Let’s dance!
Jetzt fügen wir alle Komponenten in ein Programm zusammen. Ziel ist es, dass sich die Figur dreht, wenn der Taster gedrückt ist. Zudem soll die LED blinken, wenn sich die Figur dreht.
Todo
Füge alle Programmbausteine zusammen, um die Aufgabe zu erfüllen.
Zusätzliche Ideen:
Verbinde weitere LEDs mit deinem Mikrocontroller und lasse sie unterschiedlich blinken oder aufleuchten
Zähle, wie oft der Taster gedrückt wurde und lasse die LED nach jedem 10. Mal für 10 Sekunden aufleuchten
Nutze eine if-Anweisung, um den Motor unterschiedlich zu drehen. Beispielsweise kannst du die Winkel je nach Anzahl der Schritte ändern.