SantyagoSantyago
YouTube RSS Google+ Facebook GitHub

Newsletter Arduino

Zapisz się do Newslettera, aby otrzymać informację o nowych wpsiach w dziale Arduino!

Arduino poradnik

Wstęp

Teoria

Biblioteki

Komponenty

Czujniki i sensory

Rozwiązania i algorytmy

Narzędzia

Mikrokontrolery i Arduino IDE

Arduino i klony

Poradniki wideo

Sprzęt dostarczają

Reklama na Blogu

Najnowsze poradniki

Ostatnie komentarze

Popularne wpisy

Facebook

Google+

Ostatnie fotografie

polskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorywieliczka-szyb-danilowicza

Czujniki wilgotności i temperatury DHT11 i DHT22

DHT11 i DHT22 są 8-bitowymi, cyfrowymi czujnikami wigotności i temperatury, komunikującym się za pośrednictwem interfejsu 1 wire.

DHT11 doskonale nadaje się do pomiaru tempeatur z zakresu 0ºC do 50ºC oraz wilgotności powietrza od 20% do 95%RH. Czujnik nie nadaje się zatem do pomiaru tempeatur ujmenych, a tym samym nie przyda nam się do mierzenia temperatury np. za oknem. Doskonale natomiast sprawdzi się w pomiarach w pomieszczeniach zamkniętych. Jeśli chodzi o błąd pomiarowy mieści się w zakresie ±2ºC dla temperatury oraz ±5%RH dla wilgotności.

Jeśli chodzi o DHT22 to ma on już szersze zastosowanie, bowiem potrafi mierzyć temperatury z zakresu -40ºC do 125ºC oraz wilgotności powietrza od 0% do 100%RH. Błąd pomiarowy wilgotności jest taki sam jak w przypadku DHT11, natomiast o wiele dokładniejszy jest pomiar temperatury, wynoszący ±0.5ºC .

Błędy pomiarowe mogą być niższe i w dużej mierze zależą od warunków otoczenia - dokładną tabelę znajdziedzie w karcie katalogowej tego czujnika.

DHT11

DHT22

DHT11 i DHT22 posiadają wyprowadzone cztery piny, z czego dwa wykorzystane są do zasilania napięciem z zakresu 3.3V do 5.5V (typowe zasilanie to 5V) oraz jeden pin sygnałowy, Pobór prądu w trakcie pomiaru może wynieść maksymalnie 2.5mA dla DHT11 i 1.5mA dla DHT22.

       DHT11 DHT22  
  Typ Minimalnie Typowe Maksymalnie Minimalnie Typowe Maksymalnie
Napięcie zasilania DC 3V 5V 5.5V  3.3V 5V 6V
Pobór prądu Pomiar 0.5mA   2.5mA  1mA   1.5mA
Czuwanie 100uA   150uA 40uA   50uA
Czas pomiaru  Minimalnie 1s   2s  

Schemat połączeń

Cała filozofia czujnika ogranicza się do podłączenia do niego zasilania 5V oraz doprowadzenie pinu sygnałowego do mikrokontrolera. Należy również wpiąć rezystor o wartości 10kΩ pomiędzy pin zasilania VCC, a pin sygnałowy DAT. Aby jednak ze sprawiedliwości stała się zadość, poniżej schemat :)

Program

Jedą z wielu dostępnych, jest biblioteka DHT-sensor-library od Adafruit, która należy rozpakować do katalogu sketchbook/libraries/

  1. bash-4.2$ tree -d ~/sketchbook/libraries/DHT/
  2. /home/santyago/sketchbook/libraries/DHT/
  3. `-- examples
  4.     `-- DHTtester

