LinkedIn YouTube Facebook
Szukaj

Wstecz
IoT

[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
    }

 

 

Autor: Anna Kubacka