Systemy dla Internetu Rzeczy (54). Bosch BME688 - czujnik gazu ze sztuczną inteligencją

Systemy dla Internetu Rzeczy (54). Bosch BME688 - czujnik gazu ze sztuczną inteligencją

BME688 firmy Bosch to pierwszy czujnik gazu ze sztuczną inteligencją (AI) i zintegrowanymi czujnikami ciśnienia, wilgotności i temperatury, odznaczającymi się wysoką liniowością i dokładnością. Jest umieszczony w solidnej, ale kompaktowej obudowie o wymiarach 3,0×3,0×0,9 mm i został opracowany specjalnie do zastosowań mobilnych i urządzeń do noszenia, w których rozmiar i małe zużycie energii są krytycznymi wymaganiami. Czujnik gazu może wykrywać lotne związki organiczne (VOC), lotne związki siarki (VSC) i inne gazy, takie jak tlenek węgla i wodór w zakresie części na miliard (ppb). Jedną z głównych zalet BME688 jest możliwość bezpośredniego użycia przetworzonych danych pomiarowych z czujników w aplikacjach pracujących w czasie rzeczywistym.

AKTUALNOŚCI
Firma Analog Devices ogłosiła 26 sierpnia 2021 zakończenie przejęcia firmy Maxim Integrated Products. Połączenie jeszcze bardziej wzmacnia pozycję ADI jako firmy produkującej półprzewodniki analogowe z 12-miesięcznymi przychodami przekraczającymi 9 miliardów USD. Po wcześniejszym przejęciu 10 marca 2017 firmy Linear Technology Corporation powstaje wiodąca firma zajmującą się technologią analogową i cyfrową oferującą najbardziej wszechstronny w branży pakiet wysokowydajnych ofert analogowych. Postępująca integracja na rynku produkcji elementów półprzewodnikowych może mieć duży wpływ na zintegrowaną ofertę dla Internetu Rzeczy.

Czujnik jakości powietrza BME688 jest rozszerzeniem możliwości czujnika BME680 (bardzo popularnego w zastosowaniach Internetu Rzeczy) o funkcję skanera gazu [1]. Układ scalony BME688 to kilka bloków w jednej strukturze: czujnik ciśnienia i temperatury (jak w układzie BMP280) z rozszerzeniem o czujnik wilgotności (jak w układzie BME280), czujnik ciśnienia wilgotności (jak w układzie BME380) i z czujnikiem gazu (jak w układzie BME680) oraz dodatkowo funkcja skanera gazu [S35].

Układ jest skonstruowany jako moduł SIP (System In Package) z kilkoma strukturami scalonymi CMOS. Układ cyfrowy interfejsu oraz przetwarzania cyfrowego, a także układ analogowo-cyfrowy (wzmacniacze i przetworniki ADC) jest wykonany w postaci struktury typu ASIC [S35]. Czujnik wilgotności względnej jest wykonany w technologii MEMS z zastosowaniem pomiaru zmian pojemności kondensatora z polimerową folią [S32]. Czujnik ciśnienia barometrycznego jest wykonany w technologii MEMS z zastosowaniem pomiaru rezystancji cienkiej membrany. Pomiar temperatury jest wykonywany poprzez pomiar zmian napięcia diody krzemowej. Każda struktura scalona zastosowana w układzie scalonym BM688 zawiera czujnik temperatury.

Czujnik gazu układu BME688 jest wytwarzany w technologii MOX. Pozwala to na uzyskanie bardzo dobrej jakości pomiaru, bardzo krótkiego czasu powtarzania pomiaru i bardzo znaczącej redukcji pobieranej mocy. Gazy, które mogą być wykrywane przez BME688, obejmują (niemal wszystkie) lotne związki organiczne (VOC – Volatile Organic Compounds), lotne związki siarki (VSC – Volatile Sulfur Compounds) oraz inne gazy jak tlenek węgla (CO) i wodór (H) w zakresie ppb (part per bililion). Czujnik był testowany specjalnie z siarkowodorem (H2S), etanolem (OH), tlenkiem węgla (CO) oraz VOC zawartym w powietrzu wydychanym przez ludzi. Wykrywanie VSC było testowane dla koncentracji H2S pomiędzy 0,1...0,5 ppm dla temperatury 5...40°C, wilgotności 20...80% przy ciśnieniu atmosferycznym.

Czujnik gazu wykonuje sekwencję pomiarów z różnymi czułościami podczas jednego skanowania gazu. W ten sposób może wygenerować określony „odcisk palca” dla różnych mieszanek gazów. Ponadto można modyfikować i optymalizować profil skanowania we własnej aplikacji za pomocą BME AI-Studio [5].

W standardowej konfiguracji układu obecność VSC jest wykrywana jako wskaźnik m.in. wzrostu bakterii. Skaner gazu można dostosować pod względem czułości, selektywności, szybkości transmisji danych i zużycia energii. Narzędzie BME AI-Studio umożliwia użytkownikom wytrenowanie skanera gazu BME688 pod kątem ich konkretnych zastosowań, takich jak urządzenia domowe, produkty IoT lub Smart Home [5].