Program przedstawia się następująco:

  1. #include "DHT.h"          // biblioteka DHT
  2.  
  3. #define DHTPIN 2          // numer pinu sygnałowego
  4. #define DHTTYPE DHT11     // typ czujnika (DHT11). Jesli posiadamy DHT22 wybieramy DHT22
  5.  
  6. DHT dht(DHTPIN, DHTTYPE); // definicja czujnika
  7.  
  8. void setup()
  9. {
  10.   Serial.begin(9600);     // otworzenie portu szeregowego
  11.   dht.begin();            // inicjalizacja czujnika
  12. }
  13.  
  14. void loop()
  15. {
  16.   // Odczyt temperatury i wilgotności powietrza
  17.   float t = dht.readTemperature();
  18.   float h = dht.readHumidity();
  19.  
  20.   // Sprawdzamy czy są odczytane wartości
  21.   if (isnan(t) || isnan(h))
  22.   {
  23.     // Jeśli nie, wyświetlamy informację o błędzie
  24.     Serial.println("Blad odczytu danych z czujnika");
  25.   } else
  26.   {
  27.     // Jeśli tak, wyświetlamy wyniki pomiaru
  28.     Serial.print("Wilgotnosc: ");
  29.     Serial.print(h);
  30.     Serial.print(" % ");
  31.     Serial.print("Temperatura: ");
  32.     Serial.print(t);
  33.     Serial.println(" *C");
  34.   }
  35. }

Alternatywna biblioteka

Jeszcze jedną ciekawą biblioteką do obsługi czujników DHTxx znajdziesz tutaj. Została ona napisana przez Marka Ruysa. Od pierwowzoru różni się automatycznym wykrywaniem podpiętego czujnika, którym może być DHT11, DHT22, AM2302 oraz RHT03. Dodatkowo biblioteka posiada funkcję wyświetlania temperatury w skali Fahrenheita.

  1. #include "DHT.h"          // biblioteka DHT
  2.  
  3. #define DHTPIN 2          // numer pinu sygnałowego
  4.  
  5. DHT dht;                  // definicja czujnika
  6.  
  7. void setup()
  8. {
  9.   Serial.begin(9600);     // otworzenie portu szeregowego
  10.   dht.setup(DHTPIN);      // inicjalizacja czujnika
  11.   // dht.setup(DHTPIN, DHT11);      // inicjalizacja czujnika DHT11
  12.   // dht.setup(DHTPIN, DHT22);      // inicjalizacja czujnika DHT12
  13. }
  14.  
  15. void loop()
  16. {
  17.   // Miniamalne opóźnienie odczytu
  18.   delay(dht.getMinimumSamplingPeriod());
  19.  
  20.   // Odczyt temperatury i wilgotności powietrza
  21.   float t = dht.getTemperature();
  22.   float h = dht.getHumidity();
  23.  
  24.   // Sprawdzamy poprawność danych
  25.   if (dht.getStatus())
  26.   {
  27.     // Jeśli nie, wyświetlamy informację o błędzie
  28.     Serial.println("Blad odczytu danych z czujnika");
  29.   } else
  30.   {
  31.     // Jeśli tak, wyświetlamy wyniki pomiaru
  32.     Serial.print("Wilgotnosc: ");
  33.     Serial.print(h);
  34.     Serial.print(" % ");
  35.     Serial.print("Temperatura: ");
  36.     Serial.print(t);
  37.     Serial.print(" *C / ");
  38.     Serial.print(dht.toFahrenheit(t));
  39.     Serial.println(" *F ");
  40.   }
  41. }

Uruchomienie

Po przesłaniu programu do Arduino, możemy śledzić wyniki pomiarów w monitorze portu szeregowego.

Materiały dodatkowe

Biblioteka DHT-sensor-library od Adafruit.
Biblioteka arduino-DHT od Marka Ruysa
Mirror bibliotek DHT: http://www.jarzebski.pl/arduino/DHT/
Karta katalogowa czujnika DHT11.pdf
Karta katalogowa czujnika DHT22.pdf

Polub ten wpis na Facebook i Google+

http://www.jarzebski.pl/arduino/czujniki-i-sensory/czujnik-wilgotnosci-i-temperatury-dht11-dht22.html

Reklama

Komentarze Komentarze
Avatar 1
fookoo Linux x86_64 / Mozilla Firefox 22.0
01 grudzień 2013 - 11:52 Warszawa

masz 25 stopni w pokoju ? cieplo

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 25.0
01 grudzień 2013 - 12:54 Bytom

:) A no ciepło

Avatar 1
sony9505 Windows 7 / Safari 537.36
13 lipiec 2014 - 09:59 Warszawa

