Skip to main content

Návod na zprovoznění senzoru DHT22 a DHT11.

Senzory z řady DHT11/22 umožňují měřit teplotu a vlhkost. Senzory DHT jsou vyrobeny ze dvou částí, kapacitního čidla vlhkosti a termistoru . Uvnitř je čip, který provádí analogově-digitální převod a posílá digitální signál s teplotou a vlhkostí. Digitální signál je docela snadno čitelný pomocí jakéhokoli mikrokontroléru.

DHT11

  • Cena je přijatelná
  • Napájení 3 až 5 V.
  • Maximální proud 2,5 mA při převodu (při požadavku na data)
  • Dobré pro hodnoty 20–80% vlhkosti s přesností 5%
  • Dobré pro hodnoty teploty 0-50 ° C s přesností ± 2 ° C
  • Ne více než 1 Hz vzorkovací frekvence (jednou za sekundu)
  • Velikost těla 15,5 mm x 12 mm x 5,5 mm

DHT22

  • Cena je přijatelná
  • Napájení 3 až 5 V.
  • Maximální proud 2,5 mA při převodu (při požadavku na data)
  • Dobré pro měření 0-100% vlhkosti s přesností 2-5%
  • Dobré pro hodnoty teploty -40 až 80 ° C s přesností ± 0,5 ° C
  • Ne více než 0,5 Hz vzorkovací frekvence (jednou za 2 sekundy)
  • Velikost těla 15,1 mm x 25 mm x 7,7 mm

DHT11 je levnější ale má menší přesnost, takže se hodí pro testování a pokusy. DHT22 už je přesnější ale dražší. Oba mají nevýhodu v odběru proudu, když senzor nic nedělá, tak přesto odebírá docela hodně a tak se hodí tam, kde počítáte, že bude požit u projektu, kde arduino uno poběží bez spánku.

Zapojení senzoru.

Na obrázku je DHT22, ale DHT11 má totožné zapojení. Je tedy potřeba zapojit 3 vodiče a jeden odpor pull-up. Je tedy potřeba propojit VCC s napětím 5V a GND neboli zem propojit ze zemí. Datový vodič který je znázorněn na obrázku žlutě, propojíme s pinem 8, ale můžeme vybrat i jiný digitální pin.

Programování senzoru teploty a vlhkosti.

Je ještě potřeba stáhnou knihovnu pro práci se senzorem.

// Senzor DHT22/11

// připojení knihovny DHT
#include "DHT.h"
// nastavení čísla pinu s připojeným DHT senzorem
#define pinDHT 8

// odkomentování vyberete typ senzoru, který chcete použít.
#define typDHT11 DHT11     // DHT 11
//#define typDHT22 DHT22   // DHT 22 (AM2302)

// inicializace DHT senzoru s nastaveným pinem a typem senzoru
DHT mojeDHT(pinDHT, typDHT11);

void setup() {
  // komunikace přes sériovou linku rychlostí 9600 baud
  Serial.begin(9600); 
  // zapnutí komunikace s teploměrem DHT
  mojeDHT.begin();
}

void loop() {
  // pomocí funkcí readTemperature a readHumidity načteme
  // do proměnných tep a vlh informace o teplotě a vlhkosti,
  // čtení trvá cca 250 ms
  float teplota = mojeDHT.readTemperature();
  float vlhkost = mojeDHT.readHumidity();
  // kontrola, jestli jsou načtené hodnoty čísla pomocí funkce isnan
  if (isnan(tep) || isnan(vlh)) {
    // při chybném čtení vypiš hlášku
    Serial.println("Chyba při čtení z DHT senzoru!");
  } else {
    // pokud jsou hodnoty v pořádku,
    // vypiš je po sériové lince
    Serial.print("Teplota: "); 
    Serial.print(teplota);
    Serial.print("°C ");
    Serial.print("vlhkost: "); 
    Serial.print(vlhkost);
    Serial.println("  %");
  }
  // pauza pro přehlednější výpis
  delay(2000);
}

Na seriál monitoru by se mělo ukazovat teplota a vlhkost, jestli ale ukazuje nan, tak to znamená, že veličina nebyla naměřená. Jedná se o chybu která může být třeba způsobena, že špatně zastrčeným rezistor. V kódu je to ošetřené funkcí isnan, který provede to, že se chyba nezapíše.