Na meranie teploty a vlhkosti v interiéry som vyskúšal známe senzory DHT11 (modrý) a DHT22 (biely).
V článku som spomenul rozdiely, zapojil senzory s Arduinom Nano, vyhľadal vhodnú knižnicu, vyskúšal nejaké tie programy a samozrejme niečo som i nafotil.
V tomto článku sa pozrieme na senzory DHT11 (modrý) a DHT22 (biely). Rozdiel medzi nimi je v rozsahu merania a citlivosti, kde:
- DHT11 - meria teplotu v rozsahu 0 - 50 stupňov Celzia s presnosťou ±1 °C a vlhkosť v rozmedzí 20 - 90% s presnosťou ±4%
- DHT22 - umožňuje merať teplotu v rozsahu -40 až +80 stupňov Celzia s presnosťou ±0,5 °C a vlhkosť vzduchu v rozsahu 0 - 100% s presnosťou ±2%.
Senzor má štyri vývody, z toho jeden je nezapojený, dva sú použité na napájanie v rozsahu 3V až 5V a jeden je dátový. Medzi tento dátový výstup a Vcc je doporučené pripojiť pull up rezistor v rozsahu 4,7kΩ - 10kΩ. Dĺžka kábla môže byť až 20 metrov.
K dispozícii je aj verzia ako modul na malom plošnom spoji s tromi vývodmi. U tohto modulu je už pull up rezistor integrovaný a netreba ho použiť. Ja som ho tam tiež nedával a funguje to. Je tam dokonca na vetve napájania i malý kondenzátor.
Koho by zaujímalo, tak pod tým modrým krytom je 8-bitový mikrokontrolér. Každý snímač tohto modelu je výrobcom teplotne kompenzovaný a kalibrovaný v presnej kalibračnej komore. Kalibračné koeficienty sú uložené ako programy v pamäti OTP, ktoré sa používajú v procese detekcie interného signálu snímača. Snáď to platí i pre senzory nakúpené na čínskych e-shopoch.
Pripojenie senzora k Arduinu je pomerne jednoduché. Použil som Arduino Nano a k tomu DHT22 (ten na PCB doske). Vodičmi som prepojil napájanie a dátový vodič som pripojil na pin D2. Miesto pinu D2 na Arduino doske môžeme samozrejme využiť iný voľný dátový pin, ale je nutné túto voľbu vykonať aj v programe.
Ďalej bolo potrebné stiahnuť a naimportovať vhodnú knižnicu DHT do Arduino IDE (návod na knižnice je uvedený tu). Knižníc na obsluhu DHT senzorov je samozrejme viac, mne sa najviac pozdávala táto. Program z príkladu je veľmi jednoduchý, namerané hodnoty posiela na sériovú linku v čo najkratších meracích intervaloch.
#include "DHT.h" DHT dht; void setup() { Serial.begin(9600); Serial.println(); Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)"); dht.setup(2); // data pin 2 } void loop() { delay(dht.getMinimumSamplingPeriod()); float humidity = dht.getHumidity(); float temperature = dht.getTemperature(); Serial.print(dht.getStatusString()); Serial.print("\t"); Serial.print(humidity, 1); Serial.print("\t\t"); Serial.print(temperature, 1); Serial.print("\t\t"); Serial.println(dht.toFahrenheit(temperature), 1); }
Najkratší merací interval je podľa typu DHT senzora a rieši to funkcia dht.getMinimumSamplingPeriod(), ktorá vráti hodnotu v milisekundách. Pre DHT11 je to najmenej 1000ms a pre DHT22 je to zas 2000ms. Pri reálnom nasadení dávame čas merania samozrejme väčší, napr. každých 5 až 15 min alebo raz za hodinu.
Výstup z DHT22 na sériovom monitore a zapisovači mám tu:
Červená je teplota v °C, modrá je vlhkosť a zelená je teplota vo Fahrenheitoch.
Ako ste si určite v programe všimli, tak u tejto knižnici sa nezadáva konkrétny typ DHT senzora. Štandardne je prednastavená na automatickú detekciu senzora, ktorá prebehne pri spustení dht.setup(2). Výhodu to možno má v tom, že keď vymením DHT senzor za iný model, stačí Arduino len reštartovať (resetovať) a meranie funguje ďalej bez potreby upraviť zdrojový program.
Ďalej som vyskúšal pripojiť naraz oba senzory k Arduinu. DHT22 je pripojený na pin 2 a DHT11 na pin 3. Program som poupravil nasledovne:
Program na sériovom monitore zobrazí nasledovné namerané hodnoty pre oba senzory:
Ako vidieť, teplotu ukazujú rovnakú, len tá vlhkosť je u DHT11 nižšia. Odskúšal som to i na druhý deň a rozdiel bol ten istý. Že by blbý kus?
Taktiež presnosť u DHT22 je na desatinné miesto, ale u DHT11 je to len na celé číslo.
Fotka projektu
Na záver len toľko, že DHT22 mi príde lepšia a vhodnejšia ako DHT11, i keď je o málinko drahšia, doporučil by som a použil radšej DHT22. V pláne ju mám použiť do bezdrôtového batériou napájaného Arduino senzora v rámci projektu Home Automation na Raspberry Pi 3. Samozrejme som vyskúšal aj ďalšie senzory ako napr. DS18B20 alebo BME280.