//pomyłka w nicku

Możesz zamiast wypisywania ciągłego użyć zmiennych pomocniczych, które będą zapisywały informacje o poprzednim pomiarze i gdy któraś wartość się zmieni dopiero wypisywać wynik

#include "DHT.h" // biblioteka DHT

#define DHTPIN 2 // numer pinu sygnałowego
#define DHTTYPE DHT11 // typ czujnika (DHT11). Jesli posiadamy DHT22 wybieramy DHT22

DHT dht(DHTPIN, DHTTYPE); // definicja czujnika

float a = 0.0,b = 0.0;

void setup()
{
Serial.begin(9600); // otworzenie portu szeregowego
dht.begin(); // inicjalizacja czujnika
}

void loop()
{
// Odczyt temperatury i wilgotności powietrza
float t = dht.readTemperature();
float h = dht.readHumidity();

// Sprawdzamy czy są odczytane wartości
if (isnan(t) || isnan(h))
{
// Jeśli nie, wyświetlamy informację o błędzie
Serial.println("Blad odczytu danych z czujnika");
} else
{
// Jeśli tak, wyświetlamy wyniki pomiaru

if(a != h || b != t){
Serial.print("Wilgotnosc: ");
Serial.print(h);
Serial.print(" % ");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C");
a = h;
b = t;
}

}
}

Avatar 1
Maciek Windows 7 / Safari 537.36
17 lipiec 2014 - 22:07 Brak informacji

A czy można podpiąć dwa lub więcej takich czujników pod jedno arduino. Jak tak to jak to rozwiązać ?

Avatar 2
Korneliusz Linux x86_64 / Mozilla Firefox 30.0
17 lipiec 2014 - 22:59 Bytom

jakkolwiek :) każdy dht wymaga jednego pinu cyfrowego, np jeden pod 2 ,a drugi pod 3:

dht1.setup(2);
dht2.setup(3);

Avatar 1
vo99 Windows XP / Safari 537.36
26 maj 2015 - 12:09 Kraków

jak się nie mylę to 1 wire umożliwia podpięcie kilku czujników pod ten sam pin

Avatar 1
Pablo Windows / Safari 537.36
12 listopad 2015 - 23:19 Warszawa

Też się na to naciąłem - problem w tym, że dht11 i dht22 nie są 1 wire

Avatar 1
super Windows 7 / Safari 537.36
27 wrzesień 2014 - 11:12 Warszawa

witam,czy można zrobić żeby dane z projektu Marka Ruysa były na LCD_Counter_I2C_short wyświetlane.Łączyłem dwa skecze ale nie zabardzo mi działa.

Avatar 1
oto skecz Windows 7 / Safari 537.36
27 wrzesień 2014 - 11:19 Warszawa

#include "DHT.h" // biblioteka DHT
#include
#include

#define BACKLIGHT_PIN 3

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);

#define DHTPIN 2 // numer pinu sygnałowego

DHT dht; // definicja czujnika

void setup()
{
Serial.begin(9600); // otworzenie portu szeregowego
dht.setup(DHTPIN); // inicjalizacja czujnika
// dht.setup(DHTPIN, DHT11); // inicjalizacja czujnika DHT11
// dht.setup(DHTPIN, DHT22); // inicjalizacja czujnika DHT12
lcd.begin (16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);

lcd.home ();
lcd.print("C/F");
}

void loop()
{
lcd.setCursor(0, 1);
lcd.print(millis()/10);
// Miniamalne opóźnienie odczytu
delay(dht.getMinimumSamplingPeriod());

// Odczyt temperatury i wilgotności powietrza
float t = dht.getTemperature();
float h = dht.getHumidity();

// Sprawdzamy poprawność danych
if (dht.getStatus())
{
// Jeśli nie, wyświetlamy informację o błędzie
Serial.println("Blad odczytu danych z czujnika");
} else
{
// Jeśli tak, wyświetlamy wyniki pomiaru
Serial.print("Wilgotnosc: ");
Serial.print(h);
Serial.print(" % ");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C / ");
Serial.print(dht.toFahrenheit(t));
Serial.println(" *F ");
}
}

Avatar 1
oszukuje! Mac OS X / Mozilla Firefox 39.0
09 sierpień 2015 - 16:20 Warszawa

O ile dht11 na tej bibliotece dziala i pokazuje prawidlowe dane o tyle dht22 niestety nie dziala temperatura a wilgotnosc normalnie ;/ co jest nie tak ? :) Uszkodzony czujnik czy co ? caly czas pokazuje 25.10

Avatar 1
klima Mac OS X / Mozilla Firefox 39.0
12 sierpień 2015 - 20:33 Warszawa

Uszkodzony był czujnik, biblioteka wzorowa działa bardzo dobrze ;)

Avatar 1
R0bby Windows / Mozilla Firefox 42.0
25 listopad 2015 - 08:52 Warszawa

Cześć,
A nie próbowałeś może uruchomić obsługi DHT11/DHT22 bezpośrednio z portu LPT?
Kiedyś walczyłem z tym zagadnieniem, niestety poległem, jak sądze z powodu trudności w utrzymaniem reżimów czasowych.
http://www.elektroda.pl/rtvforum/topic2886665.html#13911710

Pozdrawiam,
Robert

Avatar 1
Piotr Windows / Safari 537.36
26 listopad 2015 - 13:27 Brak informacji

Witam.
Potrzebuję połączyć 24 czujniki DS18B20 za pomocą i2c ,
jak rozróżnić który jest który???
A może da się ustawić ich adresy???

Pozdrawiam
Piotr

Avatar 1
R0bby Windows / Mozilla Firefox 42.0
27 listopad 2015 - 15:50 Warszawa

Adresy są wpisane w ROM. Maxim ma w ofercie konwerter 1Wire-I2C. A jak odróżnić? Po kolei brać do łapki i obserwować wskazania :)

Avatar 1
Krzysiek Windows / Safari 537.36
01 styczeń 2016 - 19:41 Jaworzno

Witam. Jak napisać funkcję która będzie mi zapamiętywać z DTH11 temperaturę minimalną jak i maksymalną?

Avatar 1
andrzej Windows 7 / Safari 537.36
16 maj 2016 - 15:32 Ruda Śląska

int minTemp = 666;
int maxTemp = 666;
void saveTemp(int currentTemp) {
if (minTemp == 666) {
minTemp = currentTemp;
maxTemp = currentTemp; }
if (currentTemp > maxTemp) maxTemp = currentTemp;
if (currentTemp < minTemp) minTemp = currentTemp;
}

Avatar 1
Konrad Windows 7 / Mozilla Firefox 43.0
05 styczeń 2016 - 14:24 Warszawa

Witam.
Genialna strona z przykładami:)
Właśnie Z Twojej strony zaczęło się moje zainteresowanie Arduino.
Chciałbym zbudować prostą stację pogodową w której będzie również wyświetlany czas.
Tu pojawia się problem: Zegar na DS1307 jak i BMP180 korzystają z t wejść A4 i A5.
Co zrobić aby moja stacja pogodowa zadziałała??

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 43.0
09 luty 2016 - 07:14 Bytom

Z tego co pamiętam DS1307 i BMP180 mają inne adresy na I2c, więc mogą pracować razem.

Avatar 1
manio Linux x86_64 / Safari 537.36
07 luty 2016 - 11:21 Brak informacji

Witam
Myślę że bardzo istotne jest aby sprostować informacje na tej stronie a są one bardzo mylące. Chodzi mi o pierwsze zdanie w którym pisze że czytnik komunikuje sie za pomocą interfejsu 1 wire. Może to wprowadzać w błąd. Nie jest to popularny protokół transmisji Dallas-a 1-wire, gdzie każde urządzenie ma swój unikalny adres. DHT korzysta z własnego protokołu który być może przypomina 1-wire ale nie można go tak nazwać. Proszę o sprostowanie artykułu.
Więcej info:
http://hirt.se/blog/?p=493
http://forum.r-pi.pl/nasze-projekty/ds18b20-dht22-lcd-rtc-t149903-10.html

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 43.0
09 luty 2016 - 07:15 Bytom

Wielkie dzięki za informację. Oczywiście masz rację - migiem to poprawię

Skomentuj wpis