Układ BM688 jest zamknięty w metalowej obudowie (LGA8) o rozmiarach 3×3×0,93 mm [3]. Daje to bardzo dobrą odporność na zakłócenia elektromagnetyczne [2]. Czujnik ma w obudowie otwór o średnicy mniejszej niż 1 mm. Następuje dyfuzja gazu do środka i na zewnątrz obudowy, co trwa kilka sekund. Nie ma potrzeby stosowania wymuszonego przepływu gazu. Ze względu na podgrzewanie w czujniku MOX powierzchni roboczej następuje wewnątrz obudowy układu wzrost temperatury oraz spadek wilgotności. Do uzyskania precyzyjnych pomiarów VOC wymagany jest zewnętrzny pomiar temperatury i wilgotności.

Nowy układ scalony wymaga wykonania procedury stabilizacji. Układ musi pracować co najmniej 24 godziny przed rozpoczęciem wykonywania pomiarów. Nie wolno dotykać placem układu scalonego. Tłuszcz ze skóry pozostanie na powierzchni czujnika i upłynie dużo czasu do jego odgazowania. To będzie powodowało generowanie błędnych danych pomiarowych.

Działanie układu BME688

Układ scalony BME688 ma trzy tryby pracy (zasilania): uśpienie (sleep), praca pojedyncza (forced mode) oraz praca równoległa (paralel mode) [2]:

  • W trybie uśpienia nie są wykonywane pomiary i układ pobiera minimalną moc;
  • W trybie pracy pojedynczej wykonywany jest pojedynczy pomiar w sekwencji (TPHG): temperatura, ciśnienie, wilgotność, rozpoczęcie podgrzewania czujnika gazu, wykonanie pomiaru gazu i zakończenie grzania. Po zakończeniu pomiaru gazu układ automatycznie powraca do stanu uśpienia;
  • W trybie pracy równoległej wykonywana jest wielokrotna sekwencja TPHG i układ nie przechodzi do stanu uśpienia.

Tryb pracy jest ustawiany za pomocą bitów mode <1:0> rejestru Config (pod adresem 0x75). Wpis 00b oznacza ustawienie trybu uśpienia, 01b pracy pojedynczej, a 10b pracy równoległej. Układ po włączeniu zasilania automatycznie ustawia tryb uśpienia.

Temperatura jest profilowana w dziesięciu krokach (G0...G9) podczas cyklu skanowania. Każdy krok jest określony przez temperaturę mikropłytki (micro-hotplate), czas trwania (w jednostkach o czasie 140 ms) oraz wartość prądu grzejnika, np. HP-354. Czas podgrzewania jest liczony od momentu włączenia grzejnika do momentu rozpoczęcia pomiaru rezystancji czujnika gazu. Czas podgrzewania można ustawiać od 1 do 4032 ms. Typowo ustawia się temperaturę pracy czujnika gazu na poziomie pomiędzy 200 a 400°C. Wewnętrzna pętla sterowania grzejnika pracuje z uwzględnieniem zmian rezystancji grzejnika. Program użytkownika musi na podstawie wymaganej temperatury wyliczyć ustawienia rejestrów sterujących. W dokumentacji podane są wzory obliczeniowe oraz wskazane są rejestry z wartościami parametrów do tych obliczeń [2]. Na końcu każdego kroku wykonywane są pomiary i zapamiętywanie wyników. Sekwencja kroków jest określana jako profil grzania (HP, Heater Profile).

Standardowy profil grzania, przeznaczony do detekcji VSC, został pokazany na rysunku 1.

Rysunek 1. Standardowy profil grzania [5]

Wypełnienie (RDC, Duty Cycle) określa sekwencję liczby wykonywanych cykli skanowania i liczbę cykli uśpienia (Sleeping), np. RDC-5-10. Każdy cykl skanowania jest przejściem przez profil grzania. Podczas cyklu uśpienia czujnik przechodzi w stan uśpienia i budzi się co 3 s na 200 ms, aby wykonać pomiar TPH. Standardowy czas cyklu skanowania trwa 54 s, a cyklu uśpienia 108 s [2]. Układ wykonuje pomiary z maksymalną szybkością dla ustawienia RDC-1-0. Wtedy nie są wykonywane żadne cykle uśpienia.

Ustawienia czujnika wymagają określenia wartości pełnej kombinacji HP/RDC. Sposób pracy i odpowiednie wzory obliczeniowe dla pomiaru temperatury, ciśnienia i wilgotności są opisane w literaturze [2].

Odczyt danych pomiarowych trzeba rozpocząć od odczytu rejestru stanu Eas_status_0 (0x1D) z polami bitowymi:

  • <7> New data – dane nowego pomiaru są zapisane w rejestrach;
  • <6> Gas measuring – zmiana stanu na zero sygnalizuje zakończenie pomiaru gazu;
  • <5> Measuring – zmiana stanu na zero sygnalizuje zakończenie wszystkich pomiarów;
  • <3:0> Gas meas index – numer konfiguracji pracy czujnika gazu.

Następnie trzeba sprawdzić bity stanu gas_valid_r oraz heat_stab_r w rejestrach gas_r_lsb[0/1/2], aby ustalić, czy dane pomiarowe są poprawne oraz czy grzejnik pracował stabilnie. Następnie odczytane dane z rejestrów danych układu należy przeliczyć z uwzględnieniem danych z rejestrów kalibracyjnych układu.

W przypadku długiej sekwencji pomiarów gazu działanie wewnętrznego grzejnika powoduje wystąpienie stałego podwyższenia mierzonej temperatury oraz obniżonego odczytu wilgotności. Można to zjawisko skompensować poprzez uwzględnienie stałej poprawki lub odczytu tych parametrów z dodatkowych czujników zewnętrznych.

Firmowa biblioteka BSEC udostępnia cztery tryby poboru mocy zasilania czujnika. Określają one szybkość pomiarów oraz średni pobór prądu [2]:

  • Tryb skanowania (SC) – pomiary są wykonywane co 10,8 s [3,96 mA];
  • Tryb bardzo niskiego poboru mocy (ULP) – pomiary są wykonywane co 300 s [0,09 mA];
  • Tryb szybki bardzo niskiego poboru mocy (q-ULP) – pomiary T, P, H są wykonywane co 3 s, a pomiar gazu co 300 s [0,1 mA];
  • Tryb niskiego poboru mocy (LP) – pomiary są wykonywane co 3 s [0,9 mA];
  • Tryb ciągły (CONT) – pomiary są wykonywane co 1 s (raczej do testowania) [12 mA].

Parametry układu BME688

  • Zakres pracy (przy pełnej dokładności):
    • ciśnienie (P): 300...1100 hPa,
    • wilgotność (H): 0…100%,
    • temperatura (T): –40…85°C,
    • jakość powietrza (IAQ) 0…500;
  • Zasilanie cyfrowe VDDIO: 1,2...3,6 V (1,6 V typ.);
  • Zasilanie analogowe VDD: 1,71...3,6 V (1,8 V typ.);
  • Interfejs: I2C i SPI;
  • Średni pobór prądu (1 Hz): 2,1 μA (H+T), 3,1 μA (P+T), 3,7 μA (H+P+T), 90 μA (P+H+T+AQ) w trybie ULP, 0,9 mA (P+H+T+AQ) w trybie LP, 3,9 mA (SC);
  • Prąd uśpienia/oczekiwania: 0,15/0,29 μA typ.

Czujnik gazu

  • Metoda pomiarowa: półprzewodnikowy scalony czujnik gazu w technologii MOX;
  • Wyjście: rezystancja czujnika do obliczeń IAQ;
  • Przetwarzanie danych wyjściowych: bezpośrednie dane wyjściowe o jakości powietrza IAQ;
  • Zakres IAQ: 0...500 z rozdzielczością 1 (dokładność 3 max.);
  • Czas odpowiedzi (33...63%): 0,75/1,4/92 s (tryb C/LP/ULP) typ.;
  • Odchylenie czujnik-czujnik: ±15%;
  • Rozdzielczość pomiaru rezystancji: 0,08% typ.;
  • Prąd grzejnika praca/max.: 12/17 mA typ.;
  • Czas grzania (ustawiany cyfrowo): 1...4032 ms (typowo 20...30 ms);
  • Słowo danych: 16 bitów;
  • Średni pobór prądu: 3,96 mA (0,18 mAh) (w standardowym trybie skanowania gazu – 5 cykli skanowania, 10 cykli uśpienia).

Czujnik wilgotności

  • Czas odpowiedzi: (0...63%): 8 s;
  • Tolerancja dokładności: ±3% wilgotności względnej;
  • Histereza: ≤1,5% wilgotności względnej.

Czujnik ciśnienia

  • Szum RMS: 0,12 Pa (odpowiada 1,7 cm);
  • Błąd czułości: ±0,25% (odpowiada 1 m przy zmianie wysokości 400 m);
  • Współczynnik temperaturowy przesunięcia: ±1,3 Pa/K (odpowiada ±10,9 cm przy zmianie temperatury o 1°C).

Rejestry wewnętrzne

Układ zawiera wiele 8-bitowych rejestrów, służących do kalibracji, sterowania, odczytu danych, sprawdzania statusu oraz wiele zarezerwowanych. Dostępna jest przestrzeń adresowa z zakresu 0x00...0xFF. Rejestry mają inny adres przy dostępnie poprzez interfejs I2C oraz SPI:

  • Podczas pracy z interfejsem I2C stosowany jest adres 8-bitowy z dostępem do całej przestrzeni adresowej;
  • Podczas pracy z interfejsem SPI stosowany jest adres 7-bitowy z dostępem do dwóch stron wybieranych przez ustawienia rejestru spi_mem_page. Po włączeniu zasilania wybrana jest strona zerowa (0x80...0xFF). Wpisanie do rejestru spi_mem_page wartości 1 powoduje wybranie strony 1 (0x00...0x7F).

Mapa i opis rejestrów są zamieszczone w dokumencie BME688 Datasheet [2]. Mapa nie zawiera wszystkich rejestrów, a opis nie zawiera omówienia niektórych istotnych rejestrów układu.

Interfejs komunikacyjny

Interfejs komunikacyjny układu BME688 ma osobne wyprowadzenie zasilania – VDDIO. Poziom wysoki sygnałów wejściowych interfejsu cyfrowego odnosi się do poziomu napięcia na tym wyprowadzeniu [2]. Układ może pracować w trzech konfiguracjach wyprowadzeń, są to standardy dla: I2C, SPI (4 linie) i SPI (3 linie). Wyprowadzenie SCK pracuje zawsze jako wejście. Wyprowadzenie SDI pracuje jako wejście (SPI 4 linie), wejście/wyjście SPI (3 linie) lub jako linia dwukierunkowa danych (I2C). Wyprowadzenie SDO pracuje jako wyjście (SPI 4 linie) lub jako wejście wyboru adresu (I2C). Wyprowadzenie CSB pracuje zawsze jako wejście. Pełni funkcję wejścia wyboru (chip select) dla pracy z interfejsem SPI.

