sobota, 21 października 2017

DHT11 Czujnik wilgotności i temperatury

DHT11 jest jednym z najtańszych (już od 0,65€ na AliExpress) cyfrowych czujników temperatury i wilgotności. Komunikacja z czujnikiem odbywa się po szeregowym interfejsie single-wire. Przy użyciu jednej z dostępnych bibliotek (DHT-sensor-library) do obsługi czujnika, odczyt wartości obu wielkości staje się banalnie prosty. Czujnik można kupić sam lub w postaci modułu z dodanym rezystorem podciągającym, kondensatorem i czasami LED sygnalizującym zasilanie.

Czujniki DHT11

Specyfikacja
  • zasilanie od 3 do 5,5V
  • pobierany prąd maksymalnie do 2,5mA
  • pomiar wilgotności
    • rozdzielczość 1% RH (8bit)
    • dokładność ±5% RH w przedziale temperatur 0 - 50° C
    • zakres pomiarowy 30% do 80% RH
    • czas odpowiedzi maksymalnie 15s
  • pomiar temperatury
    • rozdzielczość 1°C (8bit)
    • dokładność ±2°C
    • zakres pomiarowy 0° C do 50°C
    • czas odpowiedzi maksymalnie 30s
  • protokół wymiany informacji: single-wire
Wybrałem najgorsze możliwe wartości parametrów ze specyfikacji. W pewnych przedziałach temperatury parametry pomiarów mogą być lepsze, ale wolę z góry zakładać najgorszy wariant ;) Symbol RH (Relative Humidity) oznacza wilgotność względną.

Patrząc na specyfikację, można powiedzieć, że czujnik przeznaczony jest do pracy wewnątrz o niezbyt dokładnym pomiarze temperatury i dużym czasem odpowiedzi na zmiany mierzonych wielkości. Zakres pomiarowy temperatury pokrywa się z zakresem temperatur w których można mierzyć wilgotność. Wobec tego, poza śledzeniem samej temperatury,  można monitorować dodatkowo poprawność warunków pracy czujnika, jeśli chodzi o pomiar wilgotności.

Czujnik wykorzystuje protokół do wymiany danych o nazwie "Single-Wire Two-Way". To nie jest to samo co 1-Wire. Poza inną "konstrukcją" protokołu jeszcze jest widoczna taka różnica, że na 1-Wire można łączyć wiele urządzeń. W przypadku Single-Wire tylko jedno urządzenie z uwagi na brak adresowania.

Piny



Uruchomienie

Niestety, pierwsza próba uruchomienia modułu z czujnikiem nie powiodła się. Na terminalu wyskoczył mi komunikat o błędzie odczytu danych. Komunikacja ruszyła dopiero po wymianie oryginalnego rezystora o wartości 5,2kΩ na 10kΩ. Operacja była o tyle kłopotliwa w przypadku posiadanego modułu, że są to rezystory SMD o wymiarze 0805. Rozwiązanie tego problemu (zmiana rezystora) znalazłem jako jedno z możliwych na Google. Nie znalazłem jednak informacji o powodach tych problemów i wpływie na nie wartości rezystora podciągającego. Warto nadmienić, że w dokumentacji (3) na schemacie połączeń (strona 5) widnieje rezystor 5kΩ. Z drugiej jednak strony na zdjęciu modułu z drugiej strony dokumentacji widać, że jest wlutowany rezystor 10kΩ.

Podłączenie czujnika

Przykładowy kod uruchomieniowy z usuniętym pokazywaniem temperatury w Fahrenheit'ach i kilkoma niekoniecznie przydatnymi mi komentarzami.

#include "DHT.h"

#define DHTPIN 2      // what digital pin we're connected to
#define DHTTYPE DHT11 // DHT 11

// Initialize DHT sensor.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print("Heat index: ");
  Serial.print(hic);
  Serial.println(" *C ");
}


Źródła
1) Kod biblioteki DHT-sensor-library
2) DHTxx Sensors
3) Specyfikacja DHT11
4) Compare DHT22, DHT11 and Sensirion SHT71

Brak komentarzy:

Prześlij komentarz