Rejestrator parametrów powietrza – SMOG LOGGER


BBair sensor
Sensor BBair wyposażony jest w dokładny, laserowy czujnik PMS7003. Umożliwia wykonywanie zdalnych pomiarów zawartości pyłów zawieszonych w powietrzu. Mierzy też jego temperaturę i wilgotność względną, korzystając z precyzyjnego układu SHT20.
Prezentację wyników pomiaru powierzono aplikacji BBair, która na ekranie smartfonu z systemem Android pokazuje, jaki jest aktualny stan badanego powietrza.
Po odpowiednim skonfigurowaniu sensor BBair może wykonywać pomiary jakości powietrza w dwóch równoległych trybach:

  1. Pomiar na żądanie: w dowolnej chwili, po nawiązaniu połączenia Bluetooth Smart, sensor rozpoczyna wykonywanie pomiarów, przesyłając wyniki do urządzenia mobilnego.
  2. Pomiary automatyczne: wykonywane cyklicznie z przesyłaniem wyników do komputera kolekcjonującego i przetwarzającego dane.

Takie dualne działanie sensora umożliwia sprawdzenie stanu powietrza w konkretnej, interesującej nas chwili przy pomocy smartfona i jednocześnie zbieranie długookresowych danych analitycznych.
Wykorzystując mały, popularny mikrokomputer Raspberry Pi, dostajemy nieograniczone wręcz możliwości rejestracji, analizy, prezentacji i publikacji zebranych danych pomiarowych. Odpowiednie do naszych zastosowań będą Raspberry Pi 3 lub Raspberry Pi Zero W fabrycznie wyposażone w interfejs Bluetooth Low Energy. Dzięki bibliotece bbmagic_lib jest możliwe bardzo łatwe i szybkie napisanie programu zbierającego dane z sensorów jakości powietrza.

Konfiguracja sensora BBair

Na początek zajmiemy się skonfigurowaniem samego sensora BBair. Mamy do wyboru trzy okresy wykonywania pomiarów automatycznych: 15 minut, 1 godzina lub 3 godziny. Ustawienia żądanego okresu pomiarowego dokonujemy po uprzednim wyłączeniu zasilania za pomocą odpowiedniego połączenia pól konfiguracyjnych.
BBair konfiguracja okresu pomiaru
Nie wykonując żadnego połączenia pól, programujemy sensor do pracy w trybie pomiarów na żądanie, bez wykonywania pomiarów automatycznych.

Konfiguracja Raspberry Pi

Mikrokomputer Raspberry Pi Zero W z zainstalowanym systemem operacyjnym Raspbian Lite jest idealnym narzędziem do celów zbierania i przetwarzania danych z sensora.
Ponieważ biblioteka zapewniająca komunikację z sensorami BBair ma również możliwość sterowania trzema diodami LED, wykonamy kilka połączeń, aby skorzystać z tego udogodnienia. Kolorowe diody będą informowały o stanie pracy programu. Przyłączmy zatem do Raspberry Pi diody z szeregowymi rezystorami, jak pokazano na schemacie.
Raspberry Pi zero W BBMagic LEDs
Żółta dioda dołączona do pinu 13 zaświeci się, gdy uruchomimy aplikację, i zgaśnie, jeśli program zostanie zamknięty. Mrugające: zielona i czerwona, informują o trwającej komunikacji radiowej, odpowiednio – odbieraniu i wysyłaniu danych.

Oprogramowanie Raspberry Pi

Aby móc zbudować aplikację, potrzebujemy narzędzi (kompilator, linker). Logujemy się zatem do elektronicznej maliny i instalujemy cały pakiet poleceniem

sudo apt-get install gcc

Będzie też potrzebny edytor plików tekstowych. Możemy użyć małego nano, instalując go komendą

sudo apt-get install nano

Do odbierania danych pomiarowych udostępnianych przez sensor jakości powietrza użyjemy biblioteki bbmagic_lib w wersji 2.0. Pobierzmy ją wraz z całym projektem BBair SMOG logger poleceniem

wget http://bbmagic.net/download/src/BBair_SMOG_logger_1.0.tar.gz

Następnie rozpakujmy pobrane archiwum komendą

