Układ prototypowy |
- Arduino Nano
- shield dla Nano (opcjonalny)
- wyświetlacz LCD 4x16
- moduł LCM1602 (sterowanie LCD po I2C)
- czujnik BME280
- moduł RTC DS3231 & AT24C32
- moduł zapisu karty SD
- czujnik zanieczyszczeń powietrza SDS011
Funkcjonalność
- Pomiar następujących parametrów powietrza:
- Temperatury (co 5s)
- Wilgotności względnej (co 5s)
- Ciśnienia atmosferycznego (co 5s)
- Pyłów zawieszonych PM2.5 i PM10 (co 3 minuty)
- Prezentacja aktualnego czasu i wyniku pomiarów na wyświetlaczu LCD
- Rejestrowanie czasu i wyniku pomiarów na karcie pamięci SDHC w pliku tekstowym o formacie csv co 5 minut
Dane wyświetlane są naprzemiennie z racji na ograniczoną ilość informacji jakie można zaprezentować na użytym wyświetlaczu (4 linie x 16 kolumn). Przez 4s pokazywane są dane z BME280, przez kolejne 2s - dane z SDS011. Dodatkowo, po włączeniu stacji, dane o zanieczyszczeniu nie są prezentowane do momentu wykonania pomiarów.
Uruchomienie
Kod wraz z logami na terminal zamieszczam tradycyjnie w repie na bitbuket-cie w branchu part3_serial.
Schemat blokowy |
Poniżej zdjęcia wyświetlacza LCD (jeszcze z folią stąd te odblaski i niechlujny wygląd ekranu) z wynikami pomiarów z BME280 (temperatura T, wilgotność H i ciśnienie P) oraz z SDS011 (PM2.5 i PM10). Dodatkowo pojawia się napis /BASE/ który mówi, że aktualnie prezentowane są dane ze stacji bazowej. Trochę tu wyprzedzam przyszłość, bo plany są takie aby dane tu prezentowane pochodziły z różnych źródeł (np. bezprzewodowych czujek, czy z API pogodowego z danymi o pogodzie z mojego miasta).
Wyniki pomiaru z BME280 |
Wyniki pomiaru z SDS011 |
W porównaniu do poprzedniej wersji stacji, zmniejszyłem częstotliwość pobierania danych z czujnika BME280 z 1 do 5 sekund oraz dla wysyłkę danych na terminal z 1s do 1min. Obecnie, dodatkowo wysyłane są informacje o aktywacji i deaktywacji czujnika SDS011 i wyznaczone średnie wartości pomiarów. W funkcji updateSdsData() można znaleźć jeszcze inne zakomentowane dane możliwe do wysłania na terminal, ale moim zdaniem nie aż tak istotne. Przeniosłem je z przykładu ze źródła (1).
Dane przesyłane na terminal |
Zarejestrowane dane w pliku csv na karcie pamięci |
Udoskonalenia
Po napisaniu kodu, doszedłem do wniosku, że warto byłoby zgrać pomiary czujnika SDS011 z zapisem danych do pliku.Tym samym pomiary byłyby wykonywane co 5min i byłby zysk na dłuższym życiu lasera z czujnika. Poza tym, jeśli po włączeniu stacji stacji, nie będzie "leciał" zapis na kartę pamięci to mogą się zapisać domyślne wartości PM'ów czyli zera.
W przyszłości dodałbym także buzzer ostrzegający o przekroczeniu norm zanieczyszczeń. W moim przypadku oznacza to ręczne uruchomienie oczyszczacza powietrza. Póki co, oczyszczacz jest jeszcze na gwarancji, więc nie kombinuję z ingerencją w jego elektronikę i automatyczne uruchamianie.
Źródła:
1) Przykład SDS011_Extended_SoftwareSerial z biblioteki hafu/SDS011
2) Specyfikacja czujnika BME280
3) Strona SDS011 producenta
Brak komentarzy:
Prześlij komentarz