[Aplikacja ARDUINO] Czujniki wilgotności i temperatury DHT11 i DHT22
Sensory umożliwiające badanie warunków środowiskowych są powszechnie spotykane w naszym codziennym życiu. Najczęściej mierzonymi parametrami są temperatura oraz wilgotność powietrza. Dzięki scalonym sensorom, takim jak rodzina czujników DHTxx, pomiar tych wartości jest bardzo łatwy i stosunkowo tani.
DHT11 i DHT22 to czujniki wilgotności i temperatury, w których mierzone wartości są konwertowane do postaci cyfrowej, a komunikacja z systemem mikroprocesorowym odbywa się z wykorzystaniem interfejsu szeregowego. Oba czujniki są stosunkowo wolne i niezbyt dokładne, ale ich parametry są zwykle wystarczające w typowych hobbystycznych zastosowaniach. Na fotografii 1 pokazano czujnik DHT11, natomiast na fotografii 2 znajduje się sensor zgodny z DHT22 o oznaczeniu AM2302. Podstawowe parametry tych czujników zebrano w tabeli 1. Ze względu na zakresy pomiarowe, DHT11 nie nadaje się do monitorowania warunków atmosferycznych, w tych zastosowaniach doskonale sprawdzi się natomiast sensor DHT22.
Fot. 1. Sensor DHT11
Fot. 2. Sensor AM2302 (odpowiednik DHT22)
Tab. 1. Podstawowe parametry sensorów DHT11 i DHT22
DHT11 | DHT22 | ||
Napięcie zasilania | 3…5,5 V | 3,3…6 V | |
Średni pobór prądu | Podczas pomiaru | 0,5…2,5 mA | 1…1,5 mA |
Czuwanie | 100…150 µA | 40…50 µA | |
Pomiar temperatury | Zakres | 0…+50°C | -40…+80°C |
Rozdzielczość | 1°C | 0,1°C | |
Dokładność | 1°C | 0,2°C | |
Pomiar wilgotności | Zakres | 20…90% | 0…100% |
Rozdzielczość | 1% | 0,1% | |
Dokładność | 4% | 2% | |
Czas pomiaru | 1 s | 2 s |
Oba czujniki znajdują się w 4-wyprowadzeniowych obudowach i do pracy wymagają, oprócz dołączenia napięcia zasilania, podciągnięcia linii sygnałowej do plusa zasilania przez rezystor o wartości 4,7…10 k?, co pokazano na rysunku 3. Przykład dołączenia sensora do płytki Arduino Uno z wykorzystaniem płytki stykowej, rezystora 4,7 k? oraz przewodów CAB-M-M pokazano na fotografii 4.
Rys. 3. Schemat dołączenia sensorów DHT11/22 do systemu mikroprocesorowego
Fot. 4. Sposób dołączenia sensora do zestawu Arduino Uno
Dane z sensorów są odczytywane szeregowo, opis transmisji jest dostępny w kartach katalogowych. W Internecie można znaleźć wiele bibliotek umożliwiających korzystanie z tych czujników. W najlepszej sytuacji są jednak użytkownicy Arduino – dla tego środowiska powstały najlepiej dopracowane biblioteki, np. DHTLib czy DHT-sensor-library. Po pobraniu odpowiednich bibliotek, należy je zainstalować co opisano w artykule Arudino – jak zaimportować biblioteki?.
Program odczytujący zmierzone dane przez sensor DHT22 i wysyłający wyniki pomiarów przez port szeregowy do komputera pokazano na listingu 1. W przypadku Arduino Uno jest wykorzystywany zamontowany na płytce konwerter UART-USB widziany w komputerze osobistym jako wirtualny port szeregowy. Wynik działania programu pokazano na rysunku 5. Na rysunku 6 zaznaczono miejsce w programie, w którym określa się typ dołączonego sensora.
Rys. 5. Prezentacja zmierzonych wartości w terminalu komputera
Rys. 6. W tym miejscu definiuje się typ dołączonego sensora
List. 1. Program wysyłający przez port szeregowy wartości zmierzone przez sensor DHT22
#include "DHT.h" // biblioteka sensorów DHTxx #define DHTPIN 2 // wyjście danych sensora jest dołączone // do linii 2 Arduino // deklaracja typu czujnika #define DHTTYPE DHT22 // DHT22 // #define DHTTYPE DHT11 // DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); // otworzenie portu szeregowego dht.begin(); // inicjalizacja czujnika } void loop() { float t = dht.readTemperature(); // odczyt temperatury float h = dht.readHumidity(); // odczyt wilgotności powietrza // czy odczytano wartości? if (isnan(t) || isnan(h)) { // NIE -> informacja o błędzie Serial.println(">>>>>>>>>>>>>>>>>>>>Blad odczytu danych z czujnika!"); } else { // TAK -> wysyłamy wyniki przez port szeregowy Serial.print("Wilgotnosc: "); Serial.print(h); Serial.print(" % "); Serial.print("Temperatura: "); Serial.print(t); Serial.println(" *C"); } delay(1000); // opóźnienie }