Temperatur- und Luftfeuchtesensor DHT11





Der Temperatur und Luftfeuchtesensor DHT 11 (gibt's hier) liefert uns seine "fertigen" Daten über einen eindrahtigen Bus.
Außer einem (Pullup-) Widerstand von 2K...10K benötigt er keine weiteren Bauelemente.

Es gibt fertige Befehls-Bibliotheken, die ihn für uns sehr leicht nutzbar machen.

1. Hol Dir diese Bibliothek (die zip-Datei) von dieser Seite!
2. Erzeuge einen Ordner "libraries" in deinem Sketch-Ordner (falls Du noch keinen "libraries"-Ordner dort hast)!
3. Entpacke die heruntergeladene zip-Datei, benenne den entpackten Ordner "DHT" und schieb ihn nach "libraries"
4. Starte Deine Arduino-Software neu!

Ach ja: genauso gut kannst Du einen DHT22 (gibt's hier) nehmen. Der kostet zwar etwa doppelt soviel, ist dafür aber auf 1/2 Grad Celsius genau.


Schaltung:
Baue folgende Schaltung auf:



    n.c. bedeutet: not connected (nichts angeschlossen)


Experiment 1:
Arduino holt sich die Werte vom DHT11 und gibt sie auf dem Seriellen Monitor aus.



// Temperatur und Luftfeuchtigkeitssensor DHT11
//
// DHT11, wenn Du auf das "Gitter" schaust, ist links Pin1
//
// Pin 1: +5V ("power")
// Pin 2: Datenausgang ("data" bzw. DHTPIN)
// Pin 3: nichts angeschlossen
// Pin 4: GND
// 2K oder 5K oder 10K Widerstand von Pin 2 (data) nach Pin 1 (power)


#include "DHT.h" //von ladyada: https://github.com/adafruit/DHT-sensor-library

#define DHTPIN 2     // benutzter ARDUINO-Pin

#define DHTTYPE DHT11   // unser Sensor: DHT11

DHT dht(DHTPIN, DHTTYPE);


void setup()
{
  Serial.begin(9600);
  dht.begin();
}


void loop()
{
  // Das Erfassen von Temperatur und Luftfeuchtigkeit benoetigt ca. 250 Millisekunden.
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Check, ob die Daten Zahlen sind, falls nicht (NaN: not a number), ist was falsch gelaufen!
  if (isnan(t) || isnan(h)) {
    Serial.println("Fehler beim Lesen vom DHT-Sensor");
  } else {
    //t = t - 1.00; //Diese Korrektur war bei mir noetig
    Serial.print("Feuchtigkeit: ");
    Serial.print(h);
    Serial.print(" %\t   ");
    Serial.print("Temperatur: ");
    Serial.print(t);
    Serial.println(" Grad Celsius");
  }
}




Ein aufgestecktes LCD ist auch nicht schlecht:

Experiment 2:
Arduino holt sich die Werte vom DHT11 und gibt sie auf einem LCD und dem Seriellen Monitor aus.



#include "DHT.h" //von ladyada: https://github.com/adafruit/DHT-sensor-library
#define DHTPIN 15     // benutzter ARDUINO-Pin (Analog-Pin 1)

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7); // diese Pins werden benutzt

#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("DHT11-Test");
 
  lcd.clear();      // LCD löschen
  lcd.begin(16, 2); // verfügbare Spalten und Zeilen
  
  dht.begin();
}

void loop() {
  // Das Erfassen von Temperatur und Luftfeuchtigkeit benoetigt ca. 250 Millisekunden.
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Check, ob die Daten Zahlen sind, falls nicht (NaN: not a number), ist was falsch gelaufen!
  if (isnan(t) || isnan(h))
  {
    Serial.println("Fehler beim Lesen vom DHT-Sensor");
  }
  else
  {
         
    Serial.print("Feuchtigkeit: ");
    Serial.print(h);
    Serial.print(" %\t   ");
    Serial.print("Temperatur: ");
    Serial.print(t);
    Serial.println(" Grad Celsius");
   
    lcd.setCursor(0,0);     
    lcd.print("Feuchtigk.:");
    lcd.print(h);
     lcd.setCursor(0,1);     
    lcd.print("Temperatur:");
    lcd.print(t);
   
  }
}

.