V minulém díle jsme načali sériový monitor a dnes se na něm pokusíme zobrazit první data z čidla. Čidlo, které budeme pro náš pokus používat má označení DHT-11. Tento typ čidla je velmi oblíbený, protože měří teplotu a vlhkost.
Čidel je pro Arduino celá řada, většina z nich ale potřebuje své vlastní knihovny, které se naštěstí dají stáhnout na mnoha různých webových stránkách, nicméně knihovnu pro dnešní díl jsme si pro vás připravili my. To z toho důvodu, abyste dělali se stejnou knihovnou, protože některé se liší funkcemi či volání funkcí a také proto, že tuto jsme otestovali a je plně funkční.
- Odkaz ke stažení knihovny: DHT-sensor-library
Knihovny se importují přímo v IDE Arduina. Nahoře v IDE tedy zvolíte z lišty Projekt/import knihovny/přidat knihovnu a vyberete stažený soubor. Pokud byste importovali knihovnu z jiného webu, dbejte na to, aby byla ve formátu .ZIP. Jiný formát Arduino IDE neumí, a tak import není možný.
Čidlo se připojuje velmi jednoduše. Má čtyři piny, ze kterých se používají jen tři. Když se tedy na čidlo podíváte z přední strany, tak od leva jsou to piny pro napájení z 5V, vedle něj pin pro data, třetí pin je neobsazený a poslední, tedy čtvrtý je uzemnění. Ten se tedy připojuje do místa, kde má Arduino GND.
Tedy první pin čidla se připojí na Arduino do místa označené jako 5V, data do některého z digitálních pinů a GND na GND Arduina. Tímto je připojení tedy hotovo a můžete si jej také prohlídnout na fotografiích.
Nyní se ale pustíme do programování. Jako první tedy budeme muset přidat knihovnu pro čidlo DHT a definovat několik vlastností. Tyto první řádky budou umístěny ještě před funkcí loop() či setup(). Je tedy vhodné je umístit hned na začátek souboru.
#include <DHT.h>
#define DHTPIN 50
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
Pokud budete používat desku Arduino, která je rychlejší, jako je třeba DUE, tak je zapotřebí poslední řádek trochu změnit a to na tento
DHT dht(DHTPIN, DHTTYPE, 30);
Je to z toho důvodu, že deska DUE má rychlejší čip a pokud se tato změna neprovede, budete získávat špatná data ze senzoru, či dokonce žádné nezískáte. Nyní už jen naplníme funkci setup() dvěma řádky, které zahájí sériovou komunikaci a načtou senzor DHT.
Serial.begin(9600);
dht.begin();
Po tomto už jen vypíšeme hodnoty ze senzoru do sériového monitoru. Následující řádky budou umístěny ve funkci loop()
delay(500);
int h = dht.readHumidity();
int 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();
Procedura začíná sice trochu netradičně, nicméně první čekání je zapotřebí k načtení dat z čidla. Pokud bychom se rozhodli, že data z čidla budeme číst rychleji, buď odpověď nezískáme anebo data budou špatná. Z tohoto důvodu se vyplatí si na data počkat. Čidlo DHT-11 sice moc přesné není, v teplotě měří s přesností na dva stupně celsia a ve vlhkosti může být rozdíl až 10%. Nicméně pro základní a rychlé údaje je více než dostačující. Ale i přes to se v příštím díle podíváme na čidlo DHT-22, které je skoro stejné, jako toto, jen je o dost přesnější.