Bislang haben wir mit unserem Funduino Cube Signale ausgewertet , die direkt von Bauteilen auf der Platine ausgehen. Wir haben mit unserem Bewegungsmelder eine kleine Alarmanlage und mit unserem Ultraschallsensor einen Abstandswarner gebaut.
Es wird also höchste Zeit, dass wir uns Signalen zuwenden, die von außerhalb auf unseres Funduino Cube übermittelt werden. Hierzu verwenden wir den VS1838B Infrarotsensor auf unserem Funduino Cube und die Funduino Fernbedienung.
Mit dem Umgang der Fernbedienung bist du im Umgang mit dem Fernseher aus deinen heimischen vier Wänden sicherlich bestens vertraut. Aber wie wertet ein Fernseher eigentlich aus, dass sich zum Beispiel auf Knopfdruck die Lautstärke erhöht, verringert oder sogar gänzlich stummschaltet?
Die Aufgabenstellung in dieser Lektion lautet: lasse dir im Seriellen Monitor deines OpenRoberta Connectors ausgeben, welches Signal an deinem Funduino Cube anliegt, wenn du auf der Funduino Fernbedienung die Taste „1“ drückst.
Wir starten mit der ROBOTERKONFIGURATION unseres Funduino Cubes.
Den Block für unseren VS1838B Infrarotsensor findest du unter „Sensoren„.
Nachdem du den Menüpunkt „Sensoren“ mit einem Linksklick geöffnet hast, wählst du den Block für den Infrarotsensor aus.
Den Block ziehst du mit der linken Maustaste in deine ROBOTERKONFIGURATION.
Deine ROBOTERKONFIGURATION sollte jetzt so aussehen, wie in der Abbildung Schritt 3 dargestellt.
Vergib jetzt einen Namen für diesen Block. Wir nennen unseren Block „Infrarotsensor„.
Anschließend wählen wir den Pin aus, an dem der VS1838B Infrarotsensor mit dem Funduino Cube verbunden ist. Es handelt sich hierbei um den Pin D2.
Wenn du alles richtig gemacht hast, sieht deine ROBOTERKONFIGURATION jetzt aus wie in Abbildung Schritt 4 dargestellt.
Herzlichen Glückwunsch!
Die ROBOTERKONFIGURATION ist mit diesem letzten Schritt bereits abgeschlossen.
Nachdem wir die ROBOTERKONFIGURATION erfolgreich abgeschlossen haben, schreiben wir jetzt das PROGRAMM für den VS1838B Infrarotsensor.
Wir beginnen mit der Ausgabe im Seriellen Monitor.
Zur Erinnerung: Wir möchten im Seriellen Monitor auslesen können, welcher Zahlenwert sich hinter dem Tastendruck der Taste „1“ auf unserer Funduino Fernbedienung verbirgt.
Den Baustein für die Ausgabe des Zahlenwertes im Seriellen Monitor deines OpenRoberta Connectors findest du unter „Aktion„.
Ziehe den Block mit der linken Maustaste in dein PROGRAMM.
Du wirst feststellen, dass der Baustein in der Grundkonfiguration bereits die Ausgabe „Hallo“ enthält. Diese Ausgabe ist in dem Block grün hinterlegt.
Wir benötigen diesen Block für die Lösung unserer Aufgabenstellung nicht. Deshalb markieren wir den Block mit der linken Maustaste und löschen Ihn mit der „ENTF-Taste“ auf deiner Tastatur.
Dein PROGRAMM sieht jetzt so aus wie in Abbildung Schritt 4 dargestellt.
Jetzt müssen wir den Baustein für den VS1838B Infrarotsensor ergänzen.
Den Baustein für den VS1838B Infrarotsensor findest du in dem erweiterten Menü deines PROGRAMMS.
Zum erweiterten Menü gelangst du, indem du auf „☆2“ klickst.
Im Menüpunkt „Sensoren“ ist der Baustein für den VS1838B Infrarotsensor etwas versteckt.
Wenn du den Baustein gefunden hast, kannst du diesen mit einem Klick der linken Maustaste in dein Programm ziehen.
Den Block für den VS1838B Infrarotsensor fügen wir jetzt an die Stelle in unserem PROGRAMM ein, an der wir zuvor den Block „Hallo“ gelöscht haben.
Wenn du alles richtig gemacht hast, sieht dein PROGRAMM jetzt so aus wie in Abbildung Schritt 7 dargestellt.
Jetzt erinnern wir uns für einen kurzen Augenblick an die anfänglichen Lektionen zurück.
Dabei haben wir gelernt, dass Mikrocontroller, so wie du Ihn zum Beispiel auch auf deinem Funduino Cube findest, Programme in einer sehr hohen Geschwindigkeit auslesen.
Da wir in unserem PROGRAMM eine Ausgabe im Seriellen Monitor planen, würde die Ausgabe der Daten in einer rasanten Geschwindigkeit erfolgen – so schnell, dass wir Menschen Schwierigkeiten hätten, diese Daten auszuwerten.
Deshalb möchten wir unser Programm um eine Pause nach jeder Abfrage erweitern.
Den Block für die Pause kennst du bereits aus den früheren Lektionen.
Den Baustein findest du im linken Menü unter „Kontrolle“ und „Warten„.
Füge auch diesen Block zu deinem PROGRAMM hinzu.
Gratulation!
Wir haben unser Programm dem Schritt Nummer 8 erfolgreich abgeschlossen.
Dein Programm sieht jetzt so aus, wie in Abbildung Schritt 9 zu sehen.
Höchste Zeit also, unser Programm auf den Funduino Cube zu laden und den Seriellen Monitor zu öffnen.
Tipp: Den Seriellen Monitor erreichst du, indem du dein OpenRoberta Connector Software öffnest.
Jetzt müssen wir nur noch die Funduino Fernbedienung auf den VS1838B Infrarotsensor richten und die Taste „1“ drücken.
Welcher Zahlenwert wird bei dir ausgegeben?
Vergleiche den Zahlenwert mit deinem Sitznachbarn.
Kannst du dein Programm so erweitern, dass eine LED leuchtet, wenn du die Taste auf der Fernbedienung drückst? Dabei könnte dir eine Kontrollstruktur helfen wie in der Anleitung zum Bewegungsmelder.
Um den Infrarot Empfänger ansteuern zu können, brauchen wir wieder eine externe Bibliothek. Diese heißt „IRremote.h“.
Wir verwenden also wieder den Ausdruck #include und schreiben „IRremote.h“
in spitzen Klammern dahinter.
#include
Jetzt erstellen wir zwei Variablen. In der ersten Variable soll der Pin des Infrarot-Empfängers gespeichert werden. Dieser ist mit dem Pin 2 des Mikrocontrollers verbunden. In der zweiten Variable sollen die empfangenen Werte des Infrarot-Empfängers gespeichert werden. Die Werte werden in dem Datentyp „decode_results“ gespeichert. Der Datentyp stammt aus der Bibliothek und übersetzt die empfangenen Werte in Zahlen.
/* Bibliotheken */
#include
/* Variablen */
int modul_infrarotSensor = 2;
decode_results werte;
Anschließend vervollständigen wir die Einrichtung des Infrarot-Empfängers mit dem Befehl „IRrecv“, welcher ebenfalls aus der Bibliothek stammt. Dieser Befehl ermöglicht es dem Infrarot-Empfänger, Infrarot-Signale zu erkennen und zu verarbeiten. Nach dem Befehl benenn wir den Sensor und geben in der Klammer die Variable für den Pin des Empfängers an.
/* Bibliotheken */
#include
/* Variablen */
int modul_infrarotSensor = 2;
decode_results werte;
IRrecv infrarotEmpfaenger(modul_infrarotSensor);
Im Setup legen wir zuerst die sogenannte Baudrate fest. Mit der Baudrate bestimmen wir die Kommunikationsgeschwindigkeit zwischen dem Mikrocontroller auf dem Funduino Cube und dem Computer. Damit die Kommunikation erfolgen von, legen wir als Übertragungsgeschwindigkeit den Standardwert 9600 fest. Hierfür verwenden wir den Ausdruck „Serial.begin(9600);“
Anschließend aktivieren wir den Infrarotempfänger. Dies erfolgt dem Befehl „.enableIRIn()“. Achtung, die beiden Großbuchstaben „i“ könnte man mit dem kleinen „L“ verwechseln. Erst mit der Aktivierung ist der Infrarot-Empfänger auf unserem Funduino Cube in der Lage, Infrarot-Signale zu empfangen!
/* Bibliotheken */
#include
/* Variablen */
int modul_infrarotSensor = 2;
decode_results werte;
IRrecv infrarotEmpfaenger(modul_infrarotSensor);
/* Setup */
void setup()
{ // start setup
Serial.begin(9600);
infrarotEmpfaenger.enableIRIn();
} // ende setup
Die Aufgabenstellung sieht vor, dass wir das Signal im Seriellen Monitor ausgeben sollen, wenn die Taste „1“ auf der Fernbedienung gedrückt wird. Deshalb verwenden wir die If-Abfrage.
/* Bibliotheken */
#include
/* Variablen */
int modul_infrarotSensor = 2;
decode_results werte;
IRrecv infrarotEmpfaenger(modul_infrarotSensor);
/* Setup */
void setup()
{ // start setup
Serial.begin(9600);
infrarotEmpfaenger.enableIRIn();
} // ende setup
void loop()
{
if ()
{
}
{
Immer wenn auf der Fernbedienung eine Taste gedrückt wird, soll diese auf dem seriellen Monitor ausgegeben werden. Dafür gibt es mit „.decode(Variable)“ bereits einen passenden Befehl in der Bibliothek. Der „Decode Befehl“ übersetzt das Infrarotsignal in Werte. Wenn das Übersetzten erfolgreich war, also ein passender Wert für das Infrarotsignal in der Bibliothek gefunden wurde, gilt die Bedingung als erfüllt und ein entsprechender Zahlenwert wird in der Variable „werte“ gespeichert. Hinweis: In der Klammer müsst ihr vor der Variable „Werte“ ein &-Zeichen angeben. Dieses Zeichen sorgt dafür, dass der „übersetzte“ Wert des Infrarotsignals in der Variable gespeichert wird. Die komplette Codezeile kannst du Abbildung Schritt 7 entnehmen.
/* Bibliotheken */
#include
/* Variablen */
int modul_infrarotSensor = 2;
decode_results werte;
IRrecv infrarotEmpfaenger(modul_infrarotSensor);
/* Setup */
void setup()
{ // start setup
Serial.begin(9600);
infrarotEmpfaenger.enableIRIn();
} // ende setup
void loop()
{
if (infrarotEmpfaenger.decode(werte)
{
}
}
Nachdem wir die Bedingung unserer if-Abfrage festgelegt haben, können wir uns um die Ausgabe der Zahlenwerte im seriellen Monitor kümmern. Dafür verwenden wir den Ausdruck „Serial.println(„Was soll ausgegeben werden?“)“. Der Text in der Klammer wird dabei auf dem seriellen Monitor ausgegeben. Das kann ein einfacher Text sein, wobei dieser dann in „Anführungszeichen“ stehen muss, oder auch der Wert aus einer Variable. Im folgenden Beispiel würde am Seriellen Monitor also der Text „Hallo Welt“ erscheinen, sobald an der Fernbedienung eine Taste gedrückt wurde.
/* Bibliotheken */
#include
/* Variablen */
int modul_infrarotSensor = 2;
decode_results werte;
IRrecv infrarotEmpfaenger(modul_infrarotSensor);
/* Setup */
void setup()
{ // start setup
Serial.begin(9600);
infrarotEmpfaenger.enableIRIn();
} // ende setup
/* loop */
void loop()
{ // start loop
if (infrarot.Empfaenger.decode(&werte))
{ // start if
Serial.println("Hallo Welt!");
} // ende if
} // ende loop
Um die Aufgabenstellung dieser Lektion zu lösen, starten wir in der if-Abfrage zunächst mit dem Befehl
„Serial.println()“ und ergänzen in der Klammer die Variable „werte“.
Achtung, der vorletzte Buchstabe von println ist der kleingeschriebene Buchstabe „L“.
Außerdem ergänzen wir die Variable noch um den Befehl „.value, DEC“. Hiermit werden die Werte als Dezimalzahl auf dem seriellen Monitor ausgegeben. Abschließend teilen wir dem Infrarot-Empfänger noch mit, dass er auf ein neues Signal warten soll. Das machen wir mit dem Befehl „.resume“. Auch dieser stammt aus der Bibliothek.
/* Bibliotheken */
#include
/* Variablen */
int modul_infrarotSensor = 2;
decode_results werte;
IRrecv infrarotEmpfaenger(modul_infrarotSensor);
/* Setup */
void setup()
{ // start setup
Serial.begin(9600);
infrarotEmpfaenger.enableIRIn();
} // ende setup
/* loop */
void loop()
{ // start loop
if (infrarotEmpfaenger.decode(&werte))
{ // start if
Serial.println(werte.value, DEC);
infrarotEmpfaenger.resume();
} // ende if
} // ende loop
Jetzt, da unsere Bedingung erfüllt ist, können wir die Werte auf dem seriellen Monitor ausgeben. Dafür gibt es den Befehl Serial.println(„Was soll ausgegeben werden?“). Alles in der Klammer wird dabei auf dem seriellen Monitor ausgegeben. Das kann ein einfacher Text sein, wobei dieser dann in „Anführungszeichen“ stehen muss, aber auch Variablen. Testet doch beide Varianten einmal aus.
/* Bibliotheken */
#include
/* Variablen */
int modul_infrarotSensor = 2;
decode_results werte;
IRrecv infrarotEmpfaenger(modul_infrarotSensor);
/* Setup */
void setup()
{ // start setup
Serial.begin(9600);
infrarotEmpfaenger.enableIRIn();
} // ende setup
/* loop */
void loop()
{ // start loop
if (infrarotEmpfaenger.decode(&werte))
{ // start if
Serial.println("hallo Welt!");
} // 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.