wersja mobilna

Laserowy, bezprzewodowy sensor smogu dla Raspberry Pi

Numer: Maj/2019

W jednym z poprzednich numerów zaprezentowany został projekt sensora smogu z bezprzewodową technologią Bluetooth Low Energy. Wyposażony w dokładny, laserowy czujnik PMS7003 umożliwia on wykonywanie zdalnych pomiarów zawartości pyłów zawieszonych w powietrzu. Mierzy też temperaturę i wilgotność względną, korzystając z precyzyjnego układu SHT20. Prezentację wyniku pomiaru powierzono aplikacji BBair, która na ekranie smartfonu z systemem Android pokazuje, jaki jest aktualny stan badanego powietrza. Okazuje się, że z zaprezentowanego sensora można wycisnąć znacznie więcej funkcjonalności. I właśnie tym zajmiemy się dzisiaj.

Pobierz PDF

Rysunek 1. Połączenie pól konfiguracyjnych: czas 15 minut

Rysunek 2. Połączenie pól konfiguracyjnych: czas 60 minut

Rysunek 3. Połączenie pól konfiguracyjnych: czas 180 minut

Rysunek 4. Schemat połączenia diod LED

Rysunek 5. Pierwsze kroki podczas konfigurowania systemu

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, na przykład za pomocą smartfonu 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.

Jak to zrobić? Sensor 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. Szczegóły pokazano na rysunkach 1…3. Nie wykonując żadnego połączenia pól, programujemy sensor do pracy w trybie pomiarów na żądanie, bez wykonywania pomiarów automatycznych.

Jak to zrobić? Raspberry Pi

Mikrokomputer Raspberry Pi Zero W z zainstalowanym systemem operacyjnym Raspbian Lite jest idealnym narzędziem do naszych celów. 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 z rysunku 4. Żół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, diody LED poinformują o trwającej komunikacji radiowej, odpowiednio - odbieraniu i wysyłaniu danych.

Jak to zrobić? Software

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 przejdźmy do nowo powstałego katalogu

cd BBair_SMOG_logger_1.0

Powyższe kroki pokazano na rysunku 5. Projekt BBair SMOG logger zawiera następujące zasoby:

  • w katalogu libs znajdują się niezbędne biblioteki,
  • plik bbmagic_lib.h zawiera deklaracje stałych oraz funkcji zaimplementowanych w bibliotece bbmagic_lib.

Makefile to z kolei plik instrukcji sterujących procesem kompilacji, a bbair_smog_logger.c to plik z kodem źródłowym naszego programu. Projekt zawiera też skompilowany plik bbair_smog_logger. Jeśli chcielibyśmy natychmiast go uruchomić, to uprzednio modyfikujemy prawa dostępu poleceniem

chmod 755 bbair_smog_logger

I po tym zabiegu uruchamiamy komendą

sudo ./bbair_smog_logger

Jeśli natomiast mamy ochotę coś zmodyfikować w kodzie programu lub po prostu samodzielnie go skompilować, to możemy teraz spokojnie przystąpić do analizy.

Analizowanie kodu programu

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 (listing 1). 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 początku 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 zawiera tabela 1.

Następnie 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 2.

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 sekundy, 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 pokazuje tab. 2, 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 uruchomienie programu

Rysunek 6. Ekran po uruchomieniu programu

Rysunek 7. Wyniki pomiarów jakości powietrza, temperatury i wilgotności

Rysunek 8. Plik logowania wyników pomiarów

Rysunek 9. Przykładowa analiza wyników pomiarów - wilgotność i temperatura

Rysunek 10. Przykładowa analiza wyników pomiarów - pyły zawieszone

Rysunek 11. Wyniki pomiarów prezentowane na wyświetlaczu

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ł jak ten przedstawiony na rysunku 6. 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 (rysunki 1…3). Przy prawidłowej konfiguracji na ekranie pojawiać się będą wyniki kolejnych pomiarów jak na zrzucie ekranu z rysunku 7. 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 na rysunku 8. 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 (rysunek 9 i rysunek 10).

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ć, można zaleźć pod adresem http://bit.ly/2PelGHN.

W kolejnym artykule o badaniu jakości powietrza zbudujemy w kilka chwil stację monitorującą, która będzie zasilana energią słoneczną. Wyniki pomiarów w atrakcyjnej formie zaprezentuje kolorowy czterocalowy, graficzny wyświetlacz LCD sterowany przez Raspberry Pi zero W (rysunek 11).

Mariusz Żądło

Pozostałe artykuły

Agri-Stick - urządzenie do monitorowania parametrów gleby w rolnictwie

Numer: Lipiec/2019

Agri-Stick to prosty zespół sensorów podstawowych parametrów gleby, które przydatne są w rolnictwie. Urządzenie to zostało opracowane przez Kavinkumara Nkl z Indii, jako sposób na proste i niedrogie zdalne monitorowanie upraw - w ten sposób rolnicy w Indiach nie muszą jeździć na pola, żeby sprawdzić, czy konieczne jest włączenie systemu nawadniającego czy nie. Rozwiązanie opisane w tym artykule może służyć jako inspiracja ...

Stacja pogodowa na Raspberry Pi

Numer: Czerwiec/2019

Fundacja Raspbery Pi wysłała do szkół na całym świecie ponad 10 tysięcy stacji pogodowych opartych na module HAT z zestawem potrzebnych sensorów. Teraz każdy w domu może skonstruować taką stację pogodową na bazie zaproponowanych modułów z sensorami lub po prostu samodzielnie łącząc układy scalone z komputerem jednopłytkowym Raspberry Pi.

Programowany kolorowy wskaźnik poziomu napięcia

Numer: Czerwiec/2019

Wskaźniki służą do sygnalizacji stanu obserwowanej wielkości fizycznej. Zamiast szczegółowego wyniku pomiaru, wskaźnik przekazuje informację ogólną, co często jest dużo praktyczniejsze. Ten projekt pokazuje, jak można zastosować płytkę NUCLEO do budowy wskaźnika poziomu napięcia wykorzystującego do sygnalizacji diody WS2812B. Urządzenie jest proste w budowie, z dowolnie programowalnymi progami, których przekroczenie będzie ...

KindleBerry Pi

Numer: Czerwiec/2019

Lubicie czasem posiedzieć z laptopem w parku? Albo popracować zdalnie w barze przy plaży lub latem w kawiarni, w malowniczej miejscowości skąpanej w słońcu? Brzmi fajnie, nie? Niestety, ci co spróbowali, szybko odkryli, że słońce i laptop to nie jest dobre połączenie - klasyczne ekrany LCD nie nadają się do pracy przy dużym nasłonecznieniu. Gdyby tylko mieć laptop z ekranem EPD? W artykule pokazujemy, jak zbudować ...

Rower elektryczny

Numer: Maj/2019

Już od jakiegoś czasu stały się dosyć mocno popularne różne pojazdy z napędem elektrycznym. Na ulicach często możemy zobaczyć hulajnogę lub deskorolkę elektryczną. Tego typu pojazdy są bardzo tanie w eksploatacji oraz umożliwiają łatwe przemieszczanie się po utwardzonych nawierzchniach w większych aglomeracjach. Niestety większość małych pojazdów elektrycznych może poruszać się tylko po utwardzonych drogach, a dodatkowo ...

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Lipiec 2019

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym