Skip to content

Pomiar temperatury i wilgotności powietrza

Częstym układem pomiarowym, który wykonywany jest na bazie mikrokontrolera Arduino jest pomiar wilgotności i temperatury. O ile wiemy co to jest temperatura i jak się ją mierzy, tak wilgotność i jej pomiar nie jest wiedzą ogólnie znaną.

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.
Najprościej mówiąc, wilgotność względna informuje nas o ilości wody w powietrzu.
Jeśli wartość ta osiągnie 100% woda zacznie wydzielać się w postaci kropel.
Definicja bardziej „akademickie” mówi, ż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.

Czujnik DHT-11

Czujnik DHT-11 to układ, który łą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 – nie jest to prawdą!
Czujniki DHT-11 korzystają ze zmodyfikowanej wersji interfejsu 1-wire,
która nie jest zgodna z tym standardem!

Schemat budowy i zasady działania czujnika DHT-11 przedstawia poniższy rysunek

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.

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). W przypadku tego czujnika konieczne jest dodanie rezystora 4.7k,
który łączy linię danych z dodatnią szyną zasilania. Przykładowe podłączenie widoczne jest na poniższym zdjęciu:

Ćwiczenie 1. Stacja pomiarowa z czujnikiem DHT-11

W Internecie znaleźć można co najmniej kilka gotowych bibliotek, które ułatwią nam korzystanie z tego sensora. Po zainstalowaniu biblioteki 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ższy rysunek przedstawia zachowanie czujnika po chuchnięciu na niego:

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.

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:

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.
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:

Podsumowanie

Czujnik DHT-11, jak doskonale widać powyżej, jest bardzo prosty w wykorzystaniu. Korzystając z wiedzy zdobytej do tej pory mozna zbudować 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.

Ćwiczenie 2.

Zbudować stację pomiarową wg ćw. 1 z prezentacjądanych na linijce diodowej składającej się z 10 diód LED w trzech kolorach (np. jak na rys. poniżej).