Pomiar temperatury i wilgotności to najczęstszy pierwszy projekt z ESP32, Arduino albo Raspberry Pi, a od wyboru czujnika zależy, czy odczyty do czegokolwiek się przydadzą. W sklepach dla majsterkowiczów dominują cztery rodziny: DHT22 (sprzedawany też jako AM2302), BME280 firmy Bosch, AHT20 firmy Aosong i SHT4x firmy Sensirion. Różnią się dokładnością, interfejsem i wrażliwością na własne ciepło. Poniżej porównanie na podstawie not katalogowych producentów oraz praktyczne wskazówki dotyczące umieszczenia czujnika, które ma równie duże znaczenie jak sam układ.
Krótka odpowiedź
- Do dokładnego pomiaru wilgotności w pomieszczeniu lub na zewnątrz: SHT4x (SHT40, SHT41 lub SHT45).
- Do taniego i przyzwoitego czujnika I²C: AHT20.
- Jeśli potrzebujesz też ciśnienia: BME280, zamontowany z dala od źródeł ciepła.
- W nowych projektach omijaj DHT22, chyba że jeden już leży w szufladzie.
- Do samej temperatury, w wodzie albo na rurach: wodoszczelna sonda DS18B20, którą opisaliśmy w osobnym poradniku.
Porównanie według not katalogowych
| DHT22 / AM2302 | BME280 | AHT20 | SHT40 | SHT45 | |
|---|---|---|---|---|---|
| Interfejs | jednoprzewodowy, własny protokół | I²C lub SPI | I²C (adres 0x38) | I²C (domyślnie 0x44) | I²C |
| Dokładność temperatury | ±0,5 °C | ±0,5 °C w zakresie 0-65 °C | ±0,3 °C | typ. ±0,2 °C | typ. ±0,1 °C |
| Dokładność wilgotności | ±2 %RH (maks. ±5 %RH) | ±3 %RH | ±2 %RH przy 25 °C | typ. ±1,8 %RH | typ. ±1,0 %RH |
| Dodatkowo | - | ciśnienie | - | wbudowana grzałka | wbudowana grzałka |
| Minimalny odstęp pomiarów | 2 s | - | zalecane 2 s | - | - |
Wartości pochodzą z not katalogowych poszczególnych układów. Producenci różnie definiują dokładność „typową” i „maksymalną”, więc do drobnych różnic podchodź ostrożnie. Duże różnice są jednak prawdziwe.
DHT22 / AM2302
DHT22 przez lata był domyślnym czujnikiem w projektach amatorskich. Według noty katalogowej AM2302 ma dokładność ±0,5 °C i ±2 %RH (maksymalnie ±5 %RH), rozdzielczość 0,1 i okres pomiaru 2 sekundy. Pracuje przy napięciu 3,3-5,5 V.
Słabe strony:
- Jednoprzewodowy protokół oparty na czasie impulsów. Mikrokontroler musi dokładnie mierzyć długość impulsów, więc na obciążonych lub szybkich płytkach zdarzają się nieudane odczyty. W dokumentacji ESPHome jest na przykład opcja ręcznego ustawienia modelu DHT przy błędnych odczytach, a jako częstą przyczynę kłopotów wymieniono złą wartość rezystora podciągającego.
- Nierówna jakość. Wiele modułów sprzedawanych jako DHT22 to klony niewiadomego pochodzenia.
- Wolny i duży w porównaniu z nowoczesnymi układami I²C.
Jeśli masz taki czujnik, będzie działał. Jeśli kupujesz nowy, AHT20 kosztuje mniej więcej tyle samo i łatwiej go obsłużyć.
BME280
BME280 firmy Bosch mierzy temperaturę, wilgotność i ciśnienie. Według noty katalogowej dokładność pomiaru wilgotności wynosi ±3 %RH, ciśnienia ±1,0 hPa, a temperatury ±0,5 °C w zakresie od 0 do 65 °C.
Jest jednak ważny przypis. Według Boscha wartość temperatury zależy od temperatury płytki drukowanej, samonagrzewania elementu pomiarowego i temperatury otoczenia, i zwykle jest wyższa od temperatury otoczenia. Czujnik temperatury służy tu głównie do korekty pomiaru ciśnienia i wilgotności. Gdy BME280 jest zamontowany na małej płytce przylutowanej obok ESP32, odczyt temperatury jest często zawyżony, a ponieważ wilgotność względna zależy od temperatury, pogarsza się też pomiar wilgotności.
BME280 wybierz wtedy, gdy potrzebujesz ciśnienia (trendy pogodowe, wysokość), i:
- rób pomiary w długich odstępach w trybie wymuszonym (pojedynczy pomiar, ang. forced mode) zamiast pomiaru ciągłego,
- zamontuj czujnik na krótkim przewodzie z dala od mikrokontrolera i stabilizatora napięcia.
Sprawdź też zakupiony moduł. Wiele tanich płytek opisanych jako „BME280” ma na pokładzie BMP280, który mierzy tylko ciśnienie i temperaturę, bez wilgotności. Oryginalny BME280 zwraca w rejestrze identyfikatora wartość 0x60, więc odczyt identyfikatora rozwieje wątpliwości.
AHT20
AHT20 firmy Aosong to mały, skalibrowany czujnik I²C ze stałym adresem 0x38. W nocie katalogowej modułu Grove AHT20 firmy Seeed podano ±0,3 °C i ±2 %RH przy 25 °C.
W nocie katalogowej samego AHT20 jest przydatna rada dotycząca samonagrzewania: przy zbyt częstych pomiarach czujnik się nagrzewa i traci dokładność. Aby wzrost temperatury nie przekroczył 0,1 °C, czas aktywności nie powinien przekraczać 10% czasu pomiaru, a Aosong zaleca pomiar nie częściej niż co 2 sekundy. W czujniku do automatyki domowej, który wysyła dane co 30-60 sekund, nie ma to znaczenia.
W ESPHome AHT20 obsługuje się komponentem aht10 z ustawieniem variant: AHT20. W dokumentacji ESPHome jest też informacja, że DHT20 to AHT20 w obudowie w stylu DHT, podłączany przez I²C.
SHT4x (SHT40, SHT41, SHT45)
Rodzina SHT4x firmy Sensirion jest najdokładniejsza w tym zestawieniu, a przy tym niedroga. Według aktualnej noty katalogowej:
- SHT40 i SHT41: typowo ±1,8 %RH i ±0,2 °C,
- SHT45: typowo ±1,0 %RH i ±0,1 °C,
- długoterminowy dryf poniżej 0,2 %RH i poniżej 0,03 °C na rok (wartości typowe),
- napięcie zasilania 1,08-3,6 V i bardzo mały pobór prądu (średnio 0,4 µA),
- pełna sprawność także przy kondensacji pary wodnej.
SHT4x ma też wbudowaną grzałkę. Według Sensiriona służy ona do usuwania skroplonej wody z powierzchni czujnika i do utrzymania dokładnych odczytów przy długotrwałej, bardzo wysokiej wilgotności. Grzałka nie jest przeznaczona do ciągłej pracy: według noty katalogowej cykl pracy grzałki nie może przekraczać 10%, a podczas grzania parametry czujnika nie są gwarantowane. Komponent sht4x w ESPHome może ją włączać z ograniczonym wypełnieniem (maksymalnie 5%), a domyślnie jest wyłączona. W łazience, piwnicy albo na zewnątrz to realna zaleta.
Zwróć uwagę na zakres zasilania: SHT4x to układ na 3,3 V. Większość płytek z czujnikiem ma stabilizator, ale sprawdź to przed podłączeniem do 5 V.
Umieszczenie czujnika jest równie ważne jak układ
Czujnik o dokładności ±0,1 °C w złym miejscu da gorszy wynik niż czujnik ±0,5 °C w dobrym. Kilka zasad:
- Trzymaj czujnik z dala od ciepła. ESP32 z włączonym Wi-Fi, liniowy stabilizator napięcia albo ładowarka USB nagrzewają wszystko w pobliżu. Umieść czujnik na końcu przewodu albo przynajmniej po drugiej stronie płytki, z wycięciem w płytce lub obudowie pomiędzy nimi.
- Zapewnij dopływ powietrza. W szczelnej obudowie mierzysz temperaturę obudowy, a nie pomieszczenia. Otwory wentylacyjne zrób przy czujniku, a nie przy elektronice.
- Unikaj bezpośredniego słońca, kaloryferów i ścian zewnętrznych, jeśli interesuje cię temperatura pomieszczenia.
- Na zewnątrz stosuj osłonę radiacyjną (stos talerzyków, który przepuszcza powietrze, ale zasłania słońce). Bez niej dzienne odczyty w słońcu są bezwartościowe.
- Unikaj oparów chemicznych. Według noty katalogowej AM2302 opary chemiczne mogą wpływać na element pomiarowy. To samo dotyczy innych polimerowych czujników wilgotności.
- Porównaj, zanim zaufasz. Połóż dwa czujniki obok siebie na kilka godzin. Jeśli różnią się bardziej, niż wynika z ich dokładności, najpierw sprawdź umiejscowienie, a dopiero potem dodaj programową korektę odczytu.