🌑️

DHT22 Sensor

Projekt I01 - Temperatur & Luftfeuchtigkeit messen

Intermediate
DHT22
1-Wire
1
Lernziele

Was du lernst

  • DHT-Protokoll - Digitale Sensoren mit eigenem Timing verstehen
  • Bibliotheken nutzen - Die DHT.h Library einbinden und verwenden
  • Datenformatierung - Messwerte formatiert ausgeben
  • float-Variablen - Dezimalzahlen speichern und verarbeiten

Voraussetzungen

Beginner-Projekte B01-B08 abgeschlossen, Grundlagen der seriellen Kommunikation bekannt

Komponenten

Was du brauchst

🌑️

DHT22 Sensor

Digitaler Sensor fuer Temperatur und relative Luftfeuchtigkeit. Liefert kalibrierte Werte ueber ein eigenes Protokoll.

Messbereich: -40 bis +80 Grad C, 0-100% RH

Genauigkeit: +/- 0.5 Grad C, +/- 2-5% RH

πŸ“Œ

DHT22 Pinbelegung

  • Pin 1 (VCC) - Versorgung 3.3V-5V
  • Pin 2 (SDA/DATA) - Datenleitung
  • Pin 3 - Nicht belegt (NC)
  • Pin 4 (GND) - Masse

Hinweis: In Wokwi hat der DHT22 nur 3 Pins (VCC, SDA, GND)

DHT22 vs DHT11

Der DHT22 ist genauer (+/- 0.5 Grad C statt +/- 2 Grad C) und hat einen groesseren Messbereich als der guenstigere DHT11.

2
Theorie

Das 1-Wire Protokoll

Wie funktioniert es?

  • Kommunikation ueber eine einzelne Datenleitung
  • Bidirektional: Arduino sendet Startimpuls, Sensor antwortet
  • Timing-basiert: Signallaengen kodieren 0 und 1
  • 40 Bit Daten pro Abfrage (16 Bit Feuchte + 16 Bit Temp + 8 Bit Checksum)

Timing-Anforderungen

Der DHT22 benoetigt mindestens 2 Sekunden zwischen Messungen fuer stabile Werte.

Timing-Diagramm

Arduino         DHT22
   β”‚               β”‚
   │──── START ───→│  (18ms LOW)
   β”‚               β”‚
   │←── RESPONSE ──│  (80us LOW + 80us HIGH)
   β”‚               β”‚
   │←── 40 BITS ───│  (Bit 0: 26-28us HIGH)
   β”‚               β”‚  (Bit 1: 70us HIGH)
   β”‚               β”‚
   β–Ό               β–Ό
            

Genauigkeit: +/- 0.5 Grad C

Aufloesung: 0.1 Grad C / 0.1% RH

Schaltplan

Verbindungen zum Arduino

Wokwi-Aufbau

    Arduino Uno           DHT22
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”
   β”‚           β”‚        β”‚ β”Œβ”€β”€β”€β” β”‚
   β”‚  5V ──────┼────────┼──VCCβ”‚ β”‚
   β”‚           β”‚        β”‚ β””β”€β”€β”€β”˜ β”‚
   β”‚  Pin 7 ───┼────────┼──SDAβ”‚ β”‚
   β”‚           β”‚        β”‚ β””β”€β”€β”€β”˜ β”‚
   β”‚  GND ─────┼────────┼──GNDβ”‚ β”‚
   β”‚           β”‚        β”‚ β””β”€β”€β”€β”˜ β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”˜
            

Wichtige Verbindungen

  • DHT22 VCC β†’ Arduino 5V
  • DHT22 SDA β†’ Arduino Pin 7
  • DHT22 GND β†’ Arduino GND

Pull-Up Widerstand

Bei echter Hardware: 10k Ohm zwischen SDA und VCC. In Wokwi nicht noetig - der interne Pull-Up reicht.

3
Code

Schritt 1: Library einbinden

// Schritt 1: DHT-Library einbinden

#include <DHT.h>

// Sensor-Konfiguration
#define DHT_PIN 7        // Datenpin
#define DHT_TYPE DHT22   // Sensortyp

// DHT-Objekt erstellen
DHT dht(DHT_PIN, DHT_TYPE);

void setup() {
  // Wird gleich gefuellt...
}

void loop() {
  // Wird gleich gefuellt...
}

Erklaerung

  • #include <DHT.h> - Bindet die Bibliothek ein
  • #define - Konstanten fuer Pin und Typ
  • DHT dht(...) - Erstellt das Sensor-Objekt

Warum Libraries?

Die DHT-Library kuemmert sich um das komplizierte Timing-Protokoll. Du kannst einfach readTemperature() aufrufen!

3
Code

Schritt 2: Setup

// Schritt 2: Setup-Funktion

#include <DHT.h>

#define DHT_PIN 7
#define DHT_TYPE DHT22

DHT dht(DHT_PIN, DHT_TYPE);

void setup() {
  Serial.begin(9600);      // Serielle Kommunikation starten
  dht.begin();              // DHT-Sensor initialisieren

  Serial.println("DHT22 Temperatur & Feuchtigkeit");
  Serial.println("------------------------------");
}

void loop() {
  // Kommt im naechsten Schritt...
}

Was passiert im Setup?

Serial.begin(9600) startet die serielle Ausgabe. dht.begin() initialisiert den Sensor und konfiguriert den Pin.

3
Code

Schritt 3: Loop mit Fehlerpruefung

void loop() {
  // DHT22 braucht min. 2 Sekunden zwischen Messungen
  delay(2000);

  // Messwerte lesen (float = Dezimalzahl)
  float temp = dht.readTemperature();
  float hum = dht.readHumidity();

  // Pruefen ob Messung erfolgreich
  if (isnan(temp) || isnan(hum)) {
    Serial.println("Fehler beim Lesen des DHT22!");
    return;  // Loop abbrechen, neu starten
  }

  // Ausgabe der Messwerte
  Serial.print("Temperatur: ");
  Serial.print(temp, 1);  // 1 Dezimalstelle
  Serial.print(" C | Feuchtigkeit: ");
  Serial.print(hum, 1);
  Serial.println(" %");
}

float-Variablen

Speichern Dezimalzahlen wie 23.5 oder 65.8. Serial.print(temp, 1) gibt eine Nachkommastelle aus.

isnan() Pruefung

"Is Not A Number" - prueft ob die Messung fehlgeschlagen ist. Wichtig fuer robuste Programme!

Ausprobieren

Simulation in Wokwi

Wokwi Projekt

Erstelle ein neues Projekt mit Arduino Uno und DHT22:

So testest du

  • Fuege einen DHT22 hinzu (Suche: "dht22")
  • Verbinde: VCC β†’ 5V, SDA β†’ Pin 7, GND β†’ GND
  • Kopiere den Code in die sketch.ino
  • Klicke auf Play - im Serial Monitor erscheinen die Werte
  • Tipp: Klicke auf den DHT22 um Temperatur/Feuchte zu aendern!
4
Challenges

Erweiterungen

Probiere diese Aufgaben aus

🌑️

Challenge 1: Hitzewarnung

LED an Pin 8 leuchtet bei Temperatur ueber 30 Grad C

❄️

Challenge 2: Temperatur-Ampel

3 LEDs: Blau (kalt <18 Grad), Gruen (optimal 18-25 Grad), Rot (warm >25 Grad)

πŸ“Š

Challenge 3: Min/Max Speicher

Speichere die hoechste und niedrigste gemessene Temperatur

πŸ”Š

Challenge 4: Feuchte-Alarm

Buzzer piept wenn Luftfeuchtigkeit unter 30% oder ueber 70% faellt

🌑️

Geschafft!

Du hast deinen ersten Umweltsensor programmiert

πŸ“š

DHT.h Library

Externe Bibliotheken eingebunden

πŸ”’

float-Variablen

Dezimalzahlen verarbeitet

⚠️

Fehlerpruefung

isnan() fuer robuste Programme

Naechstes Projekt

I02: Ultraschall-Entfernungsmesser - Distanzen messen mit dem HC-SR04

← β†’
1 / 11