Prosty logger podstawowych parametrów powietrza

W poprzednim wpisie przedstawiłem wam porównanie trzech platform IoT. Dziś chcę pokazać, jak przeprowadzałem testy – a dokładniej, czego używałem jako źródła danych.

Ostatnio strasznie lubuję się w wykorzystywaniu do wszystkich projektów ESP8266 – tanie, proste, szybkie i wygodne (Łączność WiFi w standardzie? Biorę to!). Kiedyś użyłbym go tylko jako modułu WiFi do Arduino – dziś widzę, że to po prostu nie ma sensu, bo marnuje się tyle mocy procesora ESP8266. Dlatego właśnie moje źródło danych, jakim jest ten logger, opiera się na samym ESP8266 – i jako urządzeniu odbierającym dane z czujników, i jako urządzeniu nadającym te dane w eter (internet, jak kto woli).

Wybór czujników

Najważniejszym z mojego punktu widzenia jest czujnik temperatury. Na początku zdecydowałem się tylko na DHT11, głównie przez to, że przy okazji mogłem mierzyć wilgotność – dodatkowy plus. Później okazało się, że dokładność odczytów nie pozwala na dogłębne sprawdzenie platform IoT – DHT11 był umieszczony w moim domu, miał mierzyć temperaturę i wilgotność wewnątrz niego. I wszystko byłoby dobrze, gdyby nie to, że temperatura była praktycznie niezmienna, także w nocy 😉

Żeby zobaczyć jakiekolwiek ciekawsze wyniki, byłem zmuszony dołożyć w środku eksperymentu dodatkowy czujnik temperatury – DS18B20. On znajdował się już na dworzu, co widać na załączonych przeze mnie na dole wykresów – przy okazji możecie zobaczyć, jak bardzo różniły się one odczytami:

DHT11Temp DS18B20Temp ComparisionTemp

Jak widać – na DHT11 nie można polegać w kwestii zmian temperatury. Gdyby ktoś jednak doczepił się tego, że być może był on w miejscu, które miało sporą izolację cieplną – w tym miejscu miałem też inny, niezależny czujnik (coś w stylu domowej stacji pogodowej) który ewidentnie zmieniał wskazywane wartości, wartość dzienna znacząco różniła się od nocnej.

Ale nie odrzucajmy DHT11 od razu, popatrzmy jak sprawdzał się z wykrywaniem zmian w wilgotności:

HumOriginal

Wygląda nieźle, co? Ale usuńmy niestabilne dane z początku i porównajmy surowe dane z czujnika do ich ruchomej średniej z okresem co około 25 odczytów, która powinna usunąć wartości odstające od linii trendu:

 

HumAvg

Na wykresie widać dobrze, że bez obróbki dane nadają się co najwyżej do podcierania sobie nimi tyłka (nawet do tego by się nie nadawały, są za szorstkie!). Do takich zastosowań jak prosty logger nie jest to rozwiązanie złe, ale mimo wszystko polecałbym się zaopatrzyć w coś lepszego, jak np. DHT22 – mimo wszystko to jeszcze nie szczyt marzeń, ale już coś lepszego niż to.

Schemat połączeń

Połączenie tego w całość nie było trudne – schemat jest bardzo prosty:

Logger Schema

Serio nie ma co się nad nim rozwodzić – ważne tylko, by w przypadku położonego na zewnątrz DS18B20 nie przekroczyć około 3 m długości kabla – potem jego opór zaczyna przeszkadzać w transferze danych.

Kod

No i to najważniejsze – trudności z nim nie było, jedyne co robi to zbiera dane i wysyła je kolejno do testowanych platform:

Jedyna ciekawa rzecz tutaj to funkcja errorOccured() – była konieczna ze względu na błędy którymi potrafił sypać DHT11. Jeżeli chcesz wykorzystać ten kod, musisz podmienić niektóre wartości na własne – będą to nazwa i hasło do twojej sieci WiFi, klucze do API Adafruit i Thingspeak oraz nazwa dweeta na dweet.io – tyle powinno starczyć 😉

W sumie to tyle powinno starczyć – z tą wiedzą możecie odtworzyć mój logger i pobawić się nim w domu!

Pewnie zauważyliście, że w tym wpisie było trochę statystyki – w następnym wpisie planuję przedstawić i zaimplementować w jakimś języku programowania regresję (jaką to się jeszcze zobaczy), metodę na aproksymację nieznanych wartości za pomocą tych już znanych. Choć brzmi strasznie, przydać może się często – elektronik może sobie na przykład na podstawie kilku pomiarów wykonać charakterystykę napięciową diody czy innego, dowolnego elementu.

Jeżeli masz jakieś pytania, sugestie – czekam w komentarzach!