Czujnik mierzy trzy parametry fizyczne: temperaturę, wilgotność i ciśnienie. System, który zostanie tutaj zaprezentowany opiera się o jeden nadajnik danych oraz smartphone z aplikacją do odbioru tych danych. Nic jednak nie stoi na przeszkodzie, aby system rozbudować o kolejne czujniki i zbudować w ten sposób system informacji o parametrach atmosfery wewnątrz i na zewnątrz domu, mieszkania, lub dowolnego obiektu.
Schemat ideowy połączeń czujnika pokazano na rysunku 1. Zastosowane układy DHT11 oraz BMP180 pozwalają na odczyt podstawowych parametrów otoczenia. Są to łatwo dostępne i tanie części, przez co mają pewne ograniczenia. W wypadku DHT11 jest możliwe użycie „brata”, czyli DHT22 – układu o lepszych parametrach. Są one kompatybilne pod względem rozmieszczenia wyprowadzeń. Należy jedynie zmienić typ czujnika w kodzie programu. Podstawowe parametry sensorów wymieniono w ramce.
Moduł ESP-12 ma wyprowadzenia interfejsu szeregowego I2C. Są to piny numer 5 (SCL) i 4 (SDA). Interfejs I2C zgodnie ze swoją zasadą działania (wyjścia typu OD lub OC, iloczyn „na drucie”) wymaga zastosowania rezystorów podciągających. Kiedy tych rezystorów zabraknie, to ze względu na obecność rezystorów podciągających w strukturze mikrokontrolera komunikacja na krótkich odcinkach przypuszczalnie będzie działać bez zarzutu, jednak ze względu na sporą stałą czasową obwodu RC utworzonego przez rezystor pull-up mikrokontrolera i pojemność przewodu połączeniowego, ani nie da się osiągnąć zbyt dużej prędkości transmisji, ani dołączyć zbyt wielu układów do magistrali. Mogę też występować błędy transmisji ze względu na zbyt łagodne zbocza sygnału SCL. Dlatego zastosowano rezystory podciągające (zasilające) 4,7 kV.
Czujnik DHT11 komunikuje się za pomocą jednej linii opisanej DATA. Wymaga ona zewnętrznego rezystora podciągającego o oporności 10 kV. W dokumentacji czujnika jest opisane dokładnie, jak przebiega odczyt wartości. Społeczność Arduino udostępnia biblioteki do obsługi obu wspomnianych sensorów, przez co ich obsługa za pomocą predefiniowanego API jest nie nastręcza trudności i bardzo łatwo jest odszukać oraz wyeliminować błędy w kodzie.
Główny moduł Wi-Fi może działać w trybie oszczędnym lub stale oczekiwać na pakiety UDP poprzez tzw. „pooling”. Jeżeli źródłem zasilania będzie bateria lub jakiś akumulator, tryb oszczędny zdecydowanie wydłuży działanie urządzenia. W opisywanym wypadku, moduł czeka na pakiety w drugi wymieniony sposób, czyli „pooling”. W efekcie, kod jest łatwiejszy do analizy oraz mniej skomplikowany. Zestaw jest stroną odpytywaną, czeka na ruch ze strony aplikacji na smartphone i dopiero wtedy podejmuje jakieś działania.
Sensory poprawnie pracują przy zasilaniu napięciem 3,3 V, więc bez problemu można je zasilić z jednego źródła wspólnie z modułem ESP-12. Energooszczędność takiego zestawu przy odpowiednim oprogramowaniu modułu umożliwia zasilanie z baterii, więc czujnik może być umieszczony w dowolnym miejscu. Jedynym warunkiem jest zasięg sieci, za której pomocą aplikacje będą się porozumiewały.
Komunikacja pomiędzy telefonem oraz zestawem odbywa się na zasadzie Request <–> Response. Odbieraniem odpowiedzi zajmuje się aplikacja stworzona na system Android w wersji 4.1 lub nowszej. Aby zainstalować aplikację należy w ustawieniach zezwolić na instalowanie aplikacji spoza sklepu Google Play. Po instalacji należy w wolne pole wpisać IP a następnie nacisnąć connect, po chwili wartości powinny pojawić się na środku ekranu. Adres IP nawet po wyjściu z programu jest zapisywany, więc wystarczy tylko uruchomić aplikację, aby sprawdzić obecne wartości temperatury czy ciśnienia. Działanie tej aplikacji opiera się na wysłaniu na podany adres rozkazu „meas” a następnie oczekiwaniu na odpowiedź. Odpowiedź z danymi ma formę:
Start:temperatura:wilgotność:ciśnienie:stop
Następnie, w odstępach 10-sekundowych jest powtarzany rozkaz odczytu wartości. Odebrane pomiary wyświetlają się na ekranie w postaci:
Temperatura: 25.
Wilgotność: 34.
Ciśnienie: 960.
Sama aplikacja jest nieskomplikowana i wykonana specjalnie na potrzeby tego artykułu (rysunek 2). Pokazuje tylko jak łatwo wykorzystać telefon jako centrum domowego systemu pomiarowego. Po lekkich modyfikacjach, aplikacja mogła by odczytywać takie wartości jak, stan czujek alarmowych, ilość domowników, parametry otoczenia, stany lamp oraz włączonych urządzeń.
Jakub Kisiel
www.microgeek.eu