Inhaltsverzeichnis

12.1. DHT11 Luftfeuchtigkeits- und Temperatursensor

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

12.1.1. Konfiguration in OpenRoberta

Schritt 1:

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„. 

Abbildung Schritt 1

Schritt 2:

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.

Abbildung Schritt 2

Schritt 3:

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

Abbildung Schritt 3

12.1.2. Beispielprogramm in OpenRoberta

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. 

Schritt 1:

Im ersten Schritt ergänzen wir unser PROGRAMM um eine Variable. Wir klicken hierfür auf das helle „+ Zeichen“ links neben „Start„. 

Abbildung Schritt 1

Schritt 2:

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. 

Abbildung Schritt 2

Schritt 3:

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„. 

Abbildung Schritt

Schritt 4:

Wenn du alles richtig gemacht hast, sieht dein PROGRAMM jetzt so aus wie in Abbildung Schritt 4 dargestellt. 

Abbildung Schritt 4

Schritt 5:

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„. 

Abbildung Schritt 5

Schritt 6:

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. 

Abbildung Schritt 6

Schritt 7:

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„.

Abbildung Schritt 7

Schritt 8:

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. 

Abbildung Schritt 8

Schritt 9:

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!

Abbildung Schritt 9

Schritt 10:

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.

Abbildung Schritt 10

Schritt 11:

„… 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.

Abbildung Schritt 11

Schritt 12:

„…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.

Abbildung Schritt 12

12.1.3. Programmcode in der Arduino Synthax

				
					#include <DHT_sensor_library/DHT.h> // Einbinden der <DHT_sensor_library> und <DHT> Bibliothek

double Temperatur; // Festlegen der Variable als Double
#define DHTPINDHT11 2 
#define DHTTYPE DHT11
DHT _dht_DHT11(DHTPINDHT11, DHTTYPE);

int led_Gruen = 10; // LED Grün an Pin D10
int led_Rot = 12; // LED Rot an Pin D12

void setup()
{
    _dht_DHT11.begin(); 
    pinMode(led_Gruen, OUTPUT); // Die LED Grün ist ein Ausgang
    pinMode(led_Rot, OUTPUT); // Die LED Grün ist ein Ausgang
    Temperatur = 0; // Der Grundwert der Variable "Temperatur" beträgt 0
}

void loop()
{
    Temperatur = _dht_DHT11.readHumidity();

    if ( Temperatur < 25 ) { // Wenn die Temperatur kleiner als 25°C beträgt...
        digitalWrite(led_Gruen, HIGH); // ... schalte die LED Grün ein...
        
    } else { // ...ansonsten...
        digitalWrite(led_Gruen, LOW); // ... schalte die LED Grün aus...
        digitalWrite(led_Rot, HIGH); // ... und die LED Rot ein
    }
}