Kurs Arduino II – #8 – cyfrowy czujnik wilgotności (DHT11)

Kurs Arduino II – #8 –  cyfrowy czujnik wilgotności (DHT11)

Termometry (analogowe i cyfrowe), które zostały opisane podczas poprzedniego odcinka kursu, to zdecydowanie najczęściej używane sensory do pomiaru warunków atmosferycznych.

Drugim równie popularnym tematem jest pomiar wilgotności, który będzie możliwy dzięki DHT-11!

Czym jest pomiar wilgotności?

Bardzo często w kontekście Arduino pojawia się temat czujników wilgotności. Jednak w większości poradników pomija informacje na temat tego "co tak właściwie jest mierzone".

Opisywany w artykule czujnik DHT-11 mierzy wilgotność względną, którą w skrócie oznacza się jako RH od angielskiego Relative Humidity. Wartość ta mieści się zawsze w zakresie od 0 do 1 i nie ma swojej jednostki. Dlatego najczęściej wilgotność względną wyraża się w %RH - czyli podaje się wartość procentową z zakresu od 0 do 100%, gdzie 0%RH oznacza powietrze suche, a 100%RH oznacza powietrze o maksymalnym stężeniu pary wodnej.

Jeśli ktoś woli definicje bardziej "akademickie", to odsyłam do Wikipedii, gdzie znaleźć można, że: "wilgotność względna, to stosunek ciśnienia cząstkowego pary wodnej zawartej w powietrzu do ciśnienia nasycenia nad płaską powierzchnią czystej wody, określającego maksymalne ciśnienie cząstkowe pary wodnej w danej temperaturze."


Zajmując się opisywanym zagadnieniem warto jeszcze pamiętać o tym, że ilość wody, którą jest w stanie pomieścić powietrze zależy również m.in. od jego temperatury. Wraz ze zmianą wskazań termometru zmieniać będzie się %RH. Dla przypomnienia, skroplenie wody może nastąpić, gdy: dostarczymy brakującą ilość wody do powietrza lub, gdy obniżymy jego temperaturę. Aby nie przesadzić z teorią, zainteresowane osoby odsyłam do haseł wykres Molliera (uwaga, bo wygląda strasznie) oraz punkt rosy. Teraz pora przejść do praktyki!

Zestaw elementów do kursu

Gwarancja pomocy na forum Błyskawiczna wysyłka

Części do wykonania ćwiczeć z kursu Arduino (poziom 2) dostępne są w formie gotowych zestawów! W komplecie m.in. diody programowalne, termometry analogowe i cyfrowe, wyświetlacze 7-segmentowe oraz czujnik ruchu (PIR).

Kup w Botland.com.pl

Czujnik DHT-11 w praktyce

Nasze testy przeprowadzimy na popularnym, cyfrowym czujniku DHT-11. Układ ten łączy w jednej obudowie termometr oraz czujnik wilgotności. Informacje z czujnika odczytać można za pomocą interfejsu jednoprzewodowego. W wielu miejscach znaleźć można informację, że czujnik ten korzysta z 1-wire (znanego np. z omawianych czujników DS18B20) - nie jest to prawdą!

Z niebieskiej obudowy wystają 4 wyprowadzenia, jednak tylko 3 z nich są wykorzystane. Wyjście oznaczone jako NC (skrót od Not Connected) nie pełni żadnej istotnej funkcji i nie trzeba go nigdzie podłączać. Najważniejsze parametry czujnika:

  • Ogólne:
    • Napięcie zasilania: 3 V do 5,5 V (w naszym przypadku będzie to 5 V)
    • Pobór prądu: 0,2 mA
    • Częstotliwość próbkowania: 1Hz (nowe informacje można odczytywać co sekundę)
  • Wbudowany termometr
    • Zakres pomiarowy: 0 - 50 °C
    • Dokładność: ±2°C
  • Czujnik wilgotności:
    • Zakres pomiarowy: 20 - 95%RH
    • Dokładność  ±5%RH

Niestety w sprzedaży można natrafić na różne wersje tego czujnika, które mogą charakteryzować się różnymi zakresami pomiarowymi. Na szczęście, na tylnej ściance obudowy DHT-11 często producenci drukują najważniejsze informacje. W moim przypadku wyglądało to następująco:

Jeśli jesteśmy już przy obudowie, to warto zajrzeć do środka - zalecam jednak ostrożność przy jego otwieraniu. Poniżej umieszczam zdjęcia przykładowego egzemplarza więc nie ma potrzeby, aby każdy rozkładał swój sensor na czynniki pierwsze.

Istnieje wiele "różnych wersji wnętrza" - niektóre czujniki mogą wyglądać w środku zupełnie inaczej. Pozostaje wierzyć producentom, że wszystkie wersje działają poprawnie.

Wnętrze czujnika DHT-11.

Układ mierzy temperaturę w zakresie od 0 do 50°C, więc idealnie sprawdzi się podczas monitorowania pomieszczeń. Ta wersja czujnika nie nadaje się do stosowania na zewnątrz, gdzie spodziewamy się ujemnych temperatur.

Podłączenie czujnika DHT-11 do Arduino

Czujnik DHT-11 korzysta z interfejsu podobnego 1-wire, więc jego podłączenie jest bardzo proste. Na początek zasilanie 5V i GND, następnie łączymy linię danych z Arduino (np. z pinem nr 2).

Przykładowe podłączenie widoczne jest na poniższym zdjęciu:

Komunikacja z czujnikiem DHT-11

Oczywiście w Internecie znaleźć można co najmniej kilka gotowych bibliotek, które ułatwią nam korzystanie z tego sensora. W swoich projektach najchętniej korzystam z bardzo prostej biblioteki, której autorem jest Mark Ruys. Niezbędne pliki znaleźć można na GitHubie autora.

Po zainstalowaniu biblioteki (proces ten był opisywany we wcześniejszych odcinkach kursu) można przejść do napisania pierwszego programu. Zaczynamy od pustego szkieletu z dołączonym plikiem nagłówkowym biblioteki, definicją pinu oraz uruchomioną komunikacją przez UART:

W kolejnym kroku należy zadeklarować czujnik oraz poinformować bibliotekę o pinie, na którym ma odbywać się komunikacja:

Odczytanie wilgotności i temperatury z DHT-11

Teraz w pętli głównej można przejść już do odczytów. Tutaj przydadzą się dwie funkcje. Pierwsza do pobierania informacji na temat wilgotności w %RH: dht.getHumidity() oraz druga do odczytywania temperatury w °C: dht.getTemperature().

Program w najprostszej postaci będzie więc wyglądał następująco:

Działanie programu w praktyce widoczne jest na poniższej animacji. Czujnik potrzebuje stosunkowo dużo czasu na zarejestrowanie zmiany wilgotności i temperatury - może to zająć nawet od 6 do 15 sekund (typowo około 10). Więcej informacji na ten temat znaleźć można w nocie katalogowej.

Poniższa animacja przedstawia zachowanie czujnika po chuchnięciu na niego:

Zmiana odczytów czujnika DHT-11.

Niestety czasami mogą wystąpić pewne problemy z komunikacją lub inne błędy. Wtedy na ekranie zostanie wyświetlona informacja o temperaturze i wilgotności wynoszącej 0. Używana przez nas biblioteka zawiera jeszcze kilka ciekawych funkcji, które pozwolą uniknąć takich problemów.

Przykład błędnego odczytu.

Po pierwsze, nie ma konieczności, aby wpisywać "na sztywno" czas, po którym może nastąpić kolejny odczyt. Dzięki funkcji dht.getMinimumSamplingPeriod() możliwe jest pobranie informacji o czasie, który trzeba odczekać podczas korzystania z danego czujnika.

Po drugie, za pomocą funkcji dht.getStatusString() możemy sprawdzić, czy odczytanie pomiarów przebiegło bezbłędnie. Jeśli tak będzie, to powyższa funkcja zwróci nam "OK". W przypadku błędu otrzymamy odpowiednią informację np. "TIMEOUT".

Dzięki powyższym funkcjom program może wyglądać następująco:

Od teraz w momencie napotkania błędu żadne informacje nie będą wyświetlane. Przykład działania tego programu widoczny jest poniżej. Uszkodzenie czujnika symulowane było odłączeniem przewodu, który łączył DHT-11 z Arduino.

Poprawne działanie programu (bez błędnych wyników).

Na sam koniec warto jeszcze wspomnieć o ostatniej funkcji zaszytej w naszej bibliotece, która przelicza temperaturę na skalę Fahrenheita: dht.toFahrenheit(). W praktyce w naszym przypadku jej wywołanie wyglądałoby następująco:

Działanie zmienionego programu:

Konwersja temperatury odczytanej z DHT-11.

Podsumowanie

Czujnik DHT-11, jak doskonale widać powyżej, jest bardzo prosty w wykorzystaniu, dlatego cały artykuł nie musiał być długi. Korzystając z wiedzy zdobytej podczas tego i poprzedniego artykułu zachęcam do zbudowania prostej stacji pogodowej. Urządzenie to może mierzyć temperaturę, wilgotność i zachmurzenie (za pomocą fotorezystora). Wyniki można prezentować przykładowo na komputerze lub na linijce diod programowalnych.

W następnym artykule zajmiemy się funkcją millis(), która pozwala na generowanie opóźnień, które nie zawieszają całego programu. Przy okazji stworzymy praktyczny projekt inteligentnego oświetlenia. Łącząc elementy z poprzednich części stworzymy układ ułatwiający poruszanie się po zmroku!

Nawigacja kursu

Autor kursu: Damian (Treker) Szymański
Ilustracje: Piotr Adamczyk

Arduino, czujnik, dht11, kurs, kursArduino2, programowanie, wilgotności

Załączniki

DHT11 (pdf, 842 KB)

Dokumentacja czujnika DHT-11

Komentarze

Komentarze do tego wpisu są dostępne na forum: