Umweltsensor

Der Feinstaubsensor (Nova PM Sensor SDS011) kann die Feinstaubkonzentration in der Luft messen. Hierfür gibt es zwei Messstandards für die Partikelgrößen pro Kubikmeter Luft: 10 µm und 2,5 µm große Partikel, welche als Messrichtlinie definiert sind. Das Thema ist hochaktuell, mit dem Sensor können unabhängige Messungen selbst durchgeführt werden, um zu sehen, wieviel Feinstaub Ihrer Umgebung ist.

Das Problem ist nun, dass man den Sensor an einem geeigneten Platz installieren möchte, z.⁥ B. an der Straßenlaterne. Hierfür ist eine batteriebetriebene Funklösung sehr interessant. Das LongRa-Board kann auch die benötigte Spannung (5 V) für den Sensor zur Verfügung stellen.

PIN-Belegung

Arduino ZeroSensorBeschreibung
D0 (RX)7 (TX)Serielle Daten vom Sensor zum Arduino
D1 (TX)6 (RX)Serielle Daten vom Arduino zum Sensor
GND5 (GND)Masse
5V0 (5 V)3 (5 V)Stromversorgung 5 V

Bei der Stromversorung empfiehlt es sich, leistungsstarke Batterien oder eine externe Spannungsquelle zu verwenden, da der Sensor aufgrund des Lüfters einen größeren Anlaufstrom benötigt.

Die Software

Wir haben eine eigene Beispiellösung geschrieben, welche den Sensor ansteuert und die Messdaten per RadioShuttle-Protokoll zu einer zweiten Station überträgt. Hierfür wird die App-ID 10 verwendet, welche die zu übertragende Nachricht definiert und für alle öffentlich zugänglich macht. Mehr dazu auf der Seite Die Apps-Strategie.

Die Messung findet im Intervall statt, z. B. alle 30 Minuten, hier schalten wir die Spannung von 5 V an, lesen 20 Sekunden Messdaten, damit wir stabile Werte erhalten und übertragen die Daten vom Knoten an eine zweite Station. Danach schalten wir die 5 V wieder ab und legen das Board per deepsleep-Funktion schlafen, damit möglichst wenig Strom verbraucht wird, bis es in 30 Minuten mit der nächsten Feinstaubmessung wieder von vorne losgeht.

Für die PM-Sensor-Radio-Lösung wird das Lesen der Dokumentation zum Beispiel RadioTest vorausgesetzt, um ein Grundverständnis zu bekommen und die Einstellungen der Knoten- und Station-IDs vorzunehmen.

Die Protokolldaten des PM Sensors (App-ID 10)

struct sensor {
 uint8_t version;
 uint8_t padding;
 uint16_t pm25;
 uint16_t pm10;
 uint16_t id;
} PMAppData;

Die Daten sind sehr einfach definiert. Es gibt eine Version (aktuell 1), zusätzlich sind die Messwerte vom Sensor um den Faktor 10 größer und müssen später durch 10 geteilt werden. „id“ ist die Seriennummer des Sensors. Ein Checksumme o.⁥ ä. wird nicht benötigt, da das benutzte RadioShuttle-Protokoll per LoRa bereits eine 16-bit CRC-Checksumme enthält.

Strom sparen als Knoten-Offline (Messsensor)

Da der Knoten in der Regel abwartet, bis die Zeit für die nächste Messperiode gekommen ist und wir aufgrund des Batteriebetriebs Strom sparen wollen, wird der Knoten als Offline-Gerät betrieben. Das bedeutet, dass, wenn nichts zu tun ist, RadioShuttle das LoRa-Funkmodem ausschaltet und in den MCU-Suspend-Modus geht. Es läuft weiterhin eine RTC-Uhr, welche das Board alle 5 Sekunden kurz aufweckt um zu überprüfen, ob etwas zu tun ist.

rs->Startup(RadioShuttle::RS_Node_Offline);

Die Initialisierung des Knotens als RadioShuttle::RS_Node_Offline schaltet das Funkmodem aus, vorausgesetzt, der Serial Monitor (USB) ist nicht aktiv. Während des Schlafens ist auch keine Funkempfang möglich, auch das Drücken und Halten von Taster „A“ wird erst nach 5 Sekunden erkannt.

Sollte eine feste Stromversorgung vorhanden sein, bzw. ist gewüscht permanent per USB-„Serial Monitor“ die Protokolle einzusehen, kann der Knoten auch als RadioShuttle::RS_Node_Online definiert werden. Dann wird allerdings weniger Strom gespart.

Der Stromverbrauch beträgt ca:

  • Knoten offline (deepsleep): 150 µA
  • Knoten online (sleep): 15 mA
  • Messzeit: 20 Sekunden (110 mA)

LED-Statusanzeige

Beim Versenden und Empfangen von RadioShuttle-Nachrichten leuchten die TX/RX-LEDs oben rechts bei Meldungen, die auf den „Serial Monitor“ geschickt werden, kurz auf.

Die LED 13 ist beim Knoten-Offline-Betrieb grundsätzlich aus und leuchtet nur während der 20 sekündigen Messphase auf. Beim Knoten-Online bzw. beim USB-„Serial Monitor“ leuchtet diese permanent, da das USB-Protokoll ca. 100 mal pro Sekunde aktiv ist.

5 V Spannung ein-/ausschalten

Die LongRa-Arduino-Zero-kompatible Lösung verfügt über einen internen Spannungswandler, der den 2 x AA Batteriestrom (bei Batterien oder Akkus) auf 5 V max. 150 mA wandelt.

boost50 = 1;

Dieser Wandler kann entweder 3,3 V oder 5 V aus der Batterie erzeugen, damit der Wandler nicht immer laufen muss, wird er per „boost50 = 1“ oder „boost50 = 0” ein- bzw. ausgestellt. Eine MOSFET-Steuerung schaltet den Strom an bzw. aus, so dass im ausgeschalteten Zustand auch kein Strom verbraucht wird. Alternativ kann auch per Arduino „digitalOut“ geschaltet werden. Der entsprechende Pin ist in der „xPinMap.h“ definiert.

Der Empfänger (Station)

#define RADIO_SERVER 1

Hiermit wird die Lösung als RadioShuttle-Station (Empfänger) definiert. Die Station empfängt die Sensordaten und gibt sie im USB-„Serial Monitor“ aus.

ParticalData: PM10: 5.3 (µg/m3) PM2.5: 4.1 (µg/m3) ID: 10229

Diese Daten werden einfach ausgegeben, können aber beliebig genutzt werden, da die kompletten Protokolldaten übertragen wurden.

Der Quelltext des PMSensorRadios

Dieser ist nach der Installation der RadioShuttle-Software unter den Beispielen „Arduino-mbed-APIs > PMSensorRadio“ komplett verfügbar.

Beispielinstallation eines Feinstaubsensors

Weitere Informationen