tar -zxvf BBair_SMOG_logger_1.0.tar.gz

…i przechodzimy do nowo powstałego katalogu

cd BBair_SMOG_logger_1.0

bbair_smog_logger pobieranie
Projekt BBair SMOG logger zawiera następujące zasoby:

  1. w katalogu libs znajdują się niezbędne biblioteki,
  2. plik bbmagic_lib.h zawiera deklaracje stałych oraz funkcji zaimplementowanych w bibliotece bbmagic_lib.
  3. Makefile to plik instrukcji sterujących procesem kompilacji,
  4. bbair_smog_logger.c to plik z kodem źródłowym naszego programu

Projekt zawiera też gotowy, skompilowany już plik bbair_smog_logger. Jeśli chcielibyśmy natychmiast go uruchomić, to uprzednio dla pewności modyfikujemy prawa dostępu poleceniem:

chmod 755 bbair_smog_logger

I po tym zabiegu uruchamiamy komendą:

sudo ./bbair_smog_logger

Przeanalizujmy ten kod

Nasz program będzie odbierał dane o stanie jakości powietrza, jego temperaturze i wilgotności, wyświetlał je w formie tekstowej na ekranie monitora oraz zapisywał do pliku tekstowego. Uruchamiamy zatem edytor, aby zobaczyć na ekranie zawartość pliku źródłowego

nano bbair_smog_logger.c

Na początku załączone zostały niezbędne pliki nagłówkowe, a następnie zdefiniowane stałe konfigurujące nasz program. RX_LED_PIN to numer pinu, do którego podłączyliśmy zieloną diodę LED sygnalizującą odbieranie danych, TX_LED_PIN to pin z diodą sygnalizującą nadawanie (czerwona), a RUN_LED_PIN to ten z diodą informującą o uruchomionym programie (żółta). TIME_BUF_SIZE definiuje rozmiar bufora potrzebnego m.in. do wyświetlenia aktualnego czasu.
Na starcie głównej funkcji loggera sprawdzamy wersję użytej biblioteki bbmagic_lib i jeśli nie jest to wersja 2.0, kończymy działanie, informując o niekompatybilności. Jeśli dysponujemy biblioteką w odpowiedniej wersji, możemy skorzystać z zaimplementowanych tam funkcji, które będą nam potrzebne.
W kolejnym kroku uruchamiamy zatem komunikację bbmagic over BLE, wywołując funkcję

i = bbm_bt_open(RX_LED_PIN, TX_LED_PIN, RUN_LED_PIN, LIB_SHOW_CONFIG) ;

Przyjmuje ona 4 argumenty. Pierwsze 3 to zdefiniowane uprzednio numery pinów z diodami LED. Jeśli numer pinu przyjmie wartość zero, to jego funkcja sygnalizacyjna nie zostanie włączona. Czwarty argument to flagi bitowe określające, jakie rodzaje komunikatów biblioteka powinna wysyłać na ekran podczas działania. Flagi można oczywiście ustawiać niezależnie: LIB_SHOW_CONFIG | LIB_SHOW_BBAIR spowoduje wyświetlanie komunikatów startowych i danych odebranych od sensora BBair. Ponieważ my chcemy samodzielnie formatować i wyświetlać dane otrzymane od sensora jakości powietrza, użyjemy wyłącznie flagi LIB_SHOW_CONFIG. Szczegółowy opis dostępnych flag i ich nazw symbolicznych poniżej.

Nazwa flagi Włącza wyświetlanie
LIB_SHOW_CONFIG Komunikaty raportujące start biblioteki
LIB_SHOW_SENSORS Dane odebrane od sensorów BBMagic
LIB_SHOW_ACTORS Dane odebrane od aktorów BBMagic
LIB_SHOW_BBAIR Dane odebrane od sensora BBair

W kolejnych liniach kodu dokonujemy próby otwarcia pliku, który posłuży do przechowywania, danych pomiarowych. Funkcję fopen wywołamy w ten sposób, aby dopisywać dane na końcu istniejącego pliku. Wskazuje na to parametr „a”. Jeśli plik jeszcze nie istnieje, funkcja utworzy nowy.

logFile = fopen(„bbair_smog_log.txt”, „a”) ;

Teraz zajmiemy się samym jądrem naszej aplikacji. Odbieranie danych pomiarowych opiera się na cyklicznym wywoływaniu zaimplementowanej w bibliotece bbmagic_lib funkcji

bbm_id = bbm_bt_read(bbm_buf) ;

Jeśli zwróci ona „0”, to oznacza, że nie nadeszły nowe dane. Wartość „-1” informuje, że użytkownik nacisnął Ctrl+C i zażądał zakończenia działania programu. Wtedy przerywamy główną pętlę do{…}while(bbm_id != -1), zamykamy komunikację BBMagic over BLE (bbm_bt_close()) i plik logowania, jeśli wcześniej został poprawnie otwarty (fclose(logFile)) i kończymy działanie (exit(0)). Jeśli natomiast funkcja zwróci liczbę większą od 0, to jest ona numerem ID urządzenia, które nadesłało wiadomość. W takim wypadku tablica bbm_buf[BBLIB_FRAME_SIZE] zawiera odebrane i zdekodowane dane. Sensor BBair ma numer ID=40 ukryty w stałej BBMAGIC_M_BBAIR i zdefiniowanej w pliku bbmagic_lib.h. Zawartość tablicy wypełnionej informacjami od sensora jakości powietrza szczegółowo przedstawia tabela.

Pozycja w buforze bbm_buf Symbol w bbmagic_lib.h Opis
0 BBM_BBAIR_STATUS Status przesłanych danych: 0 – dane aktualne, 1 – dane nieaktualne.
1 BBM_BBAIR_MEAS_TIME Czas w minutach jaki upłynął od ostatniego pomiaru.
2 BBM_BBAIR_PERIOD Okres w minutach wykonywania pomiarów automatycznych.
3 BBM_BBAIR_V_BAT Napięcie zasilania sensora BBair. Należy podzielić przez 71 aby otrzymać wartość w woltach.
4 BBMAGIC_DEVICE_TYPE ID modułu, który nadesłał dane. Wszystkie dostępne są zdefiniowane w pliku ‚bbmagic_lib.h’
5 BBM_BBAIR_TEMP_MSB Temperatura powietrza – starszy bajt.
6 BBM_BBAIR_TEMP_LSB Temperatura powietrza – młodszy bajt.
7 BBM_BBAIR_RH Wilgotność względna.
8 BBM_BBAIR_PM10_MSB Zawartość pyłów frakcji PM10 starszy bajt.
9 BBM_BBAIR_PM10_LSB Zawartość pyłów frakcji PM10 młodszy bajt.
10 BBM_BBAIR_PM2_5_MSB Zawartość pyłów frakcji PM2.5 starszy bajt.
11 BBM_BBAIR_PM2_5_LSB Zawartość pyłów frakcji PM2.5 młodszy bajt.
12 BBM_BBAIR_PM1_MSB Zawartość pyłów frakcji PM1 starszy bajt.
13 BBM_BBAIR_PM1_LSB Zawartość pyłów frakcji PM1 młodszy bajt.
14 BBM_BBAIR_FIRM_1 Wersja oprogramowania sensora.
15 BBM_BBAIR_FIRM_0 Wersja oprogramowania sensora.
16 do 21 BBMAGIC_DEVICE_ADDR_5-BBMAGIC_DEVICE_ADDR_0 Adres sensora BBair.
22 BBMAGIC_DEVICE_RSSI Moc odbieranego sygnału radiowego RSSI w dBm.

Dalsza część pętli głównej sprawdza, czy odebrane dane pochodzą od sensora BBair

if(bbm_id == BBMAGIC_M_BBAIR)

Jeśli tak, to przelicza i wyświetla zawarte w tablicy ‘bbm_buf’ dane, ale robi to tylko w przypadku, gdy flaga aktualności informacji jest równa zero.

if(bbm_buf[BBM_BBAIR_STATUS] ==0)

Wyzerowana flaga oznacza, że sensor wykonał już pomiar i udostępnia poprawne wyniki. W przeciwnym wypadku, gdy flaga ma wartość inną niż zero, wyświetlany jest tylko adres sensora wraz z odpowiednim komunikatem o oczekiwaniu na aktualne dane.
Pozostaje jeszcze pytanie, w jaki sposób zapisywać kolejne porcje danych pomiarowych do pliku? Sensor BBair dostarcza bowiem kolejnych informacji co około 1 sekundę, ale pomiary są wykonywane co 15, 60 lub 180 minut, w zależności od wybranej konfiguracji. Byłoby przecież bezcelowym zapisywanie do pliku każdej odebranej ramki danych. Mamy na szczęście prosty sposób na zorientowanie się, czy otrzymane właśnie dane są świeże, czy może dotyczą historycznego pomiaru sprzed powiedzmy kilkudziesięciu minut. Jak już wiemy z powyższej tabeli, pole bbm_buf[BBM_BBAIR_MEAS_TIME] każdej nadesłanej ramki danych zawiera czas w minutach, który upłynął od ostatniego pomiaru. Widzimy więc, że wartość ta będzie systematycznie rosła, aż do momentu, w którym zostanie zakończony kolejny pomiar i nowe wyniki zostaną dostarczone do aplikacji. Wtedy nastąpi jej wyzerowanie, ponieważ od wykonanego właśnie pomiaru upłynęło 0 minut. Wystarczy więc zapamiętywać wartość tego pola w zmiennej m_time i jeśli spełniony zostanie warunek

if( bbm_buf[BBM_BBAIR_MEAS_TIME] < m_time)

zapisać do pliku kolejny wiersz zawierający aktualne dane pomiarowe.

Kompilacja i odpalenie aplikacji

Skompilujmy teraz nasz projekt, wpisując polecenie

make

Następnie możemy już uruchomić program naszego loggera:

sudo ./bbair_smog_logger

Włączamy zasilanie uprzednio skonfigurowanego sensora BBair, a ekran monitora będzie wyglądał tak:
bbair_smog_logger oczekiwanie
Jeśli po dwóch minutach nie pojawią się pierwsze wyniki, oznacza to, że sensor nie pracuje w trybie automatycznych pomiarów i należy sprawdzić połączenia pól konfiguracyjnych. Przy prawidłowej konfiguracji na ekranie pojawiać się będą wyniki kolejnych pomiarów:
bbair_smog_logger pomiary
Znajdziemy tam: godzinę pomiaru, temperaturę i wilgotność oraz kolejno zawartość zawieszonych w powietrzu pyłów frakcji PM10, PM2.5 oraz PM1. Dalej aktualne napięcie zasilania sensora (może zostać wykorzystane do kontroli stanu baterii zasilających) i moc odbieranego sygnału radiowego RSSI podany w dBm. Liczby w ostatnim nawiasie kwadratowym to kolejno: czas, jaki upłynął od ostatniego pomiaru oraz czas, jaki pozostał do kolejnego pomiaru. W pliku bbair_smog_log.txt zapisywane są w kolejnych wierszach rezultaty pomiarowe, jak pokazano poniżej.
bbair_smog_logger dane
Kolejne dane rozdzielone są przecinkami, co bardzo ułatwia ich import do arkusza kalkulacyjnego. Pewnym kłopotem jest to, że temperatura i napięcie zanotowane są z kropką dziesiętną, czego nie przyjmuje program arkusza, oczekując w tych miejscach przecinka. Zamiana kropek na przecinki jest jednak dziecinnie prosta: wystarczy skorzystać z funkcji 'znajdź/zamień' (często pod skrótem klawiszowym Ctrl+f) i wszystkie kropki w mgnieniu oka stają się przecinkami.
Już po kilku dniach zbierania danych pomiarowych można przeprowadzić ciekawe analizy parametrów powietrza
bbair_smog_logger wykres PM
bbair_smog_logger wykres T i RH
Pozostaje jeszcze kwestia drobnego usprawnienia, aby nasz logger działał w tle, umożliwiając normalny dostęp do konsoli. Użyteczne w tym przypadku będzie narzędzie ‘screen’. Szczegółowy opis, jak go zainstalować i użyć: Screen i możesz się wylogować

Tagi , , .Dodaj do zakładek Link.

Komentarze są wyłączone.