Teploměr a vlhkoměr DHT12 je vstupní modul pro Arduino. Tento modul obsahuje novější senzor DHT12, který je nástupce oblíbeného modulu DHT11. Tato novější verze komunikuje po sběrnici I2C a díky jejím vlastnostem ji můžeme zařadit někde mezi senzory DHT11 a DHT22.
Rozsah měření teploty je -20 až +60 °C s přesností ± 0,5°C. Vlhkost lze měřit v rozsahu 20-95 % RH (relativní vlhkost) s přesností ±5 % RH. A pro napájení je možné použít napětí v rozsahu 2,7-5,5 Voltu.
Pro úspěšné propojení modulu DHT12 a Arduino desky stačí zapojit celkem 4 vodiče. Propojíme „+“ s 5V Arduina, SDA s pinem A4, „-“ se zemí Arduina a SCL s pinem A5. Pro piny SDA a SCL musíme vybrat vždy vyhrazené I2C piny na námi vybrané desce, u Arduino UNO jsou to právě piny A4 a A5.
Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu DHT, návod, jak na to, je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven a inicializaci modulu z knihovny.
V podprogramu setup provedeme v prvním kroku zahájení komunikace po sériové lince a následně načteme stav připojeného senzoru do proměnné. Tento stav v dalším kroku zkontrolujeme, jestli je vše v pořádku. Pokud ano, vypíšeme informaci po sériové lince a pokračujeme dále. Pokud se objeví nějaká chyba, vypíšeme o ní detaily po sériové lince.
Nekonečná smyčka loop začíná vyčtením všech údajů ze senzoru. Tyto údaje můžeme poté načíst do samostatných proměnných, kdy údaje o teplotě a vlhkosti je ještě nutné podělit 10, abychom získali správné hodnoty. Po načtení údajů provedeme následně jejich vytištění po sériové lince a po pauze 5 sekund se smyčka loop opakuje.
// Teplotní senzor DHT12 // připojení potřebných knihoven #include <Wire.h> #include <dht.h> // inicializace modulu z knihovny, // 0x5c je I2C adresa modulu dht12 DHT(0x5c); void setup() { // zahájení komunikace po sériové lince // rychlostí 9600 baud Serial.begin(9600); // načtení stavu připojeného senzoru do proměnné dht::ReadStatus chk = DHT.read(); // kontrola, jestli je senzor připojen v pořádku // a vytištění výsledku po sériové lince if (chk == dht::OK) { Serial.println("DHT12 OK."); } else { Serial.print("Chyba pripojeni senzoru DHT12: "); Serial.println(chk); } } void loop() { // vyčtení údajů ze senzoru DHT.read(); // načtení všech údajů ze senzoru // do proměnných, teplotu a vlhkost // je nutné vydělit 10.0 pro // získání výsledku s desetinnými místy float teplota = DHT.getTemperature() / 10.0; float vlhkost = DHT.getHumidity() / 10.0; float rosnyBod = DHT.dewPoint(); // vytištění údajů po sériové lince Serial.print("DHT12 Teplota: "); Serial.print(teplota); Serial.print("stC, vlhkost: "); Serial.print(vlhkost); Serial.print("%RH, rosny bod: "); Serial.print(rosnyBod); Serial.println("stC."); // pauza před novým měřením delay(5000); }
Po nahrání ukázkového kódu do Arduino desky s připojeným modulem DHT12 dostaneme například tento výsledek:
DHT12 OK. DHT12 Teplota: 23.60stC, vlhkost: 36.50%RH, rosny bod: 7.85stC. DHT12 Teplota: 23.60stC, vlhkost: 36.50%RH, rosny bod: 7.85stC. DHT12 Teplota: 23.50stC, vlhkost: 36.60%RH, rosny bod: 7.80stC. DHT12 Teplota: 23.50stC, vlhkost: 36.70%RH, rosny bod: 7.84stC. DHT12 Teplota: 23.50stC, vlhkost: 36.70%RH, rosny bod: 7.84stC.
Teploměr a vlhkoměr DHT12 je zajímavý vstupní modul pro Arduino. Je to nástupce starší generace DHT11 a DHT22, kdy ho díky jeho parametrům můžeme zařadit mezi dva zmíněné. Hodí se do všech projektů, kde potřebujeme měřit teplotu a vlhkost s rozumnou přesností, jako například domácí meteostanice, bezdrátová čidla a podobně. Jeho výhodou zůstává příznivá cena a díky ní dobrý poměr cena/výkon.
Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/1977-i2c-teplomer-a-vlhkomer-dht12-digitalni.html