Wybór standardu komunikacyjnego jest wykonywany na podstawie stanu wejścia CSB. Jeśli podczas włączenia zasilania układu wyprowadzenie CSB jest dołączone do napięcia VDDIO, to wybierany jest standard I2C. Poziom niższy niż VDDIO spowoduje trwałą pracę ze standardem SPI. Po podaniu na wejście CSB poziomu niskiego (nawet jeden impuls) aktywowany jest na stałe interfejs SPI. Obsługa interfejsu komunikacyjnego układu BME688 jest bardzo podobna do takiej obsługi dla układu BME680, co zostało opisane dla I2C w artykule [S36] a dla SPI w artykule [37] tej serii.

Interfejs I2C

Układ obsługuje cyfrową komunikację w standardzie I2C jako układ slave. Komunikacja z układem jest wykonywana poprzez odczyt lub wpis do rejestru.

Rysunek 2. Konfiguracja wyprowadzeń podczas pracy w standardzie I2C [2]

Podczas pracy układu BME688 w standardzie I2C do komunikacji używane są trzy wyprowadzenia (rysunek 2):

  • SCK – jako wejście zegara, linia SCL;
  • SDI – jako dwukierunkowa linia danych SDA, musi być zewnętrznie dołączona do napięcia zasilania poprzez rezystor podciągający (min. 4,7 kΩ);
  • SDO – jako wejście ustawiające wartość bitu LSB adresu:
    • GND=L, adres 1110110 (0x76),
    • VDDIO=H, adres 1110111 (0x77),
    • jeśli wyprowadzenie SDO pozostanie niepodłączone, to adres jest niezdefiniowany.

Interfejs I2C obsługuje trzy tryby pracy: Standard, Fast oraz High Speed. Maksymalna częstotliwość zegara wynosi 3,4 MHz, gdzie minimalny czas poziomu niskiego wynosi Tlow=160 ns (dla typowego zasilania VDDIO=1,62 V) [2]. Interfejs I2C używa adresowania 7-bitowego.

Interfejs SPI

Układ BME688 obsługuje komunikację w standardzie SPI w dwóch konfiguracjach wyprowadzeń: SPI (4 linie) lub SPI (3 linie) (rysunek 3).

Rysunek 3. Konfiguracja wyprowadzeń podczas pracy w standardzie: a) SPI 4 linie, b) SPI 3 linie [2]

Maksymalna częstotliwość zegara wynosi 10 MHz [2]. Interfejs SPI obsługuje dwa tryby pracy:

  • „00” – CPOL=CPHA=0,
  • „11” – CPOL=CPHA=1.

Automatyczny wybór trybu jest określany poprzez stan wejścia SCK po zboczu opadającym wejścia CSB.

Protokół obsługi obu trybów pracy SPI (4 linie) oraz SPI (3 linie) jest taki sam. Tryb SPI (3 linie) jest wybierany poprzez wpis 1 do rejestru spi3w_en. Podczas pracy układu BME688 w standardzie SPI do komunikacji używane są cztery wyprowadzenia:

  • CSB – wejście chip select (aktywne przy poziomie niskim),
  • SCK – wejście zegara,
  • SDI – wejściowa linia danych (SPI 4 linie) lub dwukierunkowa linia danych (SPI 3 linie),
  • SDO – wyjście danych (SPI 4 linie) lub wysoka impedancja (SPI 3 linie).

Interfejs SPI używa adresowania 7-bitowego i obsługuje dwa rodzaje transferu:

  • Odczyt pojedynczego bajtu (bit R/W=0+7b add+8b data);
  • Wpis pojedynczy lub wielokrotny bajtów – sekwencja (bit R/W=1+7b add+8b data).

Przestrzeń adresowa jest podzielona na dwie strony. Po włączeniu zasilania rejestr spi_mem_page (adr 0x73) jest wyzerowany i wybrana jest strona 0 z adresami rejestrów 0x80...0xFF (po wpisaniu 1 do tego rejestru wybrana jest strona z adresami rejestrów 0x00...0x7F).

Oprogramowanie firmowe dla układu BME688

Oprogramowanie dla układu BME688 jest dostępne ze strony BME688 Software [12]. Składa się ono z trzech elementów:

  • BME68x sensor API – pliki języka C do pobierania skompensowanych danych surowych z układu poprzez interfejsy I2C oraz SPI. Jest też wersja dla Arduino;
  • BSEC 2.x – biblioteka C (binarna) do obliczania kompletnych danych oraz interpretacji AI;
  • BME AI Studio – Aplikacja komputerowa do klasyfikacji AI.

Dobrym sposobem zapoznania się z użytkowaniem oprogramowania firmowego jest obejrzenie firmowej prezentacji Video „How gas sensing gets intelligent with BME688 and BME AI-Studio” [18].

Biblioteka BoschSensortec

Firmowe sterowniki dla układu BME688 są dostępne ze strony BME688 Software [12]. Repozytorium BoschSensortec udostępnia dwa komplety sterowników (Github):

  • BME68x-Sensor-API – sterowniki z opisem i przykładami dla układu BME680 oraz BME688 [13];
  • BSEC-Arduino-Library – biblioteka do Arduino do integracji biblioteki firmowej BSEC [14];

Pakiet programowy BME68x-Sensor-API zapewnia niskopoziomową komunikację z układem BME688 oraz kalibrację wartości odczytu z sensorów. Uwalnia to użytkownika od konieczności zajmowania się obsługą poszczególnych rejestrów układu scalonego i obsługuje komunikację z układem BME688 w dwóch standardach: I2C oraz SPI.

Pobierany z repozytorium plik BME68x-Sensor-API-master.zip zawiera trzy pliki źródłowe:

  • bme68x_defs.h – stałe, makra i deklaracje,
  • bme68x.h – deklaracje funkcji API,
  • bme68x.c – definicje funkcji API,
  • REDAME.md – opis sposobu dołączania sterowników do projektu użytkownika.

Dodatkowo jest udostępniany folder examples z plikami C dla pracy pojedynczej (forced mode), pracy równoległej (paralel mode) oraz sekwencyjnej (sequential). Wydaje się, że jest on przeznaczony dla firmowego środowiska COINES.

Biblioteka pomiarowa BSEC 2.0

Biblioteka BSEC 2.x (Bosch Sensortec Environmental Cluster) jest przeznaczona do obsługi pracy z czujnikami BME68x. BSEC jest dostarczana jako wstępnie skompilowana biblioteka statyczna, którą można połączyć z kodem mikrokontrolera. Kod z biblioteki jest zamknięty. Bibliotekę można darmowo pobrać w postaci pliku zip ze strony BME688 Software [12]. Wymagana jest rejestracja.

Komunikację oraz kompensację danych zapewnia driver firmowy. Biblioteka zapewnia również dodatkową kompensację pomiarów czujnika gazu z uwzględnieniem wilgotności oraz dryftu. Biblioteka BSEC 2.x pozwala dokonać precyzyjnych obliczeń, np. indeksu jakości powietrza IAQ. Kod jest wykonywany na platformach 8-, 16- i 32-bitowych, w tym AVR, ESP32, ARM, a także Raspberry Pi.

Indeks jakości powietrza IAQ (Indoor Air Quality) jest liczbą, która informuje o jakości powietrza we wnętrzach. Obecnie nie ma globalnego standardu definiującego IAQ, nie ma zgodności w zastosowaniu skali, liczby poziomów, nazw ani kolorów. Firma Bosch opracowała indeks IAQ obliczany dla czujników BME68x przez firmową bibliotekę BSEC. Ta klasyfikacja została pokazana w artykule [S36]. Kolorami zaznaczany jest poziom jakości powietrza.

Pobierany plik bsec_2-0-6-1_generic_release_04302021.zip zawiera: pliki binarne, dokument „BST-BME688-Integration-Guide-AN008-06” z dokładnym opisem, dokument „BSEC2 Binary Size Information” z listą obsługiwanych mikrokontrolerów i rozmiarami kodu, pliki z danymi konfiguracyjnymi dla różnych ustawień oraz przykładowy kod.

Jak zostało opisane powyżej, biblioteka BSEC udostępnia cztery tryby poboru mocy zasilania czujnika. Dla każdego trybu pracy są osobne konfiguracje dla pracy z napięciem zasilania 1,8 V oraz 3,3 V. Dodatkowo do każdej konfiguracji możliwa jest kompensacja długoterminowa z uwzględnieniem okresu 4 lub 28 dni.

Biblioteka BSEC udostępnia kilka istotnych parametrów:

  • Surowa wartość rezystancji – wartość pobrana z czujnika gazu;
  • Skompensowana wartość rezystancji [Ω] – wartość obliczona z uwzględnieniem temperatury i wilgotności;
  • Indeks IAQ (IAQ) – wartości 0...500 (używany jest algorytm automatycznego trymowania);
  • Statyczne IAQ (s-IAQ) – bez trymowania;
  • Poziom CO2 (eCO2) [ppm] – estymowany poziom CO2 na podstawie poziomu VOC;
  • Poziom VOC (b-VOC) [ppm] – estymowany poziom VOC dla powietrza wydychanego (breath);
  • Poziom gazu [%] – aktualny poziom rezystancji odniesiony do zapamiętanego najniższego odczytu (0%) oraz najwyższego odczytu (100%).
  • Rezultat skanowania gazu – prawdopodobieństwo dla zastosowanych klas. Dla skanowania standardowego dotyczy klas H2S i pozostałych.

Do pracy biblioteki BSEC potrzebne są firmowe sterowniki dla układu BME688 dostępne ze strony BME688 Software [12].

Oprogramowanie BME AI-Studio

Aplikacja BME AI-Studio firmy Bosch jest przeznaczona do obsługi pracy z czujnikiem BME68x. Aplikację można darmowo pobrać w postaci pliku zip ze strony BME688 Software [12]. Wymagana jest rejestracja. Pobierany plik bme_ai-studio-1-6-0-win.zip zawiera dokument „Release Note” z opisem oraz foldery z aplikacją. Manual „BME AI-Studio Documentation” [5] można pobrać bezpośrednio ze strony BME688 [1]. Do pracy biblioteki BSEC potrzebne są firmowe sterowniki dla układu BME688 dostępne ze strony BME688 Software [12].

Oprogramowanie BME AI-Studio umożliwia konfigurację czujników, analizę i etykietowanie danych, trenowanie i optymalizację rozwiązań specyficznych dla aplikacji. Oprogramowanie jest bardzo przyjazne dla użytkownika i wspiera go obszerną dokumentacją. Wszystkie informacje z czujnika można wykorzystać jako pojedyncze wartości lub połączyć w oprogramowaniu AI w celu rozpoznania określonych warunków lub stanów. W narzędziu programowym BME AI-Studio można zdecydować, czy używać danych z czujnika gazu do swojej aplikacji, czy też brać pod uwagę dane z czujnika ciśnienia, temperatury i wilgotności.

Standardowy profil został opracowany w celu wykrywania VSC. Istnieje kilka innych profili skanowania gazów dostępnych w narzędziu programowym BME AI-Studio, a nawet można skonfigurować swój własny profil. Aktualna wersja narzędzia programowego BME AI-Studio wykorzystuje wstępnie zdefiniowaną architekturę sieci neuronowej w połączeniu z jednym konfigurowalnym optymalizatorem do trenowania (optymalizator ADAM).

Praca z układem BME688

Układ BME688 przechowuje w swoim buforze tylko dane kalibracyjne (fabryczne) oraz profil skanowania i kilka słów surowych danych z ostatniego pomiaru. Mierzone dane muszą być na bieżąco odczytywane przez mikrokontroler (MCU) urządzenia, do którego jest podłączony BME688. W tej konfiguracji jedynym ograniczeniem dla rozmiaru danych pomiarowych jest pamięć urządzenia. Uruchamiając bibliotekę BME688 (BSEC) na MCU, wynikowe dane pomiarowe mogą być bezpośrednio obliczane. Dlatego nie trzeba przechowywać surowych danych, a jedynie wymagane wartości wynikowe.

BME AI-Studio wymaga komputera stacjonarnego do analizy danych i uzyskania najlepszego algorytmu. Jednak uruchomienie zdefiniowanego algorytmu wcale nie jest wymagające obliczeniowo. Na przykład ESP8266 lub ESP32 mogą robić wszystko w czasie rzeczywistym. Wymagane dane konfiguracyjne mają tylko kilka kilobajtów i mogą być przesyłane bezprzewodowo w celu aktualizacji działania czujnika. BME AI-Studio może wyeksportować wyszkolony algorytm jako ciąg konfiguracyjny, który można załadować do oprogramowania BSEC 2.0 na dowolnym urządzeniu z dołączonym BME688. Dzięki temu urządzenie może bezpośrednio wyprowadzać obliczone wyniki skanowania BME688.

Standardowy tryb skanowania gazów do wykrywania VSC jest opracowywany na podstawie danych z ogromnej liczby czujników i testów laboratoryjnych z różnymi gazami.

Moduły sprzętowe z układem BME688

Kilka firm oferuje moduły czujnikowe z układem scalonym BME680. Typowo moduły obsługują tylko komunikację standardu I2C i zawierają układ scalony BME680, czasami dodatkowo układy translacji poziomów sygnału cyfrowego i/lub regulator napięcia zasilania. Typowo firmy dostarczają własne wersje oprogramowania do łatwej obsługi układu BME688. Bardziej popularne dostępne moduły:

  • Moduł BME688 Breakout Board firmy pi3g zawiera układ BME688 skonfigurowany do pracy z szyną I2C [6]. Moduł jest dokładnie opisany dalej;
  • Moduł BME688 firmy Adafruit jest aktualizacją ich modułu BME680, z wymianą tylko układu scalonego [8]. Moduł zawiera układy translacji poziomów sygnału cyfrowego oraz regulator napięcia zasilania 3,3 V. Dostarczany jest w dwóch wersjach wykonania: z pojedynczym złączem grzebieniowym lub dodatkowo z zainstalowanymi dwoma gniazdkami standardu STEMA. Firma udostępnia bibliotekę CircuitPython driver for BME680 sensor over I2C dla Rasberry Pi;
  • Moduł BME688 firmy Piomoroni (PIM675) zawiera układy translacji poziomów sygnału cyfrowego oraz regulator napięcia zasilania 1,8 V [9]. Płytka zawiera złącze grzebieniowe oraz gniazdko standardu STEMA. Firma udostępnia bibliotekę BME680 Python dla Rasberry Pi;
  • Moduł s-Sense BME688 sensor breakout (ITBP-6003) firmy itbrainpower.net może pracować z zasilaniem 3,3...5 V [10]. Firma udostępnia biblioteki dla Rasberry Pi oraz Arduino.

Osobną klasę stanowi zestaw BME688 Gas Sensor Developer Kit firmy pi3g, który zawiera płytkę pośrednią z 8 układami BME688, płytkę Adafruit Huzzah32 – ESP32 z wpisanym oprogramowaniem firmy Bosch oraz kartę SD z plikami konfiguracyjnymi [11]. Układy BME688 zamontowane w zestawie pracują z komunikacją w standardzie SPI [4]. Jest to pierwszy zestaw gotowy do pracy z aplikacją BME AI Studio. Dzięki ośmiu czujnikom BME688 zestaw umożliwia testowanie i gromadzenie danych dla więcej niż jednej konfiguracji pomiarowej w tym samym czasie.

Moduł BME688 Breakout Board firmy pi3g

Moduł ten zawiera układ BME688 skonfigurowany do pracy z szyną I2C (rysunek 4). Szyna zasilania 3,3 V jest dołączona do wyprowadzeń zasilania analogowego oraz cyfrowego układu BME688 i ma kondensator 1 μF umieszczony bezpośrednio przy układzie scalonym (niepokazany na schemacie). Moduł pobiera 50 mA (max.) prądu i może być bezpośrednio zasilany z płytki Rasberry Pi (jest zasilany z szyny 5 V).

Rysunek 4. Podłączenie układu MBE688 zawartego w module BME688 Breakout Board [7]

Wyprowadzenie CSB (Chip Select) układu BME688 jest dołączone do VDDIO, co oznacza, że układ może pracować tylko z interfejsem w standardzie I2C. Moduł obsługuje sygnały standardu 3,3 V. Nie można go podłączać do sygnałów 5 V. W takim przypadku potrzebny jest dodatkowy układ konwersji poziomów logicznych.

Fotografia 1. Moduł BME688 Breakout Board firmy pi3g [6]

Układ scalony BME688 jest zamontowany daleko od złączy płytki, co pozwala na poprawną pracę czujnika z daleka od źródeł ciepła (fotografia 1) [7]. Wejście ustawiania adresu szyny I2C (SDO) układu scalonego jest dołączone poprzez rezystor 10 kΩ do zasilania 3,3 V (adres 0x77). Obok znajduje się zwora J1 w postaci pola lutowniczego, co umożliwia dołączenie wejścia SDO do masy – wtedy dla komunikacji I2C układ ma adres 0x76 (oznaczenie „ADDR: -1”). Obie linie sygnałowe szyny I2C (SCL i SDA) są dołączone do zasilania 3,3 V poprzez rezystory podciągające 10 kΩ.

Na płytce modułu są zamontowane dwa gniazdka JST z wyprowadzonymi sygnałami SCL, SDA oraz masą i zasilaniem (3,3 V) oznaczone jako X2 (rysunek 5) oraz X3 (rysunek 5). Na wystającym fragmencie płytki drukowanej jest zamocowane 6-stykowe złącze żeńskie 2,54 mm oznaczone X4. Schemat wyprowadzeń tego złącza został pokazany na rysunku 5.

Rysunek 5. Złącza modułu BME688 Breakout Board [7]

Na odwrotnej stronie płytki znajdują się opisy: 5 V (X4.2), NC (X4.4) i GND (X4.6). Złącze to jest przeznaczone do bezpośredniego nałożenia na początkowe szpilki złącza GPIO płytki Raspberry Pi (jak na fotografii tytułowej) [6]. Raspberry Pi ma dwa wyprowadzenia sygnału I2C na GPIO 2 (SDA) i GPIO 3 (SCL) dla I2C0 (master). Szpilka numer 2 złącza RPI pasuje do X4.2 na płytce BME688 Breakout Board. Niestety, nie jest udostępniony pełny schemat modułu, a na tym udostępnionym są błędy. Na przykład pin X4.1 oznaczony na płytce jako +3V3 nie jest nigdzie dołączony. Za to do pinu X4.2 jest dołączony regulator napięcia 3,3 V dostarczający napięcie zasilania układu BME688.

Przy krawędzi płytki drukowanej modułu znajduje się złącze X1 w postaci złoconych otworów o rastrze 2,54 mm. Otwory są naprzemiennie nieznacznie poprzesuwane względem linii prostej (fotografia 2).

Fotografia 2. Dołączenie modułu BME688 Breakout Board do płytki Raspberry Pi Pico [6]

Można do nich wcisnąć standardowe złącza szpilkowe, które się stabilnie trzymają bez konieczności lutowania (co umożliwia wielokrotną wymianę różnych ich typów).

Rysunek 6. Wyprowadzenia złącza Raspberry Pi [19]

Złącze ma wyprowadzone sygnały SCL, SDA oraz masę i zasilanie (rysunek 5) w sposób kompatybilny ze złączem GPIO płytki Raspberry Pi Pico (rysunek 7). Wystarczy wyrównać pozycje 3,3 V na obydwu złączach (fotografia 2).

Rysunek 7. Wyprowadzenia złącza Raspberry Pi Pico [20]

Oprogramowanie do obsługi modułu BME688 Breakout Board

Biblioteki i aplikacja są przeznaczone do pracy z płytką BME688 Breakout Board firmy pi3g dołączoną do Raspberry Pi (1B...4B) lub Raspberry Pi Pico. Biblioteka BME68X for C and Python firmy pi3g obsługuje odczyt danych z układu BME68x z użyciem języka C lub jako rozszerzenie Python 3 [15]. Biblioteka obsługuje też (licencyjną, darmową) bibliotekę BSEC 2.0 firmy Bosch. Umożliwia to obliczanie indeksu IAQ. Rozszerzenie dla Python 3 jest też dostępne jako repozytorium Github [16].
Aplikacja BME688 AirMeter, dla środowiska PiCockpit instalowanego na Raspberry Pi, umożliwia odczyt czujników BME680 i BME688 poprzez łącze I2C [17]. Aplikacja ma trzy różne widoki, co pozwala na wygodną wizualizację danych.

Podsumowanie

Czujnik BME688 został opracowany w celu wykrywania gazów wydychanych przez człowieka. Mierzy stężenie lotnych związków organicznych (VCO), lotnych związków siarki (VSC) i innych rodzajów gazów, takich jak tlenek węgla i wodór, oraz generuje wskaźnik jakości powietrza (IAQ).

Pandemia COVID-19 podkreśliła znaczenie poprawy jakości powietrza w pomieszczeniach. Główną drogą infekcji wirusowej jest wydychany przez człowieka aerozol. Im wyższe jego stężenie, tym wyższe ryzyko i wpływ infekcji. Ze względu na grawitację większe krople zawarte w wydychanym aerozolu opadają stosunkowo szybko. Jednak maleńkie kropelki i cząstki mogą pozostawać zawieszone w powietrzu nawet przez wiele godzin i ulegać znacznemu rozproszeniu. Aby zmniejszyć ryzyko infekcji, niezbędna jest częsta wentylacja. Kolory indeksu IAQ mogą być używane jako prosty mechanizm wyzwalający, aby skutecznie regulować wentylację w pomieszczeniu: pomieszczenie można przewietrzyć, otwierając okna, gdy odbiegają one od zielonego paska.

Obecnie zastosowanie czujnika BME688 nastręcza jednak kłopoty. Do poprawnej pracy modułu BME688 Breakout Board trzeba wygenerować dane konfiguracyjne. Wymaga to użycia aplikacji BME AI-Studio. A aplikacja pracuje obecnie tylko z zestawem BME688 Gas Sensor Developer Kit. Są zapowiedzi, że następna wersja aplikacji będzie już obsługiwać moduł BME688 Breakout Board. Rezultaty praktycznego zastosowania modułów BME688 Breakout Board zostaną opisane w jednym z kolejnych artykułów kursu.

Henryk A. Kowalski
Instytut Informatyki
Politechnika Warszawska

Literatura
Wybrane artykuły kursu „Systemy dla Internetu Rzeczy” w miesięczniku „Elektronika Praktyczna”:
[S32] Scalone czujniki cyfrowe wilgotności i temperatury, EP 12/2019
[S35] Cyfrowe czujniki gazu, EP 3/2020
[S36] Pomiar jakości powietrza, ciśnienia, wilgotności i temperatury czujnikiem BME680 dołączonym do zestawu startowego CC1352R1 LaunchPad z transmisją protokołem I2C, EP 4/2020
[S37] Pomiar jakości powietrza, ciśnienia, wilgotności i temperatury czujnikiem BME680 dołączonym do zestawu startowego CC1352R1 LaunchPad z transmisją protokołem SPI, EP 5/2020

Literatura
[1] BME688, Environmental sensing with Artificial Intelligence, Bosch Sensortec, https://bit.ly/3qf05lh
[2] BME688, Digital low power gas, pressure, temperature & humidity sensor with AI, Datasheet, Rev1.0, April 2021, BST-BME688-DS000, Bosch Sensortec, https://bit.ly/3vUwmkk
[3] ME688, 4-in-1 environmental sensor unit with AI, Flyer, Ver1.1, 03.2021, BST-BME688-FL000, https://bit.ly/3nxmHME
[4] BME688 Development Kit, Flyer, Ver1.1, 2021, BST-BME688-FL001, https://bit.ly/3bmtVNW
[5] BME AI-Studio Documentation, Manual, Ver1.0, June 2021, BST-BME688-AN001-00, https://bit.ly/3jM1Zb8
[6] ME688 breakout board Bosch air quality sensor, pi3g, https://bit.ly/3CpnghS
[7] PI3G BME688 BREAKOUT BOARD V0.2 (for V1.1), preliminary datasheet, 26.3.2021, pi3g, https://bit.ly/3EoLjOD
[8] Adafruit BME688 – Temperature, Humidity, Pressure and Gas Sensor – STEMMA QT, https://bit.ly/3mmnbGg
[9] BME688 4-in-1 Air Quality Breakout (Gas, Temperature, Pressure, Humidity), Pimoroni, https://bit.ly/3jMxqC9
[10] BME688 breakout, IBRrainpower, https://bit.ly/3EsirVC
[11] Bosch BME688 Gas Sensor Developer Kit, ByeZero, https://bit.ly/3nDfDhR
[12] BME688 Software, Bosch Sensortec, https://bit.ly/3EoM5v1
[13] BME68X Sensor API, Bosch Sensortec’s BME680 and BME688 sensor API, https://bit.ly/3CCoZAo
[14] BoschSensortec/BSEC-Arduino-library, https://bit.ly/3ClRrGK
[15] Python Library for BME68x on the Raspberry Pi, includes support for BSEC, https://bit.ly/3CqmS2N
[16] GitHub Repository – BME68X Open Source Python Library, https://bit.ly/3bnw1gs
[17] BME688 AirMeter App: monitor air quality, air pressure, temperature, humidity using the Raspberry Pi, https://bit.ly/3Er0UNH
[18] How gas sensing gets intelligent with BME688 and BME AI-Studio (long Version), 22 mar 2021, https://bit.ly/3CqlMUP
[19] Raspberry Pi GPIO Pinout: What Each Pin Does on Pi 4, Earlier Models, Les Pounder, June 16, 2020, https://bit.ly/3pNBJAI
[20] Raspberry Pi Pico zestaw startowy, Kamami, https://bit.ly/3jNSmsb
Artykuł ukazał się w
Elektronika Praktyczna
listopad 2021

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje kwiecień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich maj 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów