Arduino Nicla Sense ME

als Environmental Sensor

Arduino Nicla Sense ME ist ein mit energiesparenden Sensoren ausgerüstetes Board aus dem Hause Bosch und Arduino. Das Board vereint die folgenden vier Sensoren von Bosch Sensortec:

  • BHI260AP – Komplettlösung für daueraktive Sensoranwendungen wie Fitness-Tracking, Fußgängerpositionierung, Maschinenlernanalysen und die Schätzung der Orientierung.
    Der BHI260AP ist ein intelligenter Sensor, der eine Vielzahl von Softwarefunktionen, einen kundenseitig programmierbaren 32-Bit-Mikrocontroller ARCv2 und eine 6-Achsen-IMU in einem Gehäuse vereint.
  • BMM150 – 3-achsiger digitaler geomagnetischer Sensor, der perfekt auf die Anforderungen von Kompassanwendungen abgestimmt ist. Mittels einer auf die Hardware abgestimmten Software liefert der BMM150 absolute räumliche Orientierung und Bewegungsvektoren mit hoher Genauigkeit und Dynamik. Das BMM150 eignet sich auch besonders zur Unterstützung von Drohnen beim genauen Steuerkurs.
  • BMP390 – Luftdrucksensor basierend auf bewährten Messprinzipien. Er eignet sich hervorragend für den Einsatz in Smartphones und Wearables/Hearable-Geräten. Zu den typischen Applikationen gehören das Internet der Dinge (IoT), Wettervorhersagen, Kontextbewusstsein, Vertikale Geschwindigkeit Anzeige, AR/VR-Applikationen, Gesundheitsversorgung und Verbesserung der GPS-Navigation
  • BME688 – erster Gassensor mit künstlicher Intelligenz (KI) und integrierten, sehr präzisen Feuchte- und Temperatursensoren. Der integrierte Gassensor ist in der Lage, flüchtige organische Verbindungen (VOCs), flüchtige Schwefelverbindungen (VSCs) und andere Gase wie Kohlenmonoxid (CO) und Wasserstoff im ppb-Bereich zu erkennen. Der neue BME 688 Sensor ist abwärtskompatibel zum BME680. Zusätzlich zu allen Funktionen des BME680 verfügt der BME688 über eine Gasscannerfunktion. In der Standardkonfiguration wird das Vorhandensein von VSCs als Indikator für z.B. Bakterienwachstum.
    Der Gassensor hat eine hohe Empfindlichkeit und reagiert auf die meisten flüchtigen Verbindungen (VOC) sowie viele andere Gase, die die Raumluft verschmutzen.  Als MOX-Sensor ist der BME688 in der Lage, die Summe der VOCs bzw. Schadstoffe in der Umgebungsluft zu messen. Dadurch kann der BME688 z.B. Ausgasen von Farbe, Möbeln und/oder Müll, hohe VOC-Werte durch Kochen, Nahrungsaufnahme, ausgeatmete Luft und/oder Schwitzen erfassen.

Das Board nutzt als Host-CPU einen nRF52832-SoC, ausgestattet mit einem mit 64 MHz arbeitenden Cortex-M4F mit 64 KB SRAM und 512 KB Flash. Das BLE-Modul ist zur V5.0 kompatibel.

Nicla Ssense ME Block Diagramm (Bild: Bosch BHI260 Flyer)

In den Examples zum Nicla Sense ME ist das Auslesen von Accelerometer und Gyroscope sowie Temperatur und Feuchtigkeit gezeigt. Ich möchte hier speziell auf das Erfassen von Umgebungsdaten (Environmental Data) eingehen. Das Programm Nicla_EnvironmentalSensor.ino fragt Temperatur-, Feuchtigkeits-, Druck und Gassensor ab und gibt die erfassten Daten über die Console aus.

Die On-Board RGB LED habe ich als Zustandsanzeige verwendet. Bei Einleitung eines Messzyklus blinkt die LED kurz blau auf. Dem folgt dann eine von ermittelten eCO2-Wert abgeleitete Zustandsanzeige gemäss der folgenden Tabelle bis zum nächsten Messzyklus.

