In den vergangenen Lektionen haben wir gelernt, dass Sensoren einzigartige Funktionen einnehmen können. Mit einem Ultraschallsensor können wir zum Beispiel den Abstand eines Objektes messen, mit einem Infrarotsensor ein eingehendes Infrarotsignal erkennen.
In dieser Lektion möchten wir uns mit einem Sensor beschäftigen, der gleich zwei wichtige Funktionen vereint: Mit dem DHT11 Sensor können wir die Luftfeuchtigkeit und die Temperatur in unserem Raum messen und auswerten.
Dieser Sensortyp wird häufig in der Industrie eingesetzt. Besonders häufig findet man diese Sensoren in Maschinen wieder, bei denen eine bestimmte Luftfeuchtigkeit oder Temperatur eingehalten werden muss, damit ein Werkstück mit einer sehr guten Qualität produziert werden kann.
Fast immer werden Sensoren auch bei der Lagerung von Lebensmitteln eingesetzt. Versuche dir doch einmal vorzustellen, wie die Milch beim morgendlichen Frühstück schmecken würde, wenn Sie bis zum Verzehr nicht gekühlt werden würde. Eines können wir dir versichern: Lecker wäre das nicht!
Und weil die Temperaturüberwachung genau deshalb für uns alle so wichtig ist, möchten wir uns in dieser Aufgabenstellung eine Temperatur-Überwachung bauen. Die Aufgabenstellung in dieser Lektion lautet daher:
Wenn die Temperatur in unserem Raum weniger als 25°C beträgt, soll die grüne LED auf unserem Funduino Cube leuchten.
Ansonsten soll die rote LED auf unserem Funduino Cube leuchten.
Wir starten wie üblich mit unserer ROBOTERKONFIGURATION.
Zuerst ergänzen wir den Block für den Lufteuchtigkeits- und Temperatursensor DHT11.
Du findest diesen Block unter dem Punkt „Sensoren„.
Anschließend vergeben wir einen Namen für diesen Block. In unserem Beispiel heißt dieser Block ab sofort „DHT11„.
Danach wählen wir den Pin aus, an dem der DHT11 mit dem Mikrocontroller auf unserem Funduino Cube verbunden ist.
Schaue auf deinen Funduino Cube und lies ab, an welchem Pin die Datenübertragung stattfindet.
Genau, die Datenübertragung findet an Pin A3 statt!
Die Aufgabenstellung sieht vor, dass wir in Abhängigkeit der Umgebungstemperatur entweder eine grüne oder eine rote LED zum leuchten bringen.
In unserer ROBOTERKONFIGURATION ergänzen wir deshalb die beiden Leuchtdioden.
Mit diesem letzten Schritt ist die ROBOTERKONFIGURATION erfolgreich abgeschlossen. Wir wechseln jetzt in das PROGRAMM.
In der Lektion 11 haben wir gelernt, welchen Sinn und Zweck Variablen bei der Programmierung erfüllen. Falls du nicht mehr genau wissen solltest, was Variablen sind und wofür wir diese verwenden, schaue dir die Lektion noch einmal an.
Im ersten Schritt ergänzen wir unser PROGRAMM um eine Variable. Wir klicken hierfür auf das helle „+ Zeichen“ links neben „Start„.
Anschließend vergeben wir einen Namen für unsere Variable.
Da wir mit dem DHT11 Sensor die Temperatur messen möchten, wählen wir den Namen „Temperatur“ aus.
Die Temperatur wird als Zahlenwert erfasst. Deshalb wird unsere Variable als „Zahl“ definiert. Der Startwert beträgt 0.
Die Konfiguration der Variable ist mit diesem Schritt abgeschlossen.
Nachdem wir die Grundkonfiguration der Variable vorgenommen haben, müssen wir diese Variable noch mit den Temperaturdaten des DHT11 füllen.
Hierfür ergänzen wir den Block „Schreibe Temperatur“ aus dem Menü auf der linken Seite unter „Variablen„.
Wenn du alles richtig gemacht hast, sieht dein PROGRAMM jetzt so aus wie in Abbildung Schritt 4 dargestellt.
An unseren Block „Schreibe Temperatur“ möchten wir jetzt noch einen Befehl zum Auslesen der Temperatur am DHT11 ergänzen.
Den Baustein findest du im erweiterten Menü (☆2) unter „Sensoren„.
Aber Achtung: In den Grundeinstellungen sieht der Block vor, dass die Lufteuchtigkeit ausgelesen wird.
Für die Lösung unserer Aufgabenstellung müssen wir also eine Änderung vornehmen. Wir klicken hierfür in den Block auf „Luftfeuchtigkeit“ und wählen die „Temperatur“ aus.
Mit diesem Schritt haben wir eine Variable mit dem Namen „Temperatur“ angelegt und diese mit den Temperatur-Messwerten des DHT11 befüllt.
Jetzt ist ein guter Zeitpunkt, um uns die Aufgabenstellung noch einmal genau anzusehen:
„Wenn die Temperatur in unserem Raum weniger als 25°C beträgt, soll die grüne LED auf unserem Funduino Cube leuchten.
Ansonsten soll die rote LED auf unserem Funduino Cube leuchten. „
„Wenn… ansonsten…“ – Dieses Ausdruck kennen wir bereits aus den vorherigen Lektionen.
Die Aufgabenstellung sieht vor, dass wir auf Grundlage der gemessenen Temperatur entweder die grüne LED oder die rote LED leuchten lassen.
Zur Lösung dieser Aufgabe benötigen wir also einen „wenn…mache…sonst“-Block, eine sogenannte „if-else-Bedingung„.
Nachdem wir diese Bedingung zu unserem PROGRAMM hinzugefügt haben, sehen wir uns den ersten Teil Aufgabenstellung erneut genau an.
„Wenn die Temperatur in unserem Raum weniger als 25°C beträgt…“
Das ist schön und gut, aber wie stellen wir das fest?
An dieser Stelle hilft uns erneut ein Logikbaustein, der sogenannte Operator. Auch diesen Baustein kennst du aus den vorherigen Lektionen.
Wir fügen diesen Block zu unserem PROGRAMM hinzu. Der Block wird dabei an das „wenn“ unserer „if-Bedingung“ geheftet.
Anschließend benötigen wir den Temperaturwert unseres DHT11.
Diesen haben wir in den ersten Schritten der Lektion bereits in einer Variable gespeichert.
Wir navigieren also in das Menü auf der linken Seite und wählen unter „Variablen“ den Block unserer Variable für die „Temperatur“ aus.
Dieser Block wird in die linke Seite unseres Operators eingefügt.
„Wenn die Temperatur in unserem Raum…“
Toll gemacht, der erste Teil unserer Aufgabenstellung ist damit erfüllt!
„Wenn die Temperatur in unserem Raum weniger…“
Sobald die Temperatur kleiner als 25°C beträgt, soll eine Aktion erfolgen. In unserem Operator-Block wählen wir jetzt anstelle des Gleichzeichens das „< (kleiner)“ Symbol aus.
„… weniger als 25°C beträgt…“
Im nächsten Schritt legen wir also den Wert fest, bei dem die Aktion erfolgen soll. In der Aufgabenstellung wird hierbei 25°C vorgegeben.
Wir ergänzen den Operator-Block auf der rechten Seite jetzt also durch einen Mathematik-Baustein. Diesen Baustein kennst du ebenfalls aus den vorherigen Lektionen.
Du findest diesen Baustein unter „Mathematik„. In Abbildung Schritt 11 kannst du entnehmen, wie dein PROGRAMM zum jetzigen Zeitpunkt aussehen sollte.
„…soll die grüne LED auf unserem Funduino Cube leuchten.
Ansonsten soll die rote LED auf unserem Funduino Cube leuchten. „
Diesen Schritt kennen wir ebenfalls. Wir müssen unseren Aufbau also lediglich um die Blöcke für die beiden Leuchtdioden ergänzen.
Gratulation!
Mit diesem letzten Schritt haben wir die Aufgabenstellung erfolgreich abgeschlossen.
Lade das PROGRAMM jetzt auf deinen Funduino Cube hoch und beobachte deinen Funduino Cube.
Was passiert, wenn du deine Hand für einige Sekunden auf den DHT11 legst?
Frage:
In den vorherigen Lektionen haben wir bereits gelernt, wie wir uns Werte im Seriellen Monitor des OpenRoberta Connectors anzeigen lassen können. Lasse dir die Temperaturwerte doch einmal ausgeben und stelle fest, wie warm es in deinem Raum gerade ist.
Damit wir die Daten des DHT11 Sensors mit dem Mikrocontroller auf unserem Funduino Cube verarbeiten können, fügen wir im ersten Schritt eine Bibliothek zu unserem Programmcode hinzu.
Hierfür navigieren wir innerhalb der Arduino IDE über die Menüpunkte Sketch > Bibliothek einbinden > Bibliotheken verwalten. Mit dem Klick auf den Menüpunkt „Bibliotheken verwalten“ öffnet sich ein neues Untermenü. Dort geben wir in die Suchleiste den Begriff „DHT sensor library“ ein.
In den Suchergebnissen solltest du jetzt den Eintrag „DHT sensor library“ von „Adafruit“ sehen können. Klicke auf die Schaltfläche „Installieren“ um die Bibliothek zu deiner Arduino IDE hinzuzufügen.
/* Bibliothek */
#include
Nachdem wir die Bibliothek erfolgreich zu unserer Arduino IDE installiert haben, fügen wir diese über die Programmzeile „#include <DHT.h>“ zu unserem Programm hinzu.
Anschließend legen wir die Variablen für die beiden LEDs fest. Die grüne LED ist mit dem Pin D10 und die rote LED mit dem Pin D12 des Mikrocontrollers verbunden.
/* Bibliothek */
#include
/* Variablen */
int modul_led_gruen = 10;
int modul_led_rot = 12;
Jetzt müssen wir nur noch den DHT11 Temperatur- und Luftfeuchtigkeitssensor zu unserem Programm hinzufügen. Dies erfolgt über die Programmzeile „DHT dht11(A3, DHT11)“.
Bei dem ersten Teil der Programmzeile „DHT“ handelt es sich um ein sogenanntes Objekt, also um einen Funktionsbaustein aus der Bibliothek „DHT.h“. Dieser Funktionsbaustein ermöglicht es uns, auf Inhalte aus der Bibliothek zuzugreifen.
Im zweiten Teil legen wir den Namen für unseren DHT11-Sensor fest. Dieser Name wird im weiteren Programmablauf benötigt.
Der erste Ausdruck in der Klammer „A3“ legt fest, an welchem Pin der DHT11-Sensor mit dem Mikrocontroller auf unserem Funduino Cube verbunden ist. Diese Information können wir direkt von unserem Funduino Cube ablesen.
Der zweite Ausdruck in der Klammer „DHT11“ definiert, um welchen Sensortypen aus der DHT-Baureihe es sich bei unserem DHT11-Sensor handelt.
Neben dem DHT11 gibt es noch einen zweiten Sensor, der vergleichbare Funktionen erfüllt. Dieser Sensor trägt den Namen DHT22. Da es sich bei dem DHT-Sensoren um einen Sensor des Typs „DHT11“ handelt, tragen wir in unsere Programmzeile auch den Ausdruck „DHT11“ ein.
/* Bibliothek */
#include
/* Variablen */
int modul_led_gruen = 10;
int modul_led_rot = 12;
DHT dht11(A3, DHT11);
float temperatur = 0;
Im vierten Schritt ergänzen wir eine weitere Variable. In dieser Variable möchten wir den Temperaturwert speichern. Diese Variable hilft uns später dabei, die Leuchtdioden auf unserem Funduino Cube passend zur Temperatur ein- oder auszuschalten.
Unser DHT11-Sensor kann Temperaturen sehr genau messen. Die Temperaturen werden dabei bis zur zweiten Nachkommastelle genau erfasst. Eine Zahl mit einem Komma (z.B. 20,31 °C) wird auch Fließkommazahl genannt.
Aus der Definition der Variablen für unsere Leuchtdioden kennst du bereits den Datentyp Integer. Ein Integer ist immer eine ganze Zahl, also z.B. 10 oder 12.
Mit dem Datentyp „float„ können wir, anders als beim Integer, Fließkommazahlen erfasst. Das Wort float bedeutet zu Deutsch „fließen“ – passend zur Fließkommazahl. Erst einmal ganz logisch, oder?
/* Bibliothek */
#include
/* Variablen */
int modul_led_gruen = 10;
int modul_led_rot = 12;
DHT dht11(A3, DHT11);
float temperatur = 0;
Im Setup-Teil unseres Programmcodes müssen wir den dem Mikrocontroller zunächst mitteilen, dass Daten des DHT11-Sensors erwartet werden. Diesen Vorgang kennst du bereits von unserem OLED aus Lektion 11. Wir setzen dies mit dem Befehl „ dht.begin()“ um. Anschließend legen wir die grüne und die rote Leuchtdiode als Ausgang fest.
/* Bibliothek */
#include
/* Variablen */
int modul_led_gruen = 10;
int modul_led_rot = 12;
DHT dht11(A3, DHT11);
float temperatur = 0;
/* setup */
void setup()
{ // start setup
dht11.begin();
pinMode(modul_led_gruen, OUTPUT);
pinMode(modul_led_rot, OUTPUT);
} // ende setup
/* loop */
void loop()
{ // start loop
temperatur = dht11.readTemperature();
}
Im Loop-Teil speichern wir zuerst die Temperatur in die Variable „temperatur“ ab. Dafür verwenden wir den Befehl „ dht11.readTemperature()“ (deutsch: lese Temperatur) aus der Bibliothek „ DHT.h“. Die Aufgabenstellung dieser Lektion sieht vor, dass die grüne Leuchtdiode aufleuchten soll, wenn die Raumtemperatur weniger als 25°C beträgt. Ansonsten soll die rote Leuchtdiode auf unserem Funduino Cube aufleuchten. Hast du eine Idee, wie wir diese Vorgabe umsetzen können?
/* Bibliothek */
#include
/* Variablen */
int modul_led_gruen = 10;
int modul_led_rot = 12;
DHT dht11(A3, DHT11);
float temperatur = 0;
/* setup */
void setup()
{ // start setup
dht11.begin();
pinMode(modul_led_gruen, OUTPUT);
pinMode(modul_led_rot, OUTPUT);
} // ende setup
/* loop */
void loop()
{ // start loop
temperatur = dht11.readTemperature();
}
Um überprüfen zu können, wann welche LED aufleuchten soll, verwenden wir wieder eine If-Else-Abfrage.
Wir erinnern uns an die Aufgabenstellung: Wenn die Temperatur kälter als 25°C ist, soll die grüne LED
aufleuchten und die rote Leuchtdiode ausgeschaltet sein.
Ansonsten möchten wir die rote LED ein- und die grüne LED ausschalten.
Wir entnehmen dieser Aufgabenstellung zunächst den Schwellenwert 25°C bzw. den Zahlenwert 25. Sobald
dieser Zahlenwert unterschritten wird, schalten wir die rote Leuchtdiode aus und die grüne Leuchtdiode ein.
Wenn der Zahlenwert überschritten wird (else…), schalten wir die grüne Leuchtdiode aus und die rote
Leuchtdiode ein.
Anschließend ergänzen wir unseren Programmcode um eine Pause von 2 Sekunden (2000ms). Diese kurze Pause benötigt der DHT11-Sensor zur Erfassung eines neuen Messwertes.
#include // Einbinden der und Bibliothek
int modul_led_gruen = 10; // LED Gruen an Pin D10
int modul_led_rot = 12; // LED Rot an Pin D12
DHT dht11(A3, DHT11); // DHT11 wird erstellt
float temperatur = 0; // Festlegen der Variable als float mit dem Startwert 0
void setup()
{ // start setup
dht11.begin(); // Der DHT wird "gestartet"
pinMode(modul_led_gruen, OUTPUT); // Die LED Gruen ist ein Ausgang
pinMode(modul_led_rot, OUTPUT); // Die LED Gruen ist ein Ausgang
} // ende setup
void loop()
{ // start loop
temperatur = dht11.readTemperature(); // Die Variable temperatur bekommt den Wert vom dht11
if (temperatur < 25) // Wenn die Temperatur kleiner als 25C betraegt...
{ // start if
digitalWrite(modul_led_rot, LOW); // ...schalte die LED Rot aus...
digitalWrite(modul_led_gruen, HIGH); // ...schalte die LED Gruen ein...
} // ende if
else // ...ansonsten...
{ // start else
digitalWrite(modul_led_gruen, LOW); // ...schalte die LED Gruen aus...
digitalWrite(modul_led_rot, HIGH); // ...und die LED Rot ein
} // ende else
delay(2000); // Wartezeit
} // 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.