Minule jsme si představili senzor DHT-11, který je sice velmi oblíbený, ale zároveň ne moc přesný, proto se dnes podíváme na jeho vylepšenou verzi, tedy na senzor DHT-22. Senzor DHT-22 má tyto vlastnosti:
- Rozsah měření vlhkosti: 0% – 100% s přesností 2-5%
- Rozsah měření teplot od -40 °C do 80°C s přesností 0.5°C
- Pracovní napětí: 3,3 – 6V
- Počet pinů: 4
- Typ výstupu: digitální
Nyní se podíváme jak senzor správně připojit, aby v Arduinu fungoval. Senzor má celkem čtyři piny, používají se ale jen tři a ten čtvrtý tam v tuto chvíli žádnou úlohu nemá. Když se na čidlo podíváte zepředu, tak zleva je to pin pro napájení z 5V Arduina, vedle jsou data, která se připojují k digitálnímu pinu Arduina, třetí pin je volný, tedy se nepoužívá a čtvrtý pin je uzemnění. Velmi často se ale mezi data a napájení 5V dává odpor. Na některých fórech říkají, že se tam má dávat odpor, který má 4700 ohmů, někde uvádějí 10 000 ohmů. Já zvolil 10 000 ohmů a funguje senzor naprosto v pořádku. Pravděpodobně se tím řiďte, kdyby ale někomu s tímto odporem ukazoval senzor jiné hodnoty, anebo pokud by někdo používal pro správné zapojení jiný odpor, dejte nám prosím vědět do diskuse pod článkem, váš poznatek nám jistě pomůže a rozšíříme o něj tento článek.
Všechny senzory mají ale jednu nevýhodu. Pro jejich práci je zapotřebí použít nějakou knihovnu, kterou již někdo jiný napsal, tedy za předpokladu, že se sami nechcete psát s veškerým kódem, který slouží pro ovládání konkrétního senzoru. My vám tuto knihovnu dáme k dispozici, protože jich existuje celá řada, každý si jí vytváří trochu jinak a z toho kvanta všech knihoven jsme našli jednu, která funguje naprosto perfektně, a proto se s vámi o ni podělíme.
- Odkaz na stažení knihovny: DHT-sensor-library
Tuto knihovnu budete muset importovat do Arduina IDE, dělá se to ale velmi jednoduše. Nahoře v IDE zvolíte Projekt/import knihovny/přidat knihovnu a vyberete tento stažený soubor. Tím se provede instalace a již lze knihovnu používat. Pro použití je ale opět zapotřebí zvolit Projekt/import knihovny/ze seznamu vybrat DHT sensor library. Tím se automaticky vytvoří ve vašem kódu první řádek, který vypadá takto:
#include <DHT.h>
Ten nemažte, je tam zapotřebí, protože přidává knihovnu na práci s čidlem DHT a odvíjí se od toho funkce.
Budeme teď definovat několik věcí a to konkrétně ty, které jsou zapotřebí pro správný chod čidla, další řádky tedy ještě před funkcí setup budou vypadat takto:
#define DHTPIN 50
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
Ten první řádek říká, že digitální pin, ke kterému je senzor DHT připojen je 50, to si každý zvolí sám a podle sebe. Druhou definicí říkáme, že senzor, se kterým se bude pracovat je DHT-22. Třetí řádek pak vytvoří třídu DHT, se kterou budeme pracovat. Zde je ale ještě zapotřebí říci, že ten kód, který je výše napsaný, vám bude fungovat jen na pomalých deskách, jakou je například UNO, protože jejich rychlost je jen 16 MHz. Pokud budete pro tento experiment používat rychlejší desku, jakou je třeba DUE, tak ten poslední řádek bude potřebovat ještě jeden parametr:
DHT dht(DHTPIN, DHTTYPE, 30);
Pokud bychom na rychlejší desce nedali třetí parametr, všechny informace by skončily chybou a my bychom nic nenačetli. Nyní se tedy podíváme na funkci setup(), ve které budeme používat sériovou linku z předchozího dílu a použijeme i další část kódu z knihovny DHT. Obsah funkce setup() bude vypadat tedy jen a pouze takto:
Serial.begin(9600);
dht.begin();
V podstatě jen začneme sériovou komunikaci a načteme senzor DHT. Teď pokročíme dále k funkci loop(), která tentokrát začne dost netradičně. První kód v ní totiž bude čekání 2 vteřiny, což jsme předtím nikdy nedělali. Je to z toho důvodu, že čidlo není příliš rychlé, zato je přesné. A není možné z něj číst informace rychleji než jednou za dvě vteřiny. Méně přesný bratříček DHT-11 dokáže informace podávat každých půl vteřiny, avšak data, která podává, nejsou tak přesná. Kód funkce loop()
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Chyba čtení z DHT senzoru!");
return;
}
Serial.print("Vlhkost: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Teplota: ");
Serial.print(t);
Serial.print(" *C ");
Serial.println();
Tento kód tedy vyčká dvě vteřiny, pak ze senzoru načte vlhkost a teplotu, a pokud je načte správně, vytiskne je přes sériový port. Pokud je nenačte správně, vše skončí chybou a na sériovém monitoru se ukáže hláška „Chyba čtení z DHT senzoru“.
Toto je tedy vše, co je zapotřebí k tomu, aby se četla data ze senzoru DHT-22. Pokud by někdo potřeboval radu, diskuse pod článkem je k tomuto účelu otevřena.