LED ColorZustand
BlauBeginn Messzyklus
GrüneCO2 < 800 ppm
Gelb800 ppm < eCO2 <= 1200 ppm
RoteCO2 > 1200 ppm

Mit diesem Programmbeispiel haben Sie bereits eine sogenannte CO2-Ampel in den Händen, die für die Erfassung der Raumluftqualität durchaus brauchbare Werte liefert.

Die zu berücksichtigenden Unterschiede bei der Bewetung der Luftquelität durch NDIR- bzw. MOX-Sensoren können Sie im Post Luftqualität mit NDIR- und MOX-Sensoren messen vertiefen. Der hier eingesetzte BME688 gehört in die Klasse der MOX-Sensoren.


2021-11-10/ck

Ab heute lieferbar: LoRaWAN-Knoten im IoT

LoRaWAN-Knoten im IoT

Fertige und selbst aufgebaute Arduino-Knoten im TTN

Print: ISBN 978-3-89576-467-7,

eBook: ISBN 978-3-89576-468-4

www.elektor.de

Auf der The Things Conference 2021 hatte TTN angekündigt, dass The Things Network V2 im September 2021 endgültig geschlossen wird. Wegen der Pandemie wurde dieser Termin später bis Dezember 2021 verlängert, um der Community noch mehr Zeit zu geben, auf The Things Stack (V3) zu migrieren

The Things Industries wird alle Cluster von TTN betreiben. Hostnamen, Versionen, Konfiguration, Funktionen usw. werden harmonisiert. Der erste Cluster von TTN V3 https://eu1.cloud.thethings.network/console ist bereitgestellt. Die Migration ist im Gange.

Die TTN V2-Software wurde auf The Things Stack Community Edition (auch als TTN V3 bekannt) aktualisiert. Die vorhandenen Benutzer von TTN V2 müssen ihre Gateways und Geräte auf The Things Stack Community Edition (TTS (CE)) migrieren, da die Cluster von TTN V2 gegen Ende 2021 geschlossen werden.

Mit diesem neuen Buch stelle ich Ihnen die Integration von fertigen und in zahlreichen IoT-Shops beziehbaren LoRaWAN-Knoten, aber auch selbst aufgebauten Arduino-Knoten ins TTS (CE) vor.

Zugriff auf die Daten und deren Visualisierungen zeige ich Ihnen mit Anwendungen, wie MQTT, Node-RED, Cayenne, Thingspeak und Datacake.

In den Anwendungsbeispielen habe ich preiswerte Komponenten verwendet, die auch im Maker-Umfeld akzeptabel sind.


2021-11-03/CK

Arduino Portenta H7

Arduino Portenta H7 ist ein Arduino am oberen Ende des Leistungsspektrums der Arduino Familie.

Kern ist ein STM32H747XI Dual Core Mikrocontroller mit einem Cortex-M7 und einem Cortex+M4 Core. Der Cortex-M7 wird mit 480 MHz getaktet. Beim Cortex-M4 sind das 240 MHz. Beide Core kommunizieren über einen Remote Procedure Call (RPC) Mechanismus.

CoreMark

Für einen Arduino am oberen Ende des Leistungsspektrums ist ein Benchmark zum Vergleich mit anderen Arduinos von Interesse.

Ich habe auf meiner Benchmark-Seite Benchmarks von 8-Bit-AVR-, 32-Bit Cortex-Mx-, 32-Bit-ESP32- und RISC-V-MCU vergleichend gegenüber gestellt.

Mit einem CoreMark von 1133 mus sich der Cortex-M7 im Arduino Portenta H7 nur dem Teensy 4.0 mit einem NXP iMXRT1062 geschlagen geben.

DAC-ADC-Subsystem

Der Portenta H7 ist mit einem komfortablen DAC-ADC-Subsystem ausgestattet.

ADC3× ADCs with 16-bit max. resolution (up to 36 channels, up to 3.6 MSPS)
DAC2× 12-bit DAC (1 MHz)
Auszug aus dem Datenblatt

Inwieweit das für einen Arduino dann auch nutzbar ist, muss sich zeigen. Im Datenblatt des STM32H747x sind erst mal ernüchternde Daten vorzufinden:

Auszug aus dem Datenblatt

Wie schon beim ESP32 habe ich deshalb das DAC-ADC-Subsystem einem Test unterzogen.

Ich will es vorweg nehmen, dass mein Aufbau sicher suboptimal ist. Als Referenzspannung Vref habe ich 3V3 verwendet und den DAC-Ausgang A6 mit dem ADC-Eingang A0 über Jumper verbunden. DAC und ADC sind für 12 Bit Auflösung konfiguriert

Arduino Portenta H7 auf Expansionsboard

Unter diesen Voraussetzungen habe ich mit dem Programm PortentaH7_ADC_DAC.ino die folgende DAC-ADC-Charakteristik ermittelt. Die Trendlinie zeigt ein lineares Verhalten mit leichtem Offset aber deutlichen Abweichungen in den einzelnen Stufen.

Schauen wir die Abweichungen an, dann übersteigen diese die im Datenblatt gemachten Angaben. Ausserdem zeigt die Trendlinie neben dem bekannten Offset auch noch einen Gain-Fehler.

Durch das Filtern der ADC-Werte mit einer Mittelwertbildung über jeweils 10 Messwerte können die Abweichungen erwartungsgemäss reduziert werden. Die Trendlinie zeigt praktisch gleiches Verhalten.

Bei einem Blick in die diversen Foren zeigen sich zahlreiche kritische Stimmen zum Verhalten des DAC-ADC-Subsystems.

Allerdings dürfen Sie nicht ausser Acht lassen, dass bei einer 12-Bit-Umsetzung im Spannungsbereich von 3.3 V DC das LSB immerhin bei nur 800 uV liegt.

Eine stabile Referenzspannung Vref und eine optimale Verdrahtung sind für geringere Abweichungen bei der AD-Umsetzung zwingend erforderlich. Durch die Verbindung von Vref mit 3.3 V ist das schon mal nicht gegeben.

Optimierungsmöglichkeiten sind in der AN2834 Application note How to get the best ADC accuracy in STM32 microcontrollers zu finden.

Im Zweifelsfall bleibt aber immer noch ein externer AD-Umsetzer, wie ich den auch beim ESP32 verwendet habe.


2021-11-02/CK

Messung von Umgebungsbedingungen für Pflanzen

Für das Überwintern der Pflanzen von Balkon und Terrasse habe ich ein beheiztes Folienzelt vorbereitet und darüber berichtet (https://ckblog2016.net/2021/10/27/uberwintern-von-pflanzen-im-beheizten-folienzelt/).

Unabhängig von der dort verbauten Steuerung des Frostwächters möchte ich die Bedingungen einiger sensibler Pflanzen direkt erfassen. Neben Temperatur und Luftfeuchtigkeit ist auch die Bodenfeuchtigkeit für das Pflanzenwohl wichtig. Auch im Winter benötigen Pflanzen Wasser, wenn auch wesentlich weniger.

Eine Möglichkeit hatte ich vor Jahren mit dem HiGrow-Sensor untersucht und im Blog unter

auch beschrieben.

Da ich im Folienzelt durch die Heizung ohnehin Spannung zur Verfügung habe, bin ich hier nicht auf Batteriebetrieb angewiesen und kann das Monitoring der Umgebungsbedingungen grosszügiger angehen.

Komponenten zum Monitoring

Als Controller verwende ich einen M5Stack Core2, der die für den Betrieb der Sensorik erforderlichen Grove-Konnektoren, ein Display zur Anzeige der Messwerte, seitliche LED-Streifen zur Signalisierung des Wasserbedarfs und eine WiFi-Verbindung ins Internet zur Verfügung stellt.

Temperatur und Luftfeuchtigkeit werden durch eine M5Stack ENV.II Unit mit einem Sensirion SHT31 erfasst. Der ausserdem vorhandene Bosch BMP280 wird nicht für die Messwerterfassung herangezogen.

Die M5Stack EARTH Unit nutzt die beiden großen freiliegenden Pads als Sonden für den Sensor. Der dazwischen liegenden Boden bildet einen variablen Widerstand in einem Spannungsteiler. Je höher die Feuchtigkeit im Boden ist, desto besser ist die Leitfähigkeit zwischen den beiden Pads und der Spannungsteiler liefert eine sinkende Ausgangsspannung, die über den ESP32-internen ADC gewandelt wird.

Die folgenden Bilder zeigen die für das Monitoring der Umgebungsbedingungen eingesetzten Komponenten:

Mit den hier vorgestellten Komponenten ist sehr schnell ein entsprechendes Monitoring aufgebaut, da die M5Stack Units nur mit Grove-Kabeln mit dem M5Stack Core2 verbunden werden müssen. Die ENV.II Unit kommuniziert über I2C mit PortA und die EARTH Unit über eine analoge Leitung mit PortB.

Das Programm zur Erfassung der Messwerte über die beiden Sensoren, deren Aufbereitung und Versand der Message über Pushover ist auf Github unter der URL https://github.com/ckuehnel/Arduino2020/tree/master/M5Stack/M5Core2_EnvMonitor abgelegt und steht zum Download zur Verfügung.

Die folgenden Bilder zeigen die Ausgaben des Programms M5Core2_EnvMonitor.ino über die Console. Nach der Initialisierung erfolgt die erste Messwertausgabe aller Sensoren (SHT31, BMP280, EARTH Unit) über die Console. Die Daten des BMP280 werden nicht weiter verwendet. Es schliesst sich das Versenden der Message über Pushover an.

Die Messwerte werden in einem Zyklus von 5 Sekunden erfasst und auf dem Display angezeigt. Die Pushover Messages werden in einem Zyklus von 15 Minuten versendet. Das ergibt 24 x 4 = 96 Messages am Tag. Pushover lässt kostenfrei 10’000 Messages pro Monat zu. Eine kostenfreie Nutzung dieses Dienstes ist also gegeben.

Die Pushover Messages erscheinen dann in der im folgenden Bild gezeigten Form als Pushup Messages im Smartphone oder Tablet.

Pushover Messages im Smartphone

Messung der Bodenfeuchtigkeit

Die EARTH Unit implementiert eine resistive Messung der Bodenfeuchtigkeit. Die Elektroden der EARTH Unit sind weder korrosionsbeständig oder wasserdicht. Für ein Proof-of-Concept kann die EARTH Unit oder ein anderer resistiv arbeitender Sensor durchaus verwendet werden. Für den Dauereinsatz sind sie nicht geeignet.

Kapazitive Bodenfeuchtesensoren weisen eine bessere Korrosionsbeständigkeit auf. Der im folgenden Bild gezeigte Bodenfeuchtesensor wird von verschiedenen Anbietern als Alternative angeboten.

Der Vorteil des kapazitiven Bodenfeuchtesensors besteht, zum einen im kapazitiven Messverfahren selbst und zum anderen durch die Verwendung korrosionsbeständigen Materials, wodurch ihm eine lange Lebensdauer verliehen werden soll. Dennoch sollten die Schnittkanten der Leiterplatte mit einem Lack geschützt werden, um ein seitliches Eindringen von Feuchtigkeit in die Leiterplatte zu vermeiden.

Die Anschlussbedingungen sind identisch zur M5Stack EARTH Unit und ich werden diesen Sensor ebenfalls noch testen.

Wenn Sie sich über die Interna dieser Messmethode informieren wollen, dann finden Sie dieses im Beitrag Characterization of Low-Cost Capacitive Soil Moisture Sensors for IoT Networks. Praktische Erfahrungen mit dieser Art von Bodenfeuchtesensor können Sie unter https://thecavepearlproject.org/2020/10/27/hacking-a-capacitive-soil-moisture-sensor-for-frequency-output/ nachlesen.

Nachtrag

Ich habe festgestellt, dass die geschlossene Terrassentür einen Einfluss auf die WLAN-Verbindung zum M5Stack Core2 aufweist.

Es ist ja bekannt, dass WLAN-Signale durch zahlreiche Aspekte im elektromagnetischen Umfeld beeinflusst werden. Zum einen durch die sogenannte Freiraumdämpfung aber auch durch die Signaldämpfung aufgrund von physischen Hindernissen, die zwischen Sender und Empfänger von WLAN-Signalen im Weg stehen. 

Welches Material das WLAN wie stark dämpft ist an Hand von Messwerten unter https://www.wlan-blog.com/erfahrungen/wlan-daempfung-tabelle-welches-material-daempft-wlan-wie-stark-fenster-rigips-holz-etc/ nachzulesen.

Damit bei der Aufstellung des Sensors bereits die zu erwartende Feldstärke abgeschätzt werden kann, habe ich noch eine Abfrage des RSSI ins Programm eingebaut.

RSSI steht für Received Signal Strength Indicator. Es ist ein geschätztes Maß für den Leistungspegel, den ein WLAN-Client von einem Zugangspunkt oder Router empfängt. Dieser Wert wird sowohl am Display als auch in der Pushover Message mitgeteilt. Oberhalb von -80 dBm liegen Werte, bei denen keine Störungen zu erwarten sind.


2021-11-16/CK

M5Stack MQTT Unit

Die M5Stack MQTT-Unit verarbeitet MQTT-Nachrichten über Ethernet, die über ein UART-Interface von einem Mikrocontroller aus gesteuert werden. Mikrocontroller ohne Ethernet/WiFi können mit diesem Modul MQTT-Verbindungen aufbauen. Die Unit unterstützt bis zu vier Topics (Publish, Subscribe) mit extrem niedriger Netzwerklatenz. Eingesetzt wird die Unit in industriellen Automatisierungs- und Überwachungssystemen, automatischen Mess- und Steuersystemen.

Das Programmbeispiel MQTT_Unit.ino zeigt den Einsatz der M5Stack MQTT-Unit. Hier werden im Zyklus von 10 Sekunden MQTT Messages zum Public Broker von HiveMQ gesendet.

MQTT-Messages im Public Broker von HiveMQ

Low-Power Sensornetzwerk

In der Vergangenheit habe ich mich mit Low-Power Sensornetzwerken befasst und hier im Blog darüber berichtet:

Grundsätzlich stehen für die Kommunikation WiFi, BLE und LoRa zur Verfügung. Jede Kommunikation hat dabei spezielle Eigenschaften bezüglich Reichweite, Payload und Strombedarf.

Angeregt durch den Beitrag ESP32 – Ultra-Long Battery Life With ESP-NOW habe ich ESP-NOW in meine Betrachtungen mit einbezogen.

ESP-NOW ist ein proprietäres, von Espressif entwickeltes Protokoll, das es mehreren Geräten ermöglicht, ohne WiFi miteinander zu kommunizieren. Vor der Kommunikation ist ein Pairing zwischen den kommunizierenden Geräten erforderlich. Nach dem Pairing ist die Verbindung sicher und Peer-to-Peer, ohne dass ein Handshake erforderlich ist. Nach dem Pairing ist die Verbindung persistent, d.h. nach einem Reset oder Spannungsausfall eines Teilnehmers erfolgt eine erneute Verbindungsaufnehme automatisch.

Zur Einarbeitung empfehle ich den Beitrag Getting Started with ESP-NOW (ESP32 with Arduino IDE) von Rui Santos, da ich hier nicht auf alle Details eingehen möchte.

„Low-Power Sensornetzwerk“ weiterlesen

Environmental Sensor AZ-Envy

AZ-Delivery bietet mit AZ-Envy ein sehr preiswertes Sensorboard an, mit dem durch einen Sensirion SHT30 Temperatur- und Luftfeuchtigkeit und durch einen MQ-2 eine Gasgemisch aus Methan, Butan, LPG und Rauch erfasst werden kann.

Der MQ-2 Sensor ist ein Mitglied der umfangreichen MQ-Serie, die unterschiedliche Gasgemische detektieren kann. Die folgende Tabelle, entnommen aus https://www.mysensors.org/build/gas, zeigt die Familie der MQ-Sensoren und die detektierten Subtanzen.

„Environmental Sensor AZ-Envy“ weiterlesen

LILYGO Mini ePaper Core 1.02″

LILYGO Mini ePaper Core 1.02″ vereint einen ESP32 PICO und ein 1.02″ ePaper Display in einem kompakten Gehäuse. Im folgenden Bild sind die zur Verfügung stehenden Ressourcen und das Pinout ersichtlich. Das 1.02″ ePaper Display weist eine Auflösung von 128 x 80 Pixel auf.

Auf Github ist die benötigte Software zu finden, die die Programmierung mit der Arduino oder PlatformIO IDE ermöglicht:  https://github.com/Xinyuan-LilyGO/LilyGO-Mini-Epaper.

Zur Programmierung des Moduls ist ein USB-to-TTL-Adapter erforderlich, da auf diese Stufe modul-intern verzichtet wurde.

Ich habe hier ausgehend von einem Programm in den Examples ein Programm erstellt, dass einen NTP-Server (hier ntp.metas.ch) nach der aktuellen Uhrzeit abfragt und anschliessend von OpenWeatherMap die Wetterdaten für einen vorzugebenden Ort abfragt. Die Informationen werden dann auf dem ePaper Display zur Anzeige gebracht.

Wichtig bei der Anzeige ist die Wahl des richtigen Fonts. Zur Darstellung hier habe ich u8g2_font_helvB10_te (bold) verwendet, da mit u8g2_font_helvR10_te (regular) keine vernünftig lesbare Ausgabe möglich war. Die u8g2 Library von Oli Kraus bietet hier aber gute Auswahlmöglichkeiten.

Die Ausgabe über die Console zeigt die erfassten Daten. Hier ist die Temperaturangabe in K, während im ePaper Display die Angaben in °C erfolgt.

Ausgabe über die Console

Nach erfolgter Abfrage und Anzeige der erhobenen Daten geht der ESP32 hier für fünf Minuten in den Deep Sleep, bevor eine erneute Abfrage erfolgt. Im Deep Sleep wird die Stromaufnahme nach Angaben von LILYGO auf unter 10 uA abgesenkt. Somit dürfte der Betrieb mit einer externen Batterie möglich werden. Die Deep Sleep Phase kann bei dieser Anwendung auch durchaus verlängert werden, das sich das Wetter kaum schnell ändert.


2021-09-05/CK

Arduino

Das umfassende Handbuch

Für eine neue Auflage möchte ich zusätzlich neue Themen erarbeiten. Gern möchte ich dabei auch auf die Wünsche meiner Leser eingehen.

Auf meiner Liste stehen derzeit:

  • Erfassung der Luftqualität insbesondere CO2-Monitoring
  • Arduino Kameraanwendungen
  • Maschinelles Lernen mit Arduino

Was sind die Themen, die Sie als Leser behandelt sehen wollen? Ich freue mich auf Ihr Feedback.


2021-08-25/CK

Heltec CubeCell HTCC-AB01- Langzeittest abgeschlossen

Seit dem 20.07.2020 läuft der Langzeittest mit einem Heltec CubeCell HTCC-AB01. Das Ende der Messung wurde am 5.07.2021 8:15 bei einer Spannung des 1000 mAh LiPo-Akkus von 2566 mV erreicht. Das ist eine Laufzeit von knapp 350 Tagen!

Alle Details finden Sie hier:


2021-07-06/ck