Solarbetriebener LoRa-Knoten: Eine modulare, kompakte und vielseitige IoT-Lösung
Autonom arbeitende Sensorknoten benötigen neben der drahtlosen Kommunikation auch eine autonome Energiequelle. In diesem Artikel stellen wir Ihnen einen batteriebetriebenen, durch eine Solarzelle gepufferten IoT-Knoten mit LoRaWAN-Konnektivität vor. Wir konzentrieren uns dabei auf die Stromversorgung und die Fernüberwachung der verschiedenen Spannungen über Bluetooth und LoRa. Da aber viele verschiedene Sensormodule verfügbar sind und es auch eine gute Softwareunterstützung gibt, können Sie das Projekt leicht an Ihre spezifischen Bedürfnisse anpassen.
Ich verwende das Ökosystem WisBlock von RAKwireless, um einen solarbetriebenen LoRa-Knoten für den Anschluss von Sensoren zu bauen. Das RAK19007 WisBlock Base Board 2nd Gen ist eine gute Basis für das Controller Board WisBlock Core und verschiedene Sensormodule. Der RAK4631-R ist ein stromsparender WisBlock Core, der auf einer nRF52840-MCU von Nordic Semiconductor und dem LoRa-Chip SX1262 von Semtech basiert und sowohl Bluetooth Low Energy (BLE) als auch LoRaWAN-Konnektivität bietet (siehe LoRa und LoRaWAN).
Der RAK4631-R ist mit dem RAKwireless Unified Interface V3 (RUI3) ausgestattet, was die Softwareerstellung für IoT-Knoten erheblich vereinfacht. Ich verwende die RUI3-API für die Anwendungsprogrammierung. Außerdem demonstriere ich die Konfiguration des IoT-Geräts mit der WisToolBox-App. Weitere Informationen über das WisBlock-Ökosystem finden Sie auf der Webseite von RAKwireless und in meinem E-Buch IoT-Projects for Makersi> , einschließlich einer Einführung und Anwendungsbeispielen.
LoRa und LoRaWAN
LoRa, kurz für Long Range, ist die ideale drahtlose Kommunikationstechnologie für IoT-Anwendungen. Sie ermöglicht eine Datenübertragung über große Entfernungen bei geringem Strombedarf. LoRaWAN ist ein Protokoll, das auf LoRa aufbaut und die perfekte, standardisierte und skalierbare Methode zur Verwaltung der Konnektivität von LoRa-Geräten über große Entfernungen bietet. LoRa und LoRaWAN ermöglichen gemeinsam stromsparende, weiträumige Netzwerklösungen für verschiedenste Anwendungen. Ich werde euch in diesem Artikel diese extrem spannende Technologie vorstellen.
Stromversorgung
Das RAK19007 ist ein WisBlock Base Board der zweiten Generation, an das verschiedene WisBlock-Module angeschlossen werden können. Es verfügt über einen USB-C-Anschluss, Anschlüsse für die Stromversorgung und die Verbindung zu den angeschlossenen Modulen. Bild 1 zeigt ein RAK19007: Ganz links sind die verfügbaren Stromversorgungsoptionen mit JST-Anschlüssen für Solar und Batterie und dem USB-C-Anschluss für die Stromversorgung und den Programm-Upload zu sehen. Dieses Modul unterstützt die Stromversorgung durch eine Low-Power-Batterie, das Aufladen eines Lithium-Polymer-Akkus (LiPo) und das Aufladen eines angeschlossenen LiPo-Akkus über ein Solarpanel.
Bild 2 zeigt die Hauptbestandteile der Stromversorgung des RAK19007. Die drei möglichen Versorgungsspannungen für den RAK19007 sind: VBUS von USB-C, Green Power von einer Solarzelle und eine externe Spannung VCC_IN. Die Quelle mit der höchsten Spannung wird automatisch auf VBUS_D geschaltet. Solange VBUS_D größer ist als die Batteriespannung VBAT, bestimmt VBUS_D die VCC-Spannung. Wenn VBUS_D kleiner oder nicht vorhanden ist, sorgt VBAT für die Eingangsspannung des Ultra-Low-Power-Abwärtswandler SGM6036, der die Systemspannung von 3,3 V für die WisBlock-Module einschließlich WisBlock Core ausgibt.
Energieverwaltung
Der RAK19007 besitzt kein echtes Power-Management-System wie der AXP192 oder ähnliche Modelle, so dass nur die verfügbaren Spannungen zur Überprüfung des Ladezustands des LiPo-Akkus herangezogen werden können. Die Batteriespannung VBAT wird über einen Spannungsteiler am Analogeingang AIN0 gemessen. Der Analogeingang AIN1 steht auch am Header J11 zur Messung der Green-Power-Spannung zur Verfügung. Auch hier wird ein Spannungsteiler benötigt. In einem praktischen Test werde ich die beiden Spannungen Vsol und Vbat aufzeichnen und daraus den Quotienten State = Vsol/Vbat bilden. Bei State > 1 ist die Batterie geladen und die Solarzelle versorgt das Gerät. Wenn State < 1 ist, muss die Batterie das Gerät versorgen und wird dabei entladen.
Mit dem RAKwireless Unified Interface V3 (RUI3) ist es einfach, eine IoT-Anwendung mit kundenspezifischer Firmware zu erstellen. Der entsprechende Code, um die Werte der Spannungen Vsol und Vbat zu ermitteln, lautet wie folgt:
float Vsol = readADC(AIN1);
float Vbat = api.system.bat.get();
float State = Vsol/Vbat;
Setup
Ich habe zunächst mit dem Programm RAK4631-R_Sensor-Test.ino den internen ADC sowie die Module RAK1903 (Umgebungslicht) und RAK14001 (RGB-LED) getestet (Blockdiagramm in Bild 3). Das Programm finden Sie auf meinem GitHub-Repository . Das Sensormodul RAK1903 für Umgebungslicht liefert Informationen über die Entwicklung des Umgebungslichts während des Tages. Das RAK14001 fügt mit seiner RGB-LED zu den beiden blauen und grünen LEDs auf der Basisplatine weitere Anzeige-Möglichkeiten hinzu. Beide Module sind allerdings optional und werden für den Zweck des Artikels nicht benötigt.
Ich verwende ein transparentes Acrylgehäuse (RAKBox-B5), um das Testgerät sicher zu betreiben, wobei zu beachten ist, dass dieses Gehäuse nicht wetterfest ist (Bild 4). Dieses Gehäuse verfügt bereits über einen Batteriehalter für eine 18650-LiPo-Zelle, meinen bevorzugten LiPo-Akku-Typ, weil er durch die Bauform einfacher zu handhaben ist als andere LiPo-Akku-Formate. Allerdings gibt es LiPo-Akkus dieses Typs mit unterschiedlichen Kapazitäten und leicht unterschiedlichen Größen, über die eine Übersicht gibt. Der hier verwendete Akkuhalter ist für einen „kurzen“ LiPo-Akku ausgelegt, wie ihn Bild 5 ganz links zeigt.
Solarpanel
In den unter veröffentlichten Batterietests erreicht ein LiPo-Akku mit einer Kapazität von 3500 mAh bei einem Entladestrom von 1000 mA auf eine Spannung von 2,5 V eine Laufzeit von 200 h. Grob geschätzt könnte ein Entladestrom von 1 mA für 138 Tage aufrechterhalten werden. Zur Reduzierung der Stromaufnahme sollte der IoT-Knoten die meiste Zeit im Schlafmodus verbringen und nur zum Messen und zur Datenübertragung aufwachen. Um den autonomen Betrieb des IoT-Knotens über eine bestimmte Zeit zu gewährleisten, muss die Entladung der Batterie ausgeglichen werden. Dies kann (bei genügendem Sonnenlicht) durch eine Solarzelle geschehen, die an das RAK19007-Baseboard angeschlossen wird. Ein preiswertes MicroUSB-Solarpanel von Revolt (Bild 6) ist dazu völlig ausreichend.
Das Revolt-Panel besteht aus monokristallinen Solarzellen mit hohem Wirkungsgrad und langer Lebensdauer. Es liefert eine Ausgangsspannung von 5 V bei einer Leistung (im Idealfall) von 5 W. Die Kabellänge beträgt 3 m. Der flexibel ausrichtbare Montagebügel und die Schutzart IP65 des Gehäuses bieten gute Voraussetzungen für die Außenmontage.
Da die Systemspannung des verwendeten RAK4631-Kernmoduls 3,3 V beträgt, ist ein weiterer Spannungsteiler erforderlich, um die Spannung der Solarzelle zu messen. Zur Montage des Spannungsteilers verwende ich ein microUSB-Breakout-Board wie in Bild 7. Vsol und GND sind am JST-Anschluss auf der RAK19007-Grundplatine angeschlossen. Die Spannung VAIN1 geht zum Analogeingang AIN1 an der Header J11. Bild 8 zeigt die komplette Testanordnung zur Überwachung der Spannungen von Solarzelle und LiPo-Akku.
Anwendungsprogramme
Das Programm muss die Spannungen der Solarzelle und des LiPo-Akkus abfragen und die Ergebnisse drahtlos übertragen. Um die Stromaufnahme des Geräts zu reduzieren, sollte der RAK4631-Core die meiste Zeit schlafen. Mit der RUI3-API ist die Umschaltung in den Ruhezustand nicht allzu kompliziert. Die im Folgenden vorgestellten Anwendungsprogramme unterscheiden sich von üblichen Arduino-Programmen, bei denen die loop()-Schleife alle Funktionen endlos wiederholt. Hier schaltet die loop()-Funktion nur den RAK4631-Core in den Ruhezustand. Alle Funktionen der aktiven Phase werden durch einen timergesteuerte Handler ausgeführt. Ich habe zwei Programmversionen geschrieben, von denen eine die Messergebnisse über BLE UART, die zweite über LoRaWAN überträgt.
BLE
Nach der Initialisierung durch setup() fragt ein timergesteuerter Handler die Spannungen ab und speichert die gesammelten Messwerte in einem Datenpaket, das seriell über BLE ausgegeben wird. Dann versetzt die Funktion loop() den RAK4631-Core wieder in den Ruhezustand. Das Programm mit dem Namen RAK4631-R_Sleep_Test_BLE.ino ist auf GitHub unter zu finden. Während der Sleep-Periode habe ich eine Stromaufnahme (bei einer Quellspannung von 3,8 V) von 270 µA gemessen. Um die über BLE empfangenen Daten anzuzeigen, verwende ich die Android-App Serial Bluetooth Terminal 1.46i> von Kai Morich, erhältlich im Google-Play-Store.
Bild 9 zeigt den Spannungszustand nach dem Einschalten am Abend. State < 1 bedeutet, dass die Batterie das Gerät mit Strom versorgt und entladen wird. Am nächsten Tag war es für Oktober ziemlich sonnig, so dass State > 1 und die Solarzelle genug Spannung lieferte, um das Gerät zu versorgen und die Batterie aufzuladen (Bild 10).
LoRaWAN
Vor der Programmierung der LoRaWAN-Anwendung habe ich die Desktop-App WisToolBox verwendet, um den RAK4631-Core zu konfigurieren. Diese App kommuniziert mit den WisBlock-Geräten über USB, und nach Auswahl des richtigen USB-Ports und des RAK4631-Core-Moduls erscheinen alle Geräteinformationen im Dashboard (Bild 11).Sie können alle für die LoRaWAN-Konfiguration erforderlichen Parameter einstellen, wie in Bild 12 und Bild 13 gezeigt.
Die in WisToolBox eingestellten Parameter werden an den RAK4631-Core gesendet und im Flash-Speicher abgelegt. Im Programm ist ihre Einstellung deshalb nicht mehr erforderlich. In meinem Programm RAK4631-R_Sleep_Test_LoRaWAN.ino, das auf GitHub verfügbar ist, habe ich noch den traditionellen Weg durch explizite Deklaration verwendet. Während der Sleep-Phase habe ich eine Stromaufnahme (bei einer Quellspannung von 3,8 V) von 235 µA gemessen.
The Things Stack
Hier werde ich den Cluster für Europa (eu1) von The Things Stack Sandbox (TTSS, ehemals The Things Stack) in der Community Edition (TTSCE) als LoRaWAN-Netzwerkserver (LNS) verwenden. Die Cluster sind für nicht-kommerzielle, kleinere Tests und Experimente gedacht und verwalten die Konnektivität von LoRaWAN-Geräten. Es ist frei verfügbar und quelloffen, so dass es von jedermann genutzt und verändert werden kann, und wird von The Things Network unterstützt.
TTSS erfordert die Registrierung des Geräts; die in Bild 12 gezeigten LoRaWAN-Schlüssel und weitere Daten sind für die Registrierung erforderlich. Einzelheiten zu TTSS als LoRaWAN-Netzwerk-Server und Datacake als Visualisierungswerkzeug finden Sie auch in meinem anderen Buch mit dem Titel LoRaWAN-Knoten im IoT<span> .
Für TTSS gilt eine Fair-Use-Policy, die die Uplink-Sendezeit auf 30 s pro 24 Stunden pro Knoten und die Downlink-Nachrichten auf zehn Nachrichten pro Tag und Knoten begrenzt. Die Nutzlast und die Häufigkeit des Uploads bestimmen die Uplink-Sendezeit. Mit dem Airtime-Rechner sehen Sie dies auf einen Blick,
Bei einer Nutzlast von fünf Bytes und einer Datenrate DR5 (SF7BW125) errechnet sich eine Airtime von 51,5 ms. Zwischen zwei Uploads muss eine Zeitspanne von mindestens 148,2 s vergehen, um die Fair-Use-Policy einzuhalten. Die Uploadzeit im Anwendungsprogramm beträgt fünf Minuten. Nach erfolgreicher Registrierung und Start der Anwendung zeigt die TTSS-Konsole die empfangenen Uplink-Nachrichten (Bild 14). Der verwendete Payload-Dekoder ist ebenfalls auf GitHub verfügbar.
Ergebnisse
Die detaillierten Ereignisse der Konsolenausgabe sind in Listing 1 aufgeführt, aus dem hervorgeht, dass die Spezifikationen erfüllt werden. Bandbreite, Spreizfaktor und die resultierende Sendezeit sind wie erwartet und fett markiert.
Listing 1: Ausgabe auf der Konsole
"settings": {
"data_rate": {
"lora": {
"bandwidth": 125000,
"spreading_factor": 7,
"coding_rate": "4/5"
}
},
"frequency": "867100000",
"timestamp": 4014400019,
"time": "2023-10-25T13:28:28.098315Z"
},
"received_at": "2023-10-25T13:28:28.116904692Z",
"consumed_airtime": "0.051456s",
"version_ids": {
"brand_id": "rakwireless",
"model_id": "wisblock-4631",
"hardware_version": "1.0",
"firmware_version": "1.2.0",
"band_id": "EU_863_870"
},
Um die vom LoRaWAN-Netzwerk-Server empfangenen Daten anzuzeigen, verwende ich Datacake, das sich leicht in TTSS integrieren lässt. Lesen Sie dazu die Online-Dokumentation oder die Beispiele in dem oben erwähnten Buch. Nach der Integration können Sie ein Datacake-Dashboard ähnlich wie in Bild 15 erstellen.
Sie können die aktuellen Spannungen der Solarzelle und des LiPo-Akkus sowie den Verlauf dieser Spannungen über einen Tag hinweg sehen. Im Laufe des Tages liefert die Solarzelle Strom, um den LiPo-Akku zu laden. Am frühen Abend fällt die Spannung der Solarzelle unter die des LiPo-Akkus. Dann versorgt die Batterie den Knoten und wird auf „natürliche“ Weise entladen. Der Test lief über mehrere Wochen und zeigte, dass der IoT-Knoten auch unter ungünstigeren Wetterbedingungen im Herbst und im Winter zuverlässig funktionierte.
Dieser Artikel (230668-02) erscheint in Elektor September/Oktober 2024.
Über den Autor
Dr. Claus Kühnel hat an der Technischen Universität Dresden Informatik studiert und entwickelt seit vielen Jahren erfolgreich eingebettete Systeme, unter anderem für Labordiagnosegeräte. In diesem interdisziplinären Bereich kam er mit der Maker-Szene in Kontakt. Er hat zahlreiche Artikel und Bücher über Mikrocontroller-Hardware und -Software im In- und Ausland veröffentlicht. Er ist ein absoluter Fan neuer Technologien rund um Mikrocontroller.