Teploměry (analogové a digitální), které byly popsány v předchozí části kurzu, jsou zdaleka nejčastěji používanými senzory pro měření atmosférických podmínek.
Druhým, neméně oblíbeným tématem je měření vlhkosti, které umožňuje přístroj DHT-11!
Objednejte si sadu prvků a začněte se učit v praxi! Kliknutím sem přejdete do obchodu >>
Co je to měření vlhkosti?
V souvislosti s Arduino se velmi často objevuje téma senzorů vlhkosti. Většina příruček však opomíjí informace o tom, „co se vlastně měří“.
Senzor DHT-11 popsaný v tomto článku měří relativní vlhkost, která se zkráceně označuje jako RH. Tato hodnota je vždy mezi 0 a 1 a nemá vlastní jednotku. Z tohoto důvodu se relativní vlhkost obvykle vyjadřuje v %RH – tj. uvádí se procentuální hodnota od 0 do 100 %, kde 0 %RH znamená suchý vzduch a 100 %RH vzduch s maximální koncentrací vodní páry.
Zjednodušeně řečeno, relativní vlhkost udává obsah vody ve vzduchu.
Když tato hodnota dosáhne 100 %, voda se uvolňuje ve formě kapek.
Pokud dáváte přednost „akademičtějším“ definicím, odkazuji vás na tyto stránky. Wikipediakde najdete následující: „Relativní vlhkost je procentuální poměr mezi okamžitým tlakem vodní páry a tlakem její nasycené páry (při teplotě vzduchu) nad čistým a rovným vodním povrchem.“
Při řešení výše popsaného tématu je třeba mít na paměti, že množství vody, které může vzduch absorbovat, závisí mimo jiné také na jeho teplotě. Pokud se změní hodnota teploměru, změní se i hodnota %RH. Připomínáme, že ke kondenzaci vody může dojít, pokud: přidáme do vzduchu chybějící množství vody nebo pokud snížíme jeho teplotu. Abych teorii nepřeháněl, odkazuji zájemce na nadpisy Mollierův diagram (pozor, protože vypadá hrozně) a rosný bod. Nyní je čas přejít k praxi!
Hotové sady pro kurzy Forbot
Komponenty pro cvičení z kurzu Arduino (úroveň 2) jsou k dispozici jako hotové sady! Patří sem programovatelné diody, analogové a digitální teploměry, 7-segmentové displeje a senzor pohybu (PIR).
Senzor DHT-11 v praxi
Naše testy provedeme s oblíbeným digitálním čidlem DHT-11, které v jednom pouzdře kombinuje teploměr a čidlo vlhkosti. Informace ze snímače lze vyčíst prostřednictvím 1-Wire rozhraní. Na mnoha místech najdete informaci, že tento senzor používá 1-Wire (známý např. z probíraných senzorů DS18B20) – to není pravda!
Senzory DHT-11 používají upravenou verzi rozhraní 1-Wire,
která není s tímto standardem kompatibilní!
Z modrého krytu vystupují čtyři kabely, ale používají se pouze tři z nich. Výstup označený NC (zkratka pro Not Connected) nemá žádnou důležitou funkci a nemusí být nikam připojen. Nejdůležitější parametry senzoru:
- Obecné informace:
– Napájecí napětí: 3 V až 5,5 V (v našem případě 5 V)
– Spotřeba proudu: 0,2 mA
– Vzorkovací frekvence: 1 Hz (nové informace lze načítat každou sekundu) - Vestavěný teploměr
– Rozsah měření: 0 – 50 °C
– Přesnost: ±2 °C - Snímač vlhkosti:
– Rozsah měření: 20 – 95%RH
– Přesnost ±5%RH
Další informace o DHT-11
lze nalézt v jeho dokumentaci.
Bohužel je pravděpodobné, že na trhu jsou k dispozici různé verze tohoto snímače, které mohou mít různé rozsahy měření. Naštěstí výrobci často tisknou nejdůležitější informace na zadní stranu krytu DHT-11. V mém případě to vypadalo takto:
Když už jsme u toho krytu, stojí za to podívat se dovnitř – i když bych doporučoval opatrnost při jeho otevírání. Níže přikládám fotografie příkladu, aby každý nemusel svůj snímač demontovat.
Existuje mnoho „různých verzí vnitřku“. – některé snímače mohou uvnitř vypadat úplně jinak. Je třeba věřit výrobcům, že všechny verze fungují správně.
Obvod měří teplotu v rozmezí 0 až 50 °C, a je proto ideální pro monitorování místností. Tato verze snímače není vhodná pro venkovní použití, kde lze očekávat teploty pod bodem mrazu.
Větší rozsah měření se vyznačuje tím, že
dvojité senzory DHT-21 a DHT-22, které jsou 3-4krát dražší.
Připojení senzoru DHT-11 k Arduino
Senzor DHT-11 používá podobné rozhraní 1-Wire, takže připojení je velmi jednoduché. Nejprve napájejte 5V a GND, pak připojte datovou linku k Arduino (např. na pin 2).
Stejně jako v předchozí části kurzu je nutné přidat rezistor 4,7k,
který připojuje datovou linku ke kladné sběrnici.
Příklad takového spojení je vidět na fotografii níže:
Komunikace s DHT-11
Na internetu samozřejmě existuje alespoň několik hotových knihoven, které použití tohoto senzoru usnadňují. Ve svých projektech raději používám velmi jednoduchou knihovnu od Marka Ruyse. Potřebné soubory jsou k dispozici na GitHub autora.
Knihovna dokáže nezávisle rozpoznat a spravovat i další senzory tohoto typu (např.: DHT22, AM2302, RHT03).
Po instalaci knihovny (postup popsaný v předchozích částech kurzu) můžete začít psát svůj první program. Začneme prázdnou kostrou s přiloženým hlavičkovým souborem knihovny, definicí pinů a probíhající komunikací přes UART:
#include "DHT.h"
#define DHT11_PIN 2
void setup()
{
Serial.begin(9600);
}
void loop()
{
}
V dalším kroku je třeba deklarovat senzor a sdělit knihovně, na kterém pinu má probíhat komunikace:
#include "DHT.h"
#define DHT11_PIN 2
DHT dht;
void setup()
{
Serial.begin(9600);
dht.setup(DHT11_PIN);
}
void loop()
{
}
Čtení vlhkosti a teploty z přístroje DHT-11
Nyní můžete v hlavní smyčce přejít k naměřeným hodnotám. Zde budou užitečné dvě funkce. První slouží k získání vlhkosti v %RH: dht.getHumidity() a druhý ke zjištění teploty ve °C: dht.getTemperature().
Program v nejjednodušší podobě vypadá takto:
#include "DHT.h"
#define DHT11_PIN 2
DHT dht;
void setup()
{
Serial.begin(9600);
dht.setup(DHT11_PIN);
}
void loop()
{
//Stažení informací o vlhkosti
int vlhkost = dht.getHumidity();
Serial.print(vlhkost);
Serial.print("%RH | ");
//Stažení informací o teplotě
int teplota = dht.getTemperature();
Serial.print(teplota);
Serial.println("*C");
delay(1000); //Vyčkání požadovaného času
}
Následující animace ukazuje, jak program funguje v praxi. Senzor potřebuje poměrně dlouhou dobu, než zaznamená změnu vlhkosti a teploty – může to trvat 6 až 15 sekund (obvykle kolem 10). Další informace naleznete v katalogové poznámce.
Následující animace ukazuje chování senzoru, když na něj dýchnete:
Bohužel se někdy mohou vyskytnout problémy s komunikací nebo jiné chyby. V tomto případě se na displeji zobrazí teplota a vlhkost 0. Knihovna, kterou používáme, obsahuje několik zajímavých funkcí, které těmto problémům zabraňují.
Zaprvé není nutné zadávat „pevný“ čas, po kterém by mělo dojít k dalšímu odečtu. Pomocí funkce dht.getMinimumSamplingPeriod() lze získat informace o čekací době při použití konkrétního senzoru.
Za druhé lze pomocí funkce dht.getStatusString() zkontrolovat, zda byla měření načtena bez chyb. V takovém případě vrátí výše uvedená funkce hodnotu „OK“. V případě chyby obdržíme odpovídající zprávu, např. „TIMEOUT“.
S výše uvedenými funkcemi může program vypadat takto:
#include "DHT.h"
#define DHT11_PIN 2
DHT dht;
void setup()
{
Serial.begin(9600);
dht.setup(DHT11_PIN);
}
void loop()
{
// Stažení informací o vlhkosti
int vlhkost = dht.getHumidity();
{ // Stažení informací o teplotě
int teplota = dht.getTemperature();
if (dht.getStatusString() == "OK") {
Serial.print("vlhkost");
Serial.print("%RH | ");
Serial.print(teplota);
Serial.println("*C");
}
/ / Vyčkání požadovaného času
delay(dht.getMinimumSamplingPeriod());
}
Od této chvíle se již nebudou zobrazovat žádné další informace, pokud došlo k chybě. Příklad fungování tohoto programu je uveden níže. Selhání senzoru bylo simulováno odpojením kabelu, který spojuje DHT-11 s Arduino.
Nakonec bychom se měli zmínit o poslední funkci přidané do naší knihovny, která převádí teplotu na stupnici Fahrenheita: dht.toFahrenheit(). V praxi by vaše volání v našem případě vypadalo takto:
Serial.print(dht.toFahrenheit(teplota));
Serial.println("F");
Funkčnost revidovaného programu:
Shrnutí
Jak vidíte výše, senzor DHT-11 se velmi snadno používá, takže celý tento článek nemusel být dlouhý. S poznatky z tohoto a předchozího článku bych vás rád povzbudil ke stavbě jednoduché meteorologické stanice. Toto zařízení dokáže měřit teplotu, vlhkost a oblačnost (pomocí fotorezistoru). Výsledky lze zobrazit například na počítači nebo na sérii programovatelných diod.
V příštím díle se podíváme na funkci millis(), která nám umožňuje vytvářet prodlevy, které nepřerušují celý program. Vytvoříme praktický projekt inteligentního osvětlení. Kombinací prvků z předchozích částí vytvoříme obvod, který usnadní pohyb ve tmě!
Objednejte si sadu prvků a začněte se učit v praxi! Kliknutím sem přejdete do obchodu >>
Přílohy
DHT11 (pdf, 842 KB)
Dokumentace senzoru DHT-11