LoRa Node Project op zonne-energie: Een modulaire, compacte en veelzijdige IoT-oplossing
Autonoom werkende sensor nodes hebben zowel draadloze communicatie als een autonome voeding nodig. In dit artikel maat u kennis met een Internet of Things (IoT) node op een accu, opgeladen door een zonnecel, met LoRaWAN connectiviteit. We focussen ons op deze stroomvoorziening, en het op afstand monitoren van de verschillende spanningen via Bluetooth en LoRa. Omdat er veel verschillende sensormodules beschikbaar zijn, en er ook goede softwareondersteuning is, kunt u het project eenvoudig aanpassen aan uw specifieke behoeften.
Om een LoRa-node op zonne-energie te bouwen, die ook geschikt is voor het aansluiten van sensoren, gebruik ik het WisBlock ecosysteem van RAKwireless. De RAK19007 WisBlock Base Board 2nd Gen is goed bruikbaar als basis voor het WisBlock Core controller board en verschillende sensormodules. De RAK4631-R is een low-power WisBlock Core op basis van een nRF52840 MCU van Nordic Semiconductor en een SX1262 LoRa chip van Semtech, die zowel Bluetooth Low Energy (BLE) als LoRaWAN connectiviteit biedt. (Zie het tekstvak "LoRa en LoRaWAN".)
De RAK4631-R is uitgerust met de RAKwireless Unified Interface V3 (RUI3), waarmee het creëren van software voor IoT-nodes aanzienlijk wordt vereenvoudigd. Ik gebruik zelf de RUI3 API voor het programmeren van applicaties. Verder laat ik de configuratie van het IoT-apparaat met de WisToolBox app zien. Meer informatie over het WisBlock ecosysteem vindt u op de website van RAKwireless en in mijn e-book, IoT-Projects for Makers i>, inclusief een introductie en toepassingsvoorbeelden.
LoRa en LoRaWAN
LoRa, afkorting van Long Range, is een draadloze communicatie technologie die data transmissie over lange afstanden mogelijk maakt bij een laag stroomverbruik, waardoor het ideaal is voor IoT-toepassingen. LoRaWAN is een protocol dat op LoRa is gebouwd en een gestandaardiseerde en schaalbare manier biedt om de connectiviteit van LoRa apparaten over lange afstanden te beheren. Samen maken LoRa en LoRaWAN energiezuinige wide-area netwerkoplossingen mogelijk voor verschillende toepassingen. Het is een zeer fascinerende technologie, wat dit artikel duidelijk laat zien.
Voeding
De RAK19007 is een WisBlock Base Board 2nd Gen die verschillende WisBlock Modules met elkaar verbindt. Hij heeft een USB Type-C connector, aansluitingen voor de voeding, en interconnecties met de aangesloten modules. Figuur 1 toont een bovenaanzicht van een RAK19007. Het gedeelte helemaal links toont de beschikbare voedingsopties, met JST connectoren voor zonne-energie en accu, en de USB-C voor voeding en programma upload. De module ondersteunt low-power accuvoeding, het opladen van lithium (LiPo) accu’s, en het opladen hiervan door zonnecellen.
Figuur 2 toont de belangrijkste onderdelen van de voeding van een RAK19007. De drie mogelijke opties voor het voeden van de RAK19007 zijn VBUS van USB-C, groene stroom van een zonnecel, en een externe spanning VCC_IN. De bron met de hoogste spanning wordt geschakeld naar VBUS_D. Zolang VBUS_D hoger is dan de accuspanning VBAT bepaalt VBUS_D de VCC-spanning. Indien VBUS_D lager of niet aanwezig is bepaalt VBAT de ingangsspanning voor het genereren van de bedrijfsspanning van 3,3 V voor de WisBlock-modules, inclusief WisBlock Core, met behulp van een SGM6036 ultra-low power step-down converter.
Energiebeheer
De RAK19007 heeft geen power management systeem, zoals een AXP192 of iets dergelijks, daarom kunnen alleen de beschikbare spanningen worden gebruikt om het laadniveau van de LiPo accu te controleren. De accuspanning VBAT wordt gemeten via een spanningsdeler die beschikbaar is op analoge ingang AIN0. De analoge ingang AIN1 is beschikbaar op de J11 header voor het meten van de Green Power spanning. Ook daar is een spanningsdeler nodig. In een praktijktest zal ik de twee spanningen Vsol en Vbat meten en ze verwerken ter bepaling van het quotiënt State = Vsol/Vbat. Indien State > 1 is dan is de accu opgeladen en voedt de zonnecel het apparaat. Indien State < 1 is dient de accu het apparaat van stroom voorzien en wordt deze ontladen.
Met behulp van de RAKwireless Unified Interface V3 (RUI3) is het maken van een IoT-toepassing met de juiste firmware eenvoudig. De bijbehorende code om de waarden van de spanningen Vsol en Vbat te krijgen is als volgt:
float Vsol = readADC(AIN1);
float Vbat = api.system.bat.get();
float State = Vsol/Vbat;
Setup
Met het programma RAK4631-R_Sensor-Test.ino heb ik eerst de interne ADC getest, evenals de modules RAK1903 (Ambient Light) en RAK14001 (RGB LED) (blokschema in figuur 3). U kunt dit programma vinden op mijn GitHub repository . De RAK1903 WisBlock Ambient Light Sensor Module is nodig om informatie te geven over het verloop van het omgevingslicht gedurende de dag. Met de RGB-LED biedt de RAK14001 een signaleringsoptie die verder gaat dan de blauwe en groene LED's op het baseboard. Beide modules zijn optioneel, en zijn niet vereist voor het beoogde doel van het project.
Ik gebruik een RAKBox-B5 Transparent Acrylic Enclosure om het testapparaat veilig te kunnen gebruiken, waarbij ik weet dat deze behuizing niet weerbestendig is (figuur 4). Een voordeel is dat deze behuizing al een accuhouder heeft voor een LiPo van het format van de 18650. Ik gebruik dit type LiPo accu graag omdat het door de vorm van de behuizing gemakkelijker te hanteren is dan een ander formaat LiPo-accu. LiPo-accu’s van het type 18650 zijn verkrijgbaar met verschillende capaciteiten. Een overzicht van diverse types/fabrikanten vindt u op . De hier gebruikte accuhouder is gemaakt voor een "korte" LiPo-accu. Zie figuur 5, waar de verschillende varianten 18650 LiPo-accu’s te zien zijn.
Zonnepaneel
In de accutests, gepubliceerd op de link bij , haalt een LiPo accu met 3500 mAh en een ontlaadstroom van 1000 mA op een spanning van 2,5 V een gebruiksduur van 200 uur. Ruw geschat kan een ontlaadstroom van 1 mA worden aangehouden voor een verwachte gebruiksduur van 138 dagen. Het verminderen van het stroomverbruik houdt in dat de IoT-node het grootste deel van de tijd in de slaapstand moet blijven, en alleen aangezet wordt voor metingen en gegevensoverdracht. Om de autonome werking van de IoT-node voor een bepaalde gebruiksduur te garanderen moet het ontladen van de accu hiermee corresponderen. Het RAK19007 baseboard kan de accu opladen door deze te koppelen aan de zonnecel, indien er voldoende zonlicht is. Een revolt MicroUSB zonnepaneel is dan een eenvoudige optie om deze zonnebuffering te realiseren (figuur 6).
Het revolt MicroUSB zonnepaneel dat in figuur 6 wordt getoond bestaat uit mono kristallijne zonnecellen met een hoog rendement en een lange levensduur. Hij levert een uitgangsspanning van 5 V bij een 5 W laadvermogen. De kabellengte is 3 m. De flexibel verstelbare montagebeugel en de IP65 beschermingsklasse van de behuizing zorgen voor goede basis voorwaarden voor installatie buitenshuis. Vanwege de 3,3 V bedrijfsspanning van de gebruikte RAK4631 core module hebben we een spanningsdeler nodig om de spanning van de zonnecel te meten.
Voor dit doel gebruik ik een microUSB breakout board, zoals weergegeven in figuur 7, om de spanningsdeler toe te voegen. Vsol en GND gaan naar de JST connector op de RAK19007 baseboard. De spanning VAIN1 gaat naar de analoge ingang AIN1 op de J11 header. Figuur 8 toont de complete testopstelling voor het monitoren van de spanningen van de zonnecel en de LiPo accu.
Applicatieprogramma's
Het applicatieprogramma moet de spanningen van de zonnecel en de LiPo accu opvragen en de resultaten draadloos versturen. Om het stroomverbruik van het apparaat te verminderen moet de RAK4631 core het grootste deel van de tijd in de slaapstand staan. Met behulp van de RUI3 API is het niet ingewikkeld om dit overschakelen naar de slaapstand te implementeren. De applicatieprogramma's, die in de volgende paragrafen worden geïntroduceerd, verschillen van standaard Arduino programma's. De functie loop() bevat meestal alle functionaliteit die eindeloos herhaald dient te worden. Maar hier zet de loop() functie alleen de RAK4631-core in de slaapstand. Een timergestuurde handler voert alle functionaliteiten van de actieve fase uit. Ik heb twee versies van de applicatie gebouwd. De ene versie stuurt de meetresultaten door via BLE UART, en de tweede via LoRaWAN.
BLE toepassing
Na initialisatie door setup() vraagt een timergestuurde handler de spanningen op, en slaat de verzamelde metingen op in een datapakket dat serieel via BLE wordt verstuurd. Zoals gezegd zet de loop() functie de RAK4631 core weer in slaapstand. U kunt het programma RAK4631-R_Sleep_Test_BLE.ino vinden op GitHub via . Tijdens de slaapstand heb ik op een bronspanning van 3,8 V een stroomverbruik gemeten van 270 μA. Om de door BLE ontvangen gegevens te visualiseren gebruik ik de Android app Serial Bluetooth Terminal 1.46i> van Kai Morich, beschikbaar in de Google Play Store.
Figuur 9 toont de spanningsstatus na het inschakelen in de avond. De State < 1 betekent dat de accu het apparaat van stroom voorziet en zal worden ontladen. De volgende dag was een zonnige oktober dag: we hadden een State > 1, en de zonnecel leverde voldoende spanning om het apparaat van stroom te voorzien en de accu op te laden (figuur 10).
LoRaWAN-toepassing
Voordat ik de LoRaWAN-applicatie ging programmeren heb ik eerst de WisToolBox desktop app gebruikt om de RAK4631 core te configureren. De WisToolBox desktop app communiceert via USB met de WisBlock devices en, na het selecteren van de juiste USB poort en de RAK4631 core module, kunnen we de device info op het dashboard zien (figuur 11). U kunt alle parameters die nodig zijn voor de LoRaWAN configuratie instellen via de menu parameters, zoals weergegeven in figuur 12 en figuur 13.
De parameters die in WisToolBox zijn ingesteld worden naar de RAK4631 core gestuurd en opgeslagen in het Flash geheugen. In het applicatieprogramma is hun instelling niet langer nodig. In mijn programma, beschikbaar op GitHub , RAK4631-R_Sleep_Test_LoRaWAN.ino, hanteerde ik nog steeds de traditionele methode met expliciete declaratie. Tijdens de slaapstand heb ik op een bronspanning van 3,8 V een stroomverbruik gemeten van 235 μA.
The Things Stack
Hier ga ik het The Things Stack Sandbox (TTSS) cluster gebruiken voor Europa (eu1), voorheen The Things Stack (Community Edition, TTSCE), als LoRaWAN network server (LNS). Deze clusters zijn bedoeld voor niet-commerciële, kleinschalige tests en experimenten, en beheren de connectiviteit van LoRaWAN apparaten. Dit is vrij beschikbaar en open-source, en daarom voor iedereen toegankelijk om te gebruiken en aan te passen, en wordt ondersteund door The Things Network .
TTSS vereist registratie van mijn apparaat; de LoRaWAN sleutels, enz. (weergegeven in figuur 12) zijn vereist voor registratie. U kunt ook details vinden over TTSS als LoRaWAN network server, en Datacake als een visualisatie tool, in mijn andere boek met de titel Develop and Operate Your LoRaWAN IoT Nodes i>. Voor TTSS geldt een Fair Use Policy die de uplink airtime beperkt tot 30 seconden per dag (24 uur) per node, en de downlink berichten tot 10 berichten per dag per node. De payload en de frequentie van het uploaden bepalen de uplink airtime. Met behulp van een airtime calculator krijgt u gedetailleerde informatie over de mogelijke upload frequentie.
Met een payload van vijf bytes en een datasnelheid DR5 (SF7BW125) komt de resulterende airtime neer op 51,5 ms. Tussen twee uploads moet er minimaal 148,2 seconden zijn om te voldoen aan de fair use policy. De upload tijd in het applicatieprogramma is 5 minuten. Na het succesvol registreren en starten van de applicatie toont de TTSS console de ontvangen uplink berichten (figuur 14). De gebruikte payload decoder is ook beschikbaar op GitHub.
Resultaten
De event details van deze console output worden vermeld in Listing 1, waarin blijkt dat er aan de specificaties wordt voldaan. Bandbreedte, spreidingsfactor en de resulterende airtime zijn als verwacht, en vetgedrukt gemarkeerd.
Listing 1: De console output.
"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"
},
Om de gegevens die de LoRaWAN network server ontvangt te visualiseren gebruik ik Datacake, dat gemakkelijk is te integreren met TTSS. Bestudeer de online documentatie of de voorbeelden in het hierboven genoemde boek. Na die integratie kunt u een Datacake dashboard maken dat vergelijkbaar is met figuur 15.
U kunt de werkelijke spanningen van de zonnecel en de LiPo accu zien, en het verloop van deze spanningen over één dag. Overdag levert de zonnecel stroom om de LiPo accu op te laden. De spanning van de zonnecel daalt vroeg in de avond onder de LiPo. Vervolgens voedt de batterij de node en wordt deze op natuurlijke wijze ontladen. De test duurde enkele weken en toonde aan dat de IoT-node betrouwbaar werkte, zelfs onder minder gunstige weersomstandigheden in de herfst en winter.
Dit artikel (230668-03) verschijnt in Elektor september/oktober 2024.
Over de auteur
Dr. Claus Kühnel studeerde informatietechnologie aan de Technische Universiteit van Dresden en ontwikkelt al vele jaren embedded systemen voor onder andere diagnostische laboratoriumapparatuur. In dit interdisciplinaire veld kwam hij in aanraking met de maker community. Hij heeft in binnen- en buitenland talrijke artikelen en boeken gepubliceerd over hardware en software voor microcontrollers. Hij is gepassioneerd door nieuwe technologieën met betrekking tot microcontrollers.