In dieser Aufgabenstellung befassen wir uns mit dem Bewegungsmelder. Wie es der Name schon erklärt, erfasst ein Bewegungsmelder Bewegungen im einem bestimmten Umkreis. Diese erfasste Bewegung gibt der Bewegungsmelder als Signal an den Mikrocontroller weiter.
Dieses Signal möchten wir mit dem Mikrocontroller auf unserem Funduino Cube auslesen und eine rote LED zum Leuchten bringen.
Wie immer beginnen wir mit der ROBOTERKONFIGURATION in OpenRoberta.
Lese das Signal von dem Bewegungsmelder auf deinem Funduino Cube aus.
Lasse die rote Leuchtdiode auf deinem Funduino Cube immer dann aufleuchten, wenn eine Bewegung detektiert wurde.
Im ersten Schritt wählen wir innerhalb von OpenRoberta die ROBOTERKONFIGURATION aus. Diese findest du im oberen Menü.
Anschließend navigieren wir in dem Menü auf der linken Bildschirmseite auf den Menüpunkt „Sensoren„.
In diesem Menüpunkt finden wir den Block für unseren Bewegungsmelder wieder.
Wie du es bereits aus den beiden ersten Lektionen gelernt hast, öffnet sich durch den Klick mit der linken Maustaste auf den Menüpunkt „Sensoren“ ein neues Untermenü.
Kannst du den Block für unseren Bewegungsmelder erkennen?
Toll gemacht!
Du findest den Block für den Bewegungsmelder an vierter Stelle.
Wir haben dir den Block auf der nachfolgenden Abbildung rot markiert.
Du kannst diesen Block, genauso wie alle anderen Blöcke in OpenRoberta auch, mit einem Klick mit der linken Maustaste anwählen und durch drücken der Maustaste in das weiße Feld ziehen.
Wenn du alles richtig gemacht hast, sollte deine ROBOTERKONFIGURATION jetzt so aussehen, wie du es in der Abbildung siehst.
Wir haben den Bewegungsmelder somit erfolgreich zu unserer Roboterkonfiguration hinzugefügt.
Jetzt fehlen noch zwei wichtige Schritte:
Zunächst müssen wir einen Namen für unseren Bewegungsmelder vergeben.
Den Namen kannst du eintragen, indem du auf das Feld, in dem aktuell noch „B“ steht, klickst.
Damit wir später den Überblick behalten können, tragen wir hier den Namen „Bewegungsmelder“ ein.
Jetzt müssen wir dem Mikrocontroller auf unserem Funduino Cube noch beibringen, an welchem digitalen Pin der Bewegungsmelder mit dem Mikrocontroller verbunden ist.
Schaue doch einmal auf deinen Funduino Cube und versuche herauszufinden, welchen digitalen Pin wir verwenden müssen.
Verfolge dazu die schwarze Linie auf dem Cube vom Bewegungsmelder bis zum Mikrocontroller.
Kennst du die Antwort?
Sehr gut!
Der Bewegungsmelder ist an Pin D8 mit dem Mikrocontroller verbunden.
Wir klicken also mit der linken Maustaste auf das Feld neben „output“ und wählen den Pin D8 aus.
Mit der Auswahl des Pins D8 haben wir die Einstellung des Blocks für den Bewegungsmelder erfolgreich abgeschlossen.
Wir erinnern uns jetzt an unsere Aufgabenstellung zurück:
Wir möchten das Signal des Bewegungsmelders auswerten, indem wir eine rote LED immer dann zum leuchten bringen, wenn der Bewegungsmelder eine Bewegung erfasst.
Deshalb ergänzen wir unsere ROBOTERKONFIGURATION um einen LED Block.
Wie du das machst, hast du in den vorherigen Anleitungen bereits gelernt. Falls du vergessen hast, wie das funktioniert, schaue dir die Lektion 1 noch einmal an.
Tipp: Du findest den Block für die LEDs unter dem Menü „Aktion“ auf der linken Bildschirmseite.
Hurra! Wir haben unsere Roboterkonfiguration abgeschlossen!
Nachdem wir die ROBOTERKONFIGURATION erfolgreich abgeschlossen haben, können wir uns an das Programm wagen.
Wir klicken hierfür zunächst auf den Menüpunkt „Programm“ am oberen Bildschirmrand.
Jetzt wird es kniffliger: Wir erinnern uns an die Aufgabenstellung zurück.
Teil der Aufgabe war es, eine rote LED immer dann zum Leuchten zu bringen, wenn eine Bewegung erkannt wird.
In Lektion 2 haben wir gelernt, welchen Block wir für eine „wenn-Bedingung“ benötigen.
Erinnerst du dich? Falls nicht, schaue dir die Inhalte aus Lektion 2 noch einmal genauer an.
Sehr schön!
Wir benötigen eine zusätzliche Anweisung. Diese Schleife finden wir mit einem Klick auf den Menüpunkt „Kontrolle“ am linken Bildschirmrand.
Damit wir die richtige Anweisung auswählen, müssen wir unsere Aufgabenstellung vielleicht noch einmal übersetzen.
„Wenn eine Bewegung erkannt wird, schalte die rote LED ein.
Sonst soll die rote LED nicht leuchten.„
Erkennst du, welche Anweisung wir benötigen?
Genau, wir verwenden die gleiche Anweisung, die wir auch schon in Lektion zwei kennengelernt haben. Diese „if-else-Bedingung“ („wenn-sonst-Bedingung“) fügen wir jetzt zu unserem Programm hinzu.
Dein Programm sollte jetzt so aussehen, wie in dieser Abbildung.
Jetzt fehlt in unserem Programm noch der Bewegungsmelder.
Den Block für den Bewegungsmelder findest du im linken Menü unter „Sensoren„.
In dem Untermenü von „Sensoren“ taucht jetzt der Block „Bewegungssensor HC-SR501“ auf, den wir bereits in unserer ROBOTERKONFIGURATION richtig eingestellt haben.
„Wenn eine Bewegung erkannt wird…“
Erkennst du, an welche Stelle im Programm wir diesen Block anfügen müssen?
Genau: wir fügen den Block rechts neben „wenn“ in unserer „if-else-Bedingung“ ein.
Den ersten Teil unserer Aufgabenstellung haben wir somit erfüllt.
Jetzt müssen wir nur noch die rote LED zu unserem Programm ergänzen.
Findest du den Block für die LED in OpenRoberta? Falls nicht, schaue dir noch einmal die Inhalte aus Lektion 2 an.
Tipp: den Block findest du im Menü auf der linken Seite unter „Aktion„.
„Wenn eine Bewegung erkannt wird, schalte die rote LED ein.
Sonst…“
Wir sind schon fast am Ziel! Wir müssen jetzt nur noch sicherstellen, dass die rote LED nicht mehr leuchtet, wenn keine Bewegung erkannt wird.
Dies gelingt uns, indem wir einen weiteren Block für die rote LED hinzufügen und in diesem Block „aus“ auswählen.
Gratulation! Wir machen große Fortschritte.
Lade dein Programm jetzt auf den Funduino All-In-One und schaue, ob alles funktioniert.
Frage: Wie müssten wir vorgehen, wenn wir erreichen möchten, dass immer eine rote LED leuchtet, sobald eine Bewegung erkannt wird und eine grüne LED leuchtet, wenn keine Bewegung erkannt wird?
In dieser Lektion möchten wir eine LED zum Leuchten bringen, sobald der Bewegungsmelder eine Bewegung erfasst. Zunächst werden wir die benötigten Variablen erstellen. Wirf einen Blick auf die Leiterbahn des Boards. Kannst du erkennen, an welchen Pins die LED und der Bewegungsmelder mit dem Funduino NANO verbunden sind?
Die LED ist mit dem Pin 12 verbunden und der Bewegungsmelder mit dem Pin 8.
Um den Wert des Bewegungsmelder zu speichern, erstellen wir eine zusätzliche Variable. Wir nennen diese „bewegungsmelder_status“ und weisen dieser den Wert 0 zu.
/* Variablen - Bauteile */
int modul_bewegungsmelder = 8;
int modul_led_rot = 12;
/* Variablen - Hilfe */
int bewegungsmelder_status = 0;
Jetzt starten wir mit dem Setup. Wenn der Bewegungsmelder eine Bewegung erkennt, verschickt dieser eine Spannung an den Arduino.
Deshalb kennzeichnen wir den Bewegungsmelder im pinMode-Befehl als Eingang (Input). Die LED bekommt Spannung vom Arduino, also bestimmen wir diesen im pinMode-Befehl als Ausgang (Output)
/* Variablen - Bauteile */
int modul_bewegungsmelder = 8;
int modul_led_rot = 12;
int bewegungsmelder_status = 0;
/* setup */
void setup()
{ // start setup
pinMode(modul_bewegungsmelder, INPUT);
pinMode(modul_led_rot, OUTPUT);
} // ende setup
In der Loop müssen wir zuerst den Wert des Bewegungsmelders erfassen und speichern. Hierfür verwenden wir den Befehl digitalRead. Dieser gibt entweder den Wert 1 zurück, wenn der Bewegungsmelder eine Bewegung erkennt, oder den Wert 0, wenn keine Bewegung erkannt wird. Dabei entspricht die Zahl 1 dem Zustand HIGH und die Zahl 0 dem Zustand LOW. Wir speichern diesen Wert in der Variablen „bewegungsmelder_Status“.
/* Variablen - Bauteile */
int modul_bewegungsmelder = 8;
int modul_led_rot = 12;
int bewegungsmelder_status = 0;
/* setup */
void setup()
{ // start setup
pinMode(modul_bewegungsmelder, INPUT);
pinMode(modul_led_rot, OUTPUT);
} // ende setup
void loop()
{ // start loop
bewegungsmelder_status = digitalRead(modul_bewegungsmelder);
} // ende loop
Die Variable „bewegungsmelder_status“ gibt nun Auskunft darüber, ob eine Bewegung erkannt wurde oder nicht. Daher können wir nun eine If-Abfrage verwenden, um dies zu überprüfen.
Habt ihr eine Idee, wie diese If-Abfrage aussehen sollte? Guckt euch die Aufgabenstellung nochmal genauer an.
Tipp: In Lektion zum Taster haben wir uns bereits mit einer ähnlichen Frage beschäftigt.
if (Bedingung) {
was soll passieren?
}
Zunächst passen wir die Bedingung an. Da die LED nur leuchten soll, wenn eine Bewegung erkannt wird, müssen wir eine entsprechende Überprüfung durchführen.
Die Überprüfung ist sehr ähnlich wie in der Lektion mit dem Taster. Wir überprüfen, ob der Wert der „bewegungsmelder_status“ gleich 1 ist. Die Zahl 1 steht dabei für das Signal HIGH.
Wir verwenden für die Abfrage zwei Gleichheitszeichen. Wisst ihr noch warum?
/* Variablen - Bauteile */
int modul_bewegungsmelder = 8;
int modul_led_rot = 12;
int bewegungsmelder_status = 0;
/* setup */
void setup()
{ // start setup
pinMode(modul_bewegungsmelder, INPUT);
pinMode(modul_led_rot, OUTPUT);
} // ende setup
void loop()
{ // start loop
bewegungsmelder_status = digitalRead(modul_bewegungsmelder);
if (bewegungsmelder_status == 1)
{ // start if
} // ende if
} // ende loop
Wir verwenden zwei Gleichheitszeichen, um Werte zu vergleichen. Mit einem Gleichheitszeichen weisen wir Werte zu.
Abschließend fügen wir hinzu, was der Arduino tun soll, wenn die Bedingung erfüllt ist. Zuerst schalten wir die LED mithilfe des digitalWrite-Befehls ein. Diese soll nun für fünf Sekunden leuchten. Hierfür verwenden wir den delay-Befehl. Anschließend schalten wir die LED mithilfe des digitalWrite-Befehls aus. Der Loop beginnt nun erneut von vorne und überprüft, ob eine Bewegung erkannt wird.
Ladet diesen Code jetzt auf den Arduino und guckt mal was passiert.
/* Variablen - Bauteile */
int modul_bewegungsmelder = 8;
int modul_led_rot = 12;
int bewegungsmelder_status = 0;
/* setup */
void setup()
{ // start setup
pinMode(modul_bewegungsmelder, INPUT);
pinMode(modul_led_rot, OUTPUT);
} // ende setup
void loop()
{ // start loop
bewegungsmelder_status = digitalRead(modul_bewegungsmelder);
if (bewegungsmelder_status == 1)
{ // start if
digitalWrite(modul_led_rot, HIGH);
delay(5000);
digitalWrite(modul_led_rot, LOW);
} // ende if
} // ende loop
Hier ist nochmal eine Zusammenfassung des Codes:
Wir erstellen zwei Variablen für die LED und den Bewegungsmelder des Cubes. Um den Wert des Bewegungsmelders zu speichern, erstellen wir noch eine weitere Variable. Im Setup legen wir wieder die Ein-und-Ausgänge mit dem pinMode-Befehl fest.
Im loop speichert der Arduino den aktuellen Wert des Bewegungsmelders in der Variable. Diese Variable wird in der If-Abfrage überprüft und wenn der Wert gleich 1 ist, dann lässt der Arduino die LED leuchten. Die Zahl 1 steht dabei für das Signal HIGH, also es ist Spannung vorhanden.
Jetzt könnt ihr das Programm selbst erweitern. Wäre es nicht cool, wenn die LED schneller blinkt?
/* Variablen - Bauteile */
int modul_bewegungsmelder = 8; // Bewegungsmelder an Pin D8
int modul_led_rot = 12; // LED Rot an Pin D12
int bewegungsmelder_status = 0; // Variable um den Bewegungsmelder Status zu speichern
/* setup */
void setup()
{ // start setup
pinMode(modul_bewegungsmelder, INPUT); // Der Bewegungsmelder ist ein Eingang
pinMode(modul_led_rot, OUTPUT); // Die LED Rot ist ein Ausgang
} // ende setup
void loop()
{ // start loop
bewegungsmelder_status = digitalRead(modul_bewegungsmelder); // Der Bewegungsmelder-Status wird gelesen und gespeichert
if (bewegungsmelder_status == 1) // Wenn eine Bewegung erkannt wurde...
{ // start if
digitalWrite(modul_led_rot, HIGH); // ...schalte LED Rot an (SIGNAL HIGH = 1)
delay(5000); // ...Warte fünf Sekunden...
digitalWrite(modul_led_rot, LOW); // ...und schalte die LED wieder aus (Signal LOW = 0)
} // ende if
} // ende loop
Falls du Unterstützung bei der Verwendung deines Funduino Cubes benötigen solltest, steht dir unser kompetentes Support Team jederzeit gerne zur Verfügung!
Du erreichst uns am Besten per Mail unter info@funduino.de oder von Montags bis Freitags, zwischen 09:00 und 17:00 Uhr unter der Rufnummer (+49) 5921 9704030.