Wenn Sie an einem Luftqualitätsüberwachungsprojekt arbeiten und der Platz knapp bemessen ist, könnte das neueste Qwiic-Breakout-Board von SparkFun mit dem BMV080-Sensor von Bosch Sensortec genau das sein, was Sie brauchen. Dabei handelt es sich nicht nur um eine verkleinerte Version bestehender Feinstaubsensoren – dieser Sensor bietet beeindruckende Leistung in einem erstaunlich kompakten Format.

Ultrakompaktes Design

 

Mit Abmessungen von nur 4,4 mm × 3,0 mm × 3,0 mm ist der BMV080 derzeit der kleinste Feinstaubsensor auf dem Markt. Laut Bosch Sensortec ist er über 450-mal kleiner als vergleichbare Geräte. Aufgrund seiner geringen Größe ist die Integration auf einem Breakout-Board besonders sinnvoll – genau das hat SparkFun umgesetzt. Tatsächlich ist SparkFun sogar noch einen Schritt weiter gegangen und hat zusätzlich ein praktisches Gehäuse entworfen, das die Anwendung des Sensors noch benutzerfreundlicher gestaltet.

 
Sparkfun-air-quality-pm1pm25pm10-sensor-bmv080
Der BMV080 (im grünen Kreis dargestellt) misst 4,4 mm × 3,0 mm × 3,0 mm.

Kein Lüfter erforderlich

Der BMV080 nutzt integrierte Laser und Photodioden zur Echtzeit-Erkennung von Feinstaubpartikeln mit einem Durchmesser von 2,5 µm oder kleiner (PM2.5). Darüber hinaus berechnet der Sensor auch die Konzentrationen von PM1.0 und PM10. Er erfasst frei bewegliche Partikel in der Umgebungsluftströmung um das Gerät herum. Daher benötigt der Sensor weder einen Lüfter noch spezielle Lufteinlässe oder -kanäle. Das macht ihn leiser, energieeffizienter und einfacher in kompakten Gehäusen unterzubringen.

Bosch Sensortec bietet den BMV080 als kleines Modul an, das von SparkFun auf einem Breakout-Board montiert wurde – inklusive eines Qwiic-I²C-Steckverbinders im SparkFun-Standard für eine einfache Integration. Falls I²C in Ihrem Projekt nicht genutzt werden kann, lässt sich auch eine 0,1"-Stiftleiste für eine SPI-Schnittstelle bestücken. Dafür sind jedoch Änderungen an der Leiterplatte erforderlich.

Empfindlich, aber gut geschützt

Der BMV080 ist ein empfindliches Bauteil . Aus diesem Grund hat SparkFun ein spezielles Gehäuse mit integriertem Filter entwickelt, das den Sensor vor Verunreinigungen wie Staub oder Fingerabdrücken schützt. Dies ist besonders vorteilhaft bei gekapselten oder wetterfesten Designs. Der Filter erscheint zwar schwarz, beeinträchtigt jedoch nicht die Laserstrahlung. Der verbaute Laser arbeitet mit einer Wellenlänge von 850 nm (nahes Infrarot) und entspricht der Klasse 1. Das bedeutet, dass er unter normalen Anwendungsbedingungen als sicher gilt – auch bei direkter Betrachtung mit dem bloßen Auge.

 

Zur Nutzung des Luftqualitätssensors wird eine Softwarebibliothek benötigt. Bosch Sensortec stellt ein SDK für den BMV080 bereit, um das herum SparkFun eine Arduino-Bibliothek entwickelt hat. Die SparkFun-Bibliothek lässt sich wie eine normale Arduino-Bibliothek installieren. Um jedoch auf das Bosch-Sensortec-SDK zuzugreifen, muss zunächst ein Formular ausgefüllt werden, bevor das Archiv heruntergeladen werden kann. Anschließend müssen mehrere (für eine vollständige Installation 16) vorkompilierte Bibliotheken aus dem Bosch-Sensortec-Archiv in die SparkFun-Bibliothek kopiert werden. Das ist etwas umständlich, gibt aber Aufschluss darüber, welche Prozessoren unterstützt werden.

Unterstützte Plattformen

Wie sich herausstellt, werden als unterstützte Mikrocontroller-Plattformen der ESP32 (einschließlich S2 und S3) sowie Arm-Cortex-Kerne M0+, M33, M4(F) und M7(F) aufgeführt. Auch der Raspberry Pi und x86-Plattformen werden unterstützt. Nicht unterstützt hingegen werden der Arduino UNO R3 (AVR) und der R4 (Renesas). Das ist bedauerlich, da der UNO R4 über einen Qwiic-Anschluss verfügt und ich geplant hatte, ihn für meine Testversuche zu verwenden. Stattdessen musste ich Drähte an einen Raspberry Pi Pico anlöten, der über einen Arm Cortex M0+ Core verfügt (alternativ hätte auch ein ESP32-Modul funktioniert). Diese Einschränkung geht auf Bosch Sensortec zurück, nicht auf SparkFun. Vielleicht wird die Unterstützung in Zukunft ergänzt?

 
Bvm080 test system
Der Versuchsaufbau mit SDA an Pin 2 und SCL an Pin 3. Die weiße Leitung ist die IRQ-Leitung.

Erster Versuch

Mit einem an den Raspberry Pi Pico gelöteten Qwiic-Anschluss (SDA an Pin 4, SCL an Pin 5) lud ich das Beispiel-Sketch Example_01_BasicReadings hoch. Dieses lieferte folgende Werte im seriellen Monitor:

 
BMV080 Example 1 - Basic Readings
BMV080 found!
BMV080 set to continuous mode
PM10: ovf           PM2.5: ovf          PM1: ovf
PM10: ovf           PM2.5: ovf          PM1: ovf
PM10: ovf           PM2.5: ovf          PM1: ovf             Obstructed

So, either there is a problem, or I am working in a really polluted environment. Both assumptions can be true, unfortunately, as I don’t have anything to compare to. Trying the example sketch Example_02_DutyCycle produced similar results.

Bestes SDK überhaupt?


Bevor ich das Modul zurückschickte oder entsorgte, beschloss ich, das SDK von Bosch etwas genauer unter die Lupe zu nehmen. Und zu meiner angenehmen Überraschung entpuppte es sich als ein sehr vollständiges und gut dokumentiertes Software Development Kit – keineswegs nur eine Sammlung vorkompilierter Bibliotheken. Darin fand ich ein Beispielprojekt für den Arm Cortex-M0+, das speziell für das Adafruit RP2040 Feather Board vorgesehen war. Um es mit meinem Raspberry Pi Pico zu verwenden, musste ich SDA an Pin 2, SCL an Pin 3 anschließen und zusätzlich eine Leitung vom IRQ-Pin des BMV080-Moduls (direkt neben dem Qwiic-Anschluss) zu Pin 7 des Pico verlöten. Außerdem war es notwendig, die Datei main.cpp anzupassen, damit die Onboard-LED des Pico auf Pin 25 und nicht auf Pin 13 angesprochen wird. Dazu musste die Definition von BSP_IO_PORT_PIN_13 geändert und etwa in Zeile 181 (oder in deren Nähe), wo die LED ein- und ausgeschaltet wird, der hartcodierte Verweis auf Pin 13 entsprechend korrigiert werden. Hier sind meine Änderungen:

 
#define BSP_IO_PORT_PIN_13 (25u)
digitalWrite(BSP_IO_PORT_PIN_13, !digitalRead(BSP_IO_PORT_PIN_13));
 

In der Datei combridge.cpp muss die I²C-Adresse des Moduls auf 0x57 geändert werden – dies ist die Standardadresse des SparkFun-Moduls:

 
#define BMV080_I2C_ADDRESS    0x57

Kompilieren mit einem einzigen Befehl

Das Kompilieren des Programms ist nun ganz einfach: Öffnen Sie ein Terminalfenster, zum Beispiel die Windows PowerShell, navigieren Sie in das SDK-Verzeichnis api_examples\arm_cortex_m0plus und führen Sie folgenden Befehl aus:

 
./build_arm_cortex_m0plus.cmd i2c
 

Eine Internetverbindung ist erforderlich, da das Skript beim ersten Ausführen automatisch die benötigte Toolchain herunterlädt und installiert, bevor das Beispiel kompiliert wird. Bei mir funktionierte das reibungslos. Da ich solche problemlos funktionierenden SDKs nicht gewohnt bin, war ich ehrlich beeindruckt. Ein großes Lob an Bosch Sensortec!

 

Zum Hochladen der ausführbaren Datei muss die UF2-Datei gefunden werden, die – aus mir nicht bekannten Gründen – nicht wie die anderen Binärdateien im Bin-Verzeichnis landet, sondern im Build-Verzeichnis verbleibt. Mit dem Pico im Bootloader-Modus lässt sich die UF2-Datei einfach auf ihn kopieren. Und siehe da – das BMV080-Modul begann tatsächlich, reale Messdaten auszugeben!

 
Serial monitor working smoke2
Feinstaubwerte nach dem Anzünden einiger Streichhölzer.

RTOS erforderlich

Während der gesamten Einrichtung fiel mir auf, dass das Bosch Sensortec SDK auf das Mbed-RTOS verweist. Das brachte mich auf die Idee, das SparkFun-Beispiel unter Verwendung der „Arduino Mbed OS RP2040 Boards“ neu zu kompilieren – zuvor hatte ich Earle Philhowers Arduino-Paket für den RP2040 verwendet. Und siehe da: diesmal funktionierte es! (Wichtig: Die SparkFun-Bibliothek erwartet SDA an Pin 4 und SCL an Pin 5; der IRQ-Pin wird im getesteten Beispiel nicht verwendet.)

Fazit

Der Qwiic Feinstaubsensor von SparkFun mit dem BMV080 von Bosch ist eine kompakte und dennoch leistungsfähige Lösung für die Luftqualitätsüberwachung – ideal für Anwendungen, bei denen Platz, Energieverbrauch und einfache Integration entscheidend sind. Mit Echtzeit-Erkennung von Feinstaubpartikeln, flexiblen Kommunikationsschnittstellen und einem durchdachten Gehäusedesign eignet sich das Modul hervorragend für Umweltsensorik.

Die Softwareunterstützung von SparkFun ist hinsichtlich Dokumentation etwas spärlich, doch das SDK von Bosch Sensortec ist hervorragend. Sobald man weiß, dass die meisten Beispiele für den Betrieb unter einem RTOS wie dem (veralteten) Mbed OS ausgelegt sind, steht auch eigenen Messungen mit dem BMV080 nichts mehr im Wege.