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.