Podobno każdy szanujący się elektronik musi kiedyś zbudować wzmacniacz audio, zegarek i termometr. Pamiętam swój pierwszy wzmacniacz na UL1481, zegarek na poczciwym 8051, ale jakoś nigdy nie mogłem się zabrać za termometr. Wychodziłem z założenia, że jak budować termometr, to z czujnikiem dołączanym bezprzewodowo, do czego dawniej po prostu brakowało podzespołów. Były one dostępne, ale tylko producentom OEM. Współcześnie każdy może nabyć moduł lub tzw. procesor radiowy z zaimplementowanym stosem Wi-Fi za rozsądną cenę. Otwiera to drogę do budowania wielu interesujących, niepowtarzalnych urządzeń. Od czegoś jednak trzeba zacząć.
Zaprojektowałem stację, która wyświetla ciśnienie, wilgotność i temperaturę panujące w pomieszczeniu, w którym jest zainstalowana oraz temperaturę zewnętrzną zmierzoną za pomocą czujnika z interfejsem bezprzewodowym Wi-Fi. Stacja bazowa pracuje w trybie AP i nie potrzebuje do działania rutera z Wi-Fi. Po załączeniu zasilania stacja automatycznie rozpoznaje typ współpracujących z nią czujników. Oprogramowanie obsługuje czujniki ciśnienia: BMP085, BMP180 i BMP280 oraz czujnikami wilgotności: DHT11, DHT22, HTU21D. Z założenia termometr miał mieć możliwe nieskomplikowaną budowę i możliwość zaprogramowania oraz uruchomienia bez potrzeby posiadania specjalnego wyposażenia. Udało się to osiągnąć, ponieważ jedyne, co jest potrzebne, to przejściówka USB/UART pracująca przy napięciu zasilającym 3,3 V.
W projekcie zastosowano moduły z zamontowanymi czujnikami ciśnienia i wilgotności, co zwalnia z konieczności bardzo trudnego do wykonania w warunkach domowych lutowania elementów SMD w obudowach LGA. Dodatkowo, zastosowany moduł Wi-Fi oraz mikrokontroler z rodziny STM32F103 można zaprogramować z użyciem taniej przejściówki USB/UART.
Schemat ideowy stacji pokazano na rysunku 1. Zastosowanie gotowych modułów z czujnikami ciśnienia i wilgotności sprawia, że budowa urządzenia jest nieskomplikowana i w zasadzie ogranicza się do wykonania zasilacza na napięcie 3,3 V, mikrokontrolera oraz kilku układów peryferyjnych, w tym wyświetlacza LCD i modułu Wi-Fi.
Cała funkcjonalność urządzenia jest zawarta w mikrokontrolerze STM32F103C8T6, który pracuje z użyciem wewnętrznego generatora HSI. Pierwotnie miał on być taktowany za pomocą rezonatora zewnętrznego, ale ostatecznie podczas prób okazało się, że generator HSI ma stabilność wystarczającą dla tej aplikacji. Do wyświetlenia danych z czujników użyto wyświetlacza graficznego wykonanego w technologii COG o rozdzielczości 128×64 piksele ze sterownikiem ST75765R, który był już opisywany na łamach EP. Pozostaje mi jedynie dodać, że jest to jeden z lepszych wyborów pod względem jakości, możliwości i ceny. Dzięki metalowym pinom jest on również bardzo łatwy do przylutowania. Układ podświetlenia wykonano na 1 diodzie LED, która przy prądzie 15 mA daje dosyć światła, aby nawet oświetlić pomieszczenie, w którym jest umieszczone urządzenie. Stacja ma czujnik natężenia oświetlenia zewnętrznego i dostosowuje poziom podświetlenia LCD do warunków panujących w pomieszczeniu.
Czujniki BMP085, BMP180 oraz BMP280 są wysokiej klasy czujnikami ciśnienia firmy Bosch. Charakteryzują się dużą dokładnością pomiaru ciśnienia i temperatury. Dwa pierwsze komunikują się za pomocą interfejsu I2C, a BMP280 umożliwia wybranie SPI lub I2C (wyboru dokonuje się dołączając wejście CSB do masy lub napięcia zasilania; w naszym wypadku do VCC, co powoduje aktywowanie interfejsu I2C). W zasadzie czujnik BMP180 jest zamiennikiem starszego modelu BMP085 – w tych samych rejestrach ma współczynniki kalibracyjne, a obsługa programowa jest niemal identyczna. W tabeli 1 wymieniono i porównano parametry czujników BMP180 i BMP280 (źródło – BMP280 Data sheet).
Jak wynika z tab. 1, nowszy czujnik BMP280 ma lepsze parametry. Dodatkowo, za pomocą rejestrów wewnętrznych jest możliwe wybranie trybu pracy, rozdzielczości pomiaru, ustawienie dodatkowego filtru IIR itp. Szczegóły można znaleźć w dokumentacji.
Czujnik HTU21D to wysokiej klasy czujnik wilgotności i temperatury firmy Measurement Specialties. Zakres pomiarowy temperatury -40…+125°C (rozdzielczość 0,01°C), a wilgotności 0…100% (rozdzielczość 0,04%). Za pomocą rejestrów wewnętrznych można wybrać rozdzielczość pomiaru, tryb pracy lub wykryć niski poziom napięcia zasilania czujnika. Jeśli nie zależy nam na dokładności i szybkości pomiaru, to możemy zastosować tańsze czujniki wilgotności DHT11 lub DHT22 dołączane do złącza oznaczonego „DHT22”. Ja zastosowałem HTU21D, który kosztuje niewiele więcej, a reaguje nawet na bardzo małe zmiany.
Odczyt parametrów zmierzonych przez czujniki, lokalnie i zdalnie, odbywa się w pętli głównej, co 5 sekund. Temperatura wewnątrz pomieszczenia jest odczytywana z czujnika ciśnienia. Dodatkowo, w dolnym prawym rogu jest wyświetlany czas w sekundach, który upłynął od ostatniego odczytu danych z czujnika zewnętrznego.
Moduł zewnętrznego czujnika temperatury
W czujniku zewnętrznym pracuje dobrze znany sensor DS18B20. Schemat ideowy modułu zewnętrznego pokazano na rysunku 2 Jak widać ogranicza się on do modułu WiFi, czujnika temperatury i zworki umożliwiającej zaprogramowanie układu. Dioda D1 zabezpiecza układ przed odwrotnym podłączeniem zasilania. Dzięki możliwości zaprogramowania układu ESP8266, nie musimy stosować dodatkowych mikrokontrolerów odczytujących temperaturę i sterujących pracą modułu.
Całość jest zasilania z dwóch baterii AAA. Moduł w trybie uśpienia pobiera około 20 mA. Płytkę drukowaną zaprojektowano pod kątem umieszczenia jej w obudowie Z32J, która ma miejsce na baterię 6F22 (9 V), jednak bardzo dobrze mieści się tam również koszyk z bateriami 2×AAA. Ponieważ pomiar temperatury jest wykonywany co 5 minut, to baterie starczają na około pół roku pracy.
Oprogramowanie
Oprogramowanie układu STM32 napisano w języku C za pomocą darmowej wersji kompilatora Atollic TrueSTUDIO. Oprogramowanie dla modułów WROOM-02 pracujących w trybie AP w stacji oraz w trybie Client w czujniku zewnętrznym napisano za pomocą Arduino IDE.
Montaż
Schemat montażowy stacji bazowej pokazano na rysunku 3, a zdalnego sensora na rysunku 4. Montaż rozpoczynamy od przylutowania elementów zasilacza i sprawdzenia jego napięcia wyjściowego. W tym celu zasilamy układ ze źródła napięcia – najlepiej stabilizowanego – z zakresu 5…7 V. Wyższe napięcie będzie powodowało grzanie się stabilizatora i może wpływać na fałszowanie wyników pomiaru temperatury z czujnika BMP. Jeśli napięcie za stabilizatorem wynosi 3,3 V, to możemy przystąpić do przylutowania mikrokontrolera STM32. Następnie lutujemy moduł WROOM-02, a dopiero na koniec wszystkie pozostałe elementy po stronie BOTTOM, łącznie z goldpinami. Teraz odwracamy płytkę na stronę TOP, montujemy kondensatory C1…C9 i w zależności od potrzeb – rezystory R6 i R7. Są to rezystory zasilające szynę I2C. Jeśli te rezystory są zamontowane na modułach czujników, to montaż R6 i R7 można pominąć.
Dopiero teraz możemy przystąpić do montażu podświetlenia LCD. Należy dość mocno rozchylić na boki końcówki diody LED i je przylutować, a następnie delikatnie przyłożyć sam wyświetlacz i również przylutować. Podobnie postępujemy z modułem czujnika zewnętrznego – zaczynamy od modułu Wi-Fi, a następnie pozostałe elementy. Po sprawdzeniu, czy nie ma zwarć, układ jest gotowy do zaprogramowania.
Uruchomienie
Do uruchomienia stacji potrzebna będzie tabelka z konfiguracją zworek – pokazano ją na rysunku 5. Taka sama tabelka jest nadrukowana na warstwie BOTTOM płytki drukowanej.
Po zaprogramowaniu odłączamy zasilanie układu, zakładamy zworkę na złącze STM32_BOOT i włączamy zasilanie. Od teraz powinien działać odczyt parametrów z czujników temperatury, wilgotności i ciśnienia. Jeśli na wyświetlaczu ukażą nam się pomiary, możemy przejść do programowania układu WROOM-02. W tym celu odłączamy zasilanie modułu i łączymy piny 3-5 oraz 2-4 za pomocą zworek w złączu JP6 (konfiguracja WROOM-02 programming). Zakładamy zworkę na piny złącza ESP_BOOT, włączamy zasilanie i uruchamiamy program Nodemcu Firmware Programmer – można pobrać go z Internetu. Aby go odnaleźć, należy w wyszukiwarce wpisać nazwę nodemcu flasher. W zakładce Operation należy wybrać port COM, do którego mamy dołączoną przejściówkę. W zakładce Advanced ustawiamy: Baudrate – 115200, Flash size – 2Mbyte, Flash speed 40MHz, SPI Mode – DIO. Przechodzimy do zakładki Config i wybieramy ścieżkę dostępu do programu do wgrania. Po lewej stronie zaznaczamy „x” w niebieskim małym kwadracie, po prawej – wybieramy adres 0x0000. Prawidłowe ustawienia pokazano na rysunku 6. Gdy wszystko jest ustawione, przechodzimy do zakładki Operation i klikamy przycisk START. Po chwili powinny zostać wyświetlone adresy MAC dla trybów AP i STA oraz rozpocząć się programowanie modułu. Po zakończeniu wyłączamy zasilanie stacji, zdejmujemy zworkę ze złącza ESP_BOOT, odłączamy przejściówkę i wpinamy zworki w złączu JP6 do trybu pracy NORMAL WORK (łączymy piny 1-2 i 5-6). Po włączeniu zasilania na wyświetlaczu powinny być wyświetlone wartości odczytane z czujników.
Możliwość rozbudowy
Na koniec kilka słów o możliwościach rozbudowy urządzenia. Oczywiście, można podłączyć więcej czujników zewnętrznych – osobiście testowałem z 12 rozmieszczonymi w całym domu i wszystko pracowało prawidłowo. Istnieje również możliwość dołączenia do modułu zewnętrznego innych czujników np. wilgotności, nasłonecznienia, można dokonywać pomiaru napięcia itp. Ograniczeniem jest tylko wyobraźnia konstruktora. Moduł WROOM-02 dzięki IDE Arduino programuje się tak samo, jak zwykły układ z mikrokontrolerem, a dzięki wielu darmowym bibliotekom praktycznie nie ma ograniczeń w zastosowaniach układu. Zachęcam do budowy własnych urządzeń z zastosowaniem tego modułu.
Grzegorz Burzyński
sp5ein@gmail.com