Czujnik temperatury i wilgotności DHT17 to popularny i tani czujnik, który może pracować w dość szerokim zakresie temperatur i wilgotności względnej. Zobaczmy, jak podłączyć go do Arduino i jak odczytać z niego dane.
Niezbędny
- - Arduino;
- - Czujnik temperatury i wilgotności DHT17.
Instrukcje
Krok 1
Tak więc czujnik DHT11 ma następujące cechy:
- zakres mierzonej wilgotności względnej - 20..90% z błędem do 5%, - zakres mierzonych temperatur - 0..50 stopni Celsjusza z błędem do 2 stopni;
- czas reakcji na zmiany wilgotności - do 15 sekund, temperatury - do 30 sekund;
- minimalny czas odpytywania to 1 sekunda.
Jak widać, czujnik DHT11 nie jest zbyt dokładny, a zakres temperatur nie obejmuje wartości ujemnych, co raczej nie nadaje się do pomiarów na zewnątrz w zimnych porach roku w naszym klimacie. Jednak jego niski koszt, mały rozmiar i łatwość użytkowania częściowo niwelują te wady.
Rysunek przedstawia wygląd czujnika i jego wymiary w milimetrach.
Krok 2
Rozważ schemat podłączenia czujnika temperatury i wilgotności DHT11 do mikrokontrolera, w szczególności do Arduino. Na zdjęciu:
- MCU - mikrokontroler (np. Arduino lub podobny) lub komputer jednopłytkowy (Raspberry Pi lub podobny);
- DHT11 - czujnik temperatury i wilgotności;
- DATA - magistrala danych; jeżeli długość przewodu łączącego czujnik z mikrokontrolerem nie przekracza 20 metrów, to zaleca się podciągnąć tę magistralę do zasilania rezystorem 5,1 kOhm; jeśli więcej niż 20 metrów, to inna odpowiednia wartość (mniejsza).
- VDD - zasilanie czujnika; dopuszczalne napięcia od ~ 3,0 do ~ 5,5 V DC; w przypadku zasilania ~3,3 V zaleca się stosowanie przewodu zasilającego nie dłuższego niż 20 cm.
Jeden z wyprowadzeń czujnika - trzeci - nie jest do niczego podłączony.
Czujnik DHT11 jest często sprzedawany jako kompletny zestaw z niezbędnym orurowaniem - rezystor podciągający i kondensator filtrujący.
Krok 3
Zbierzmy rozważany schemat. Podłączę też do układu analizator stanów logicznych, abym mógł przestudiować schemat czasowy komunikacji z czujnikiem.
Krok 4
Chodźmy prostą drogą: pobierz bibliotekę dla czujnika DHT11 (link w sekcji „Źródła”), zainstaluj ją w standardowy sposób (rozpakuj do katalogu / library\ środowiska programistycznego Arduino).
Napiszmy taki prosty szkic. Załadujmy go do Arduino. Ten szkic będzie wysyłał komunikaty dotyczące wilgotności względnej i temperatury odczytywane z czujnika DHT11 do portu szeregowego komputera co 2 sekundy.
Krok 5
Teraz, korzystając z wykresu czasowego uzyskanego z analizatora stanów logicznych, zastanówmy się, jak przebiega wymiana informacji.
Czujnik temperatury i wilgotności DHT11 wykorzystuje jednoprzewodowy interfejs szeregowy do komunikacji z mikrokontrolerem. Jedna wymiana danych trwa około 40 ms i zawiera: 1 bit żądania z mikrokontrolera, 1 bit odpowiedzi czujnika i 40 bitów danych z czujnika. Dane obejmują: 16 bitów informacji o wilgotności, 26 bitów informacji o temperaturze i 8 bitów kontrolnych.
Przyjrzyjmy się bliżej schematowi taktowania komunikacji Arduino z czujnikiem DHT11.
Z rysunku widać, że istnieją dwa rodzaje impulsów: krótkie i długie. Krótkie impulsy w tym protokole wymiany oznaczają zera, długie impulsy - jedynki.
Tak więc pierwsze dwa impulsy to żądanie Arduino do DHT11 i odpowiednio odpowiedź czujnika. Następnie pojawia się 16 bitów wilgotności. Ponadto są podzielone na bajty, wysokie i niskie, wysokie po lewej stronie. Oznacza to, że na naszym rysunku dane dotyczące wilgotności są następujące:
0001000000000000 = 00000000 00010000 = 0x10 = 16% wilgotności względnej.
Dane temperaturowe podobne do:
0001011100000000 = 00000000 00010111 = 0x17 = 23 stopnie Celsjusza.
Bity kontrolne - suma kontrolna to tylko suma 4 odebranych bajtów danych:
00000000 +
00010000 +
00000000 +
00010111 =
00100111 binarnie lub 16 + 23 = 39 dziesiętnie.