HTS221 – czujnik temperatury i wilgotności powietrza z wyjściem cyfrowym

Czujnik temperatury i wilgotności powietrza HTS221

Przygotowując na prośbę znajomego „ogrodnika” sterownik podlewania w szklarni szukałem małego i taniego czujnika temperatury i wilgotności powietrza. Po krótkim przeszukaniu Internetu mój wybór padł na moduł KAmodHTS221. Moduł zbudowano z wykorzystaniem układu HTS221 firmy STMicroelectronics. Układ ten jest przystosowany do pracy z napięciem 3,3 V, co nie jest zbyt wygodne w moich zastosowaniach, gdyż w większości projektów wykorzystuję logikę 5 V. Na szczęście moduł KAmodHTS221 ma wbudowany konwerter napięć, więc można go bezpośrednio dołączyć np. do Arduino Uno.

Podstawowe dane modułu KAmodHTS221:

  • Zakres pomiarowy: 0 – 100% RH (wilgotność) / 0 – 60°C (temperatura)
  • Dokładność pomiaru wilgotności: ± 6% (0 – 100% RH) / ± 4.5% (20 – 80% RH)
  • Dokładność pomiaru temperatury: ± 1°C (0 – 60°C) / ± 0.5°C (15 – 40°C)
  • Napięcie zasilania: 2,5 – 5,5 V
  • Rozdzielczość przetwornika ADC: 16 bitów
  • Interfejs komunikacyjny: SPI / I2C
  • Wymiary modułu (bez złącza): 24 mm x 15 mm x 3 mm

hts221_modul

Pierwsze próby z płytką rozpocząłem od uruchomienia dostarczonego przez producenta przykładu. Sposób dołączenia modułu KAmodHTS221 z mikrokontrolerem STM32 z zestawu ZL27ARM jest następujący:

ZL27ARM (pin złącza JP5) KAmodHTS221(pin złącza JP1)
PB0(1) CS(7)
PB1(2) DRDY(8)
PB6(7) SCL(5)
PB7(8) SDA(4)
GND(19) GND(3)
+3,3V(20) +Vin(2)

Pierwotnie połączenia wykonałem z wykorzystaniem płytki stykowej.

hts221_plytka_stykowa
Całość zadziałała, ale okazało się to niezbyt wygodne, gdyż testowałem układ w warunkach polowych i wygodniejsze okazało się wykonanie specjalnego kabla.


hts221_kabel
Zadaniem dostarczonego przykładu jest wyświetlenie zmierzonej temperatury i wilgotności powietrza. Na początku programu, po konfiguracji sygnałów taktujących rdzeń mikrokontrolera, kontrolera przerwań oraz ustawieniu odpowiednio portów GPIO systemu, jest ustawiana konfiguracja sprzętowa HTS221_I2C_HwConfig(). W tej funkcji odpowiednim ustawieniom podlegają piny i port dla komunikacji I2C oraz konfigurowany jest tryb pracy magistrali komunikującej się z czujnikiem.

Kolejnym zadaniem jest inicjalizacja i wyczyszczenie wyświetlacza alfanumerycznego, włączenie wszystkich diod LED zestawu ZL27ARM oraz napisanie komunikatu o nieprawidłowym stanie linii CS.

Program sprawdza stan linii CS do momentu, aż wystąpi logiczne „1”. W przeciwnym razie informacja na temat błędu na LCD nie zmieni się, a program nie będzie wykonywał kolejnych kroków.

Jeśli linia CS jest w odpowiednim stanie (logiczne „1” – czujnik pracuje w magistrali I2C), zmieniony zostaje opis wskazujący tym razem na usterkę magistrali I2C:

Jeżeli inicjalizacja czujnika mająca na celu zapisanie i weryfikację odpowiednich danych w rejestrach, a tym samym przeprowadzająca test magistrali zakończy się powodzeniem program kontynuuje działanie. Prócz ustawienia odpowiednich parametrów pracy układu HTS221 w funkcji inicjalizacyjnej HTS221_I2C_Init() jest sprawdzany także numer ID układu (HTS221_I2C_Who_Am_I()). Jeśli magistrala byłaby sprawna, a czujnik zgłosił by inny numer identyfikacyjny niż nadany przez producenta, program zmieni odpowiednio opis błędu i wstrzyma działanie.

Dopiero po tych czynnościach, które nie są krytyczne dla systemu, a mają na celu tylko i wyłącznie sprawdzenie poprawności połączeń oraz samego czujnika, program przechodzi do funkcji odczytującej i odpowiednio formatującej rejestry konfiguracyjne MEMS-a o nazwie HTS221_I2C_Calib(). Zawierają one szereg istotnych danych zdefiniowanych przez producenta umożliwiających poprawne przeliczanie danych z rejestrów temperatury i wilgotności tak, aby wynik był dokładny i zrozumiały dla człowieka.

W następnej kolejności wyłączone zostają wszystkie diody LED zestawu ZL27ARM sygnalizujące wcześniej błędy, a na wyświetlaczu pojawi się napis informujący o teście linii DRDY.

Jako że czujnik dokonuje pomiaru i aktualizuje rejestry wyjściowe co 1 sekundę, program czeka w pętli na zgłoszenie przez czujnik zakończenia pomiarów (DRDY – Data Ready). W przypadku gdyby po ok 1,5 s zgłoszenie nie nastąpiło, sygnalizowany jest błąd DRDY i zapalane są wszystkie diody LED zestawu ZL27ARM. Następnie program „zawiesza się” w nieskończonej pętli (while(1)).

Przy poprawnej pracy, po zgłoszeniu gotowości danych (DRDY), mikrokontroler wykonuje program zawarty w funkcji HTS221_I2C_Read_Temp_Humi(&tempCelsius, &humi), która sprawdza status rejestrów temperatury i wilgotności. Ma to na celu upewnienie się, że dane w nich zawarte są aktualne i nie zmienią się przed najbliższym odczytem. Następnie mikrokontroler odczytuje dane z rejestrów temperatury i wilgotności powietrza, na których przeprowadza interpolację liniową bazując na wcześniej uzyskanych danych kalibracyjnych i wreszcie zwraca wartość temperatury wraz z wilgotnością powietrza. Gdyby mierzone wartości przekraczały wartości graniczne czujnika, funkcja w takim przypadku zwróci graniczne wartości temperatury oraz wilgotności.

Na zakończenie w funkcji main() jest dokonywana zamiana zmiennych typu float na ciąg znaków w tablicy oraz jego wyświetlenie na wyświetlaczu alfanumerycznym. Obsługiwana jest także jedna dioda LED zestawu ZL27ARM, która mrugając sygnalizuje poprawną pracę modułu KAmodHTS221.

Wygląda to na trochę skomplikowane, ale tak na prawdę po inicjalizacji układu HTS221, wystarczy wywołać funkcję

i w zmiennych &tempCelsius i &humi mamy odczytane i przeliczone do „ludzkiej postaci” wartości mierzonych parametrów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *