ID.nl logo
Bouw je eigen weerstation
© Reshift Digital
Huis

Bouw je eigen weerstation

Krijgen we een onstuimige herfst of worden we verwend met een zwoele nazomer? Lekker lang op het terras kunnen zitten zou wel leuk zijn, maar misschien moeten we het doen met zo’n natte bedoening die aanhoudt tot de winter. Er is weinig aan te veranderen, maar vanaf nu weet je wél precies waar je aan toe bent, dankzij je eigen, zelfgemaakte weerstation.

De code is na een kleine aanpassing ook geschikt voor onze Vlaamse lezers. Als je bij https://xml.weerslag.nl/xmlfeed.xml zoekt naar het gewenste station, kun je bij **

Boodschappenlijstje

  • Behuizing (€ 2,-, bijvoorbeeld een pillendoosje van Kruidvat) Bijvoorbeeld bij www.rotor.eu:
  • Passieve piëzo-buzzer (€ 2,-) Bijvoorbeeld bij www.martoparts.nl:
  • NodeMCU-module (€ 9,95)
  • Oled-beeldscherm (€ 6,95) Bijvoorbeeld bij www.conrad.nl:
  • Diffuse leds, 6 stuks (€ 0,60)
  • Trekontlasting M10 (€ 1,-)
  • Experimenteerprintplaatje 80 × 50 mm (€ 2,50)
  • Schroefterminal of klemschroefblok 2-polig (€ 0,21)
  • Draad 0,20 mm², 2 meter (€ 0,60)
  • Usb-oplader 5 V, 1,5 A (€ 5,50)
  • Usb-kabel (€ 1,63) Gereedschap: soldeerbout en soldeertin, zijkniptang, stanleymes, vijl. Totale kosten: ca. € 33,-

Het weerstation werkt niet met eigen sensoren en meetinstrumenten, maar haalt elke vijf minuten de nieuwste gegevens op van het dichtstbij gelegen KNMI-meetstation en van Buienradar. Het toont de actuele weersituatie op een oled-schermpje en waarschuwt als het gaat regenen of vriezen. Ook bij een voor jouw regio uitgegeven weeralarm krijg je een melding. Gekleurde leds geven de weersituatie aan: bij groen is er niets aan de hand, blauw is regen, wit is vorst en bij een weeralarm brandt geel, oranje of rood.

Hardware

De schakeling is gebouwd rond een NodeMCU, een ontwikkelbordje dat is gebaseerd op een ESP-wifi-module. De overige onderdelen zijn een oled-beeldschermpje, zes leds, drie weerstanden en een piëzo-luidspreker. Het beeldscherm en de luidspreker kunnen rechtstreeks op de module worden aangesloten, voor de leds zijn voorschakelweerstanden nodig. Normaal gesproken krijgt elke led zijn eigen weerstand, maar omdat er van groen, geel, oranje en rood altijd slechts één led tegelijk brandt (ter indicatie van een weeralarm) volstaat voor die vier leds één weerstand. Blauw en wit kunnen op ieder moment branden, dus die krijgen wel elk een eigen weerstand.

Het beeldscherm communiceert met de ESP-module door middel van een zogenoemde i2c-bus. Het voordeel daarvan is dat er slechts twee verbindingen nodig zijn voor de communicatie en twee voor de voeding, dus vier in totaal. Mede daardoor is de schakeling voor zijn veelzijdigheid erg eenvoudig van opzet.

©PXimport

©PXimport

©PXimport

©PXimport

©PXimport

De bonte verzameling componenten.

Ontwikkelomgeving

De ESP-module is het gemakkelijkst te programmeren met de Arduino-ontwikkelomgeving IDE. Deze kun je op Arduino.cc downloaden. Omdat Arduino IDE niet primair voor deze module is bedoeld, zul je nog wat extra benodigde onderdelen moeten installeren. Klik daarvoor op Bestand / Voorkeuren en vul op het tabblad Instellingen bij Additionele Board Beheer URLs deze url in: http://arduino.esp8266.com/stable/package_esp8266com_index.json Voeg de module daarna toe via Hulpmiddelen / Board / NodeMCU 1.0 (ESP-12E Module). Sluit de module aan via een usb-kabel en selecteer in Arduino IDE de juiste poort (Hulpmiddelen / Poort, kies de com-poort met het hoogste nummer). Als alles goed is gegaan, is je opstelling nu klaar om met programmeren te beginnen. Mocht de module onverhoopt niet door je pc of Mac worden herkend, dan kun je Hubbit vinden waarmee het zeker moet lukken.

©PXimport

Werking

We leggen even uit hoe een en ander gaat werken als je alles eenmaal af hebt. Zodra de schakeling wordt aangezet, probeert de NodeMCU verbinding te maken met je wifi-netwerk. Als dat gelukt is, wordt achtereenvolgens informatie opgehaald over de hoeveelheid regen, het weerrapport en een eventueel weeralarm. De oorspronkelijke webpagina’s van de te raadplegen webpagina’s passen niet in het beperkte geheugen van de module. Door via een tussenstap (een serverscript dat draait bij ons moederbedrijf Reshift) alleen de gegevens van het voor jou relevante weerstation te tonen, is dat probleem opgelost.

Het compacte beeldscherm toont de windrichting, de windkracht, de temperatuur en een pictogram van de weersituatie. Standaard brandt de groene led. Als er regen aankomt, gaat de blauwe led aan, bij vorst brandt de witte led en bij een weeralarm brandt geel, oranje of rood. Twee piepjes geven in dit soort situaties aan dat er wat aan de hand is.

Oled-bibliotheek

Om pictogrammen en lettertypen op het beeldschermpje te kunnen tonen, is een extra bibliotheek nodig. Klik in Arduino IDE op Schets / Bibliotheek gebruiken / Bibliotheken beheren. Typ U8g2 bij Filter je zoekresultaten en klik onder het item U8g2 by oliver op Installeren. Herstart daarna Arduino IDE. Je kunt nu in je code de nieuwe bibliotheek gebruiken met de regel #include

©PXimport

Uitleg bij de code

De code kun je hier downloaden. We leggen hier eerst uit hoe de code werkt, voordat we er daadwerkelijk mee aan de slag gaan (vanaf paragraaf ‘Code uploaden en testen’). Je kunt de code wel alvast bekijken met Kladblok of Notepad++.

Het programma begint met het laden van vier bibliotheken via de opdracht include: ESP8266WiFi.h voor alle netwerkactiviteit, Wire.h voor de communicatie met het beeldscherm en U8g2.h voor het tonen van grafische informatie op het scherm (zie kader ‘Oled-bibliotheek’). Dankzij deze kant-en-klare code van derden kunnen we ons direct richten op de functionele aspecten van de schakeling. De vierde bibliotheek (weathericons.h) bevat de weerpictogrammen en is onderdeel van ons programma.

Het programma begint met het declareren van diverse variabelen en een lange lijst constanten. Daarvan hoef je er maar vijf aan te passen aan jouw situatie, zie kader ‘Constanten’. Via de constanten voor de luidspreker en de leds kun je deze onderdelen in de code aanroepen met hun omschrijving in plaats van een lastig te onthouden pinnummer. Met de constante Wachttijd stel je in hoe vaak de weerinformatie wordt opgehaald, standaard eens per vijf minuten. Periode bepaalt hoever er vooruitgekeken wordt of het regent. Standaard staat hier 1, wat staat voor vijf tot tien minuten vooruit. Hoewel het handig lijkt om hier een langere periode te kiezen, blijkt de nauwkeurigheid van de voorspelling dan sterk af te nemen.

De strings aan het einde van het lijstje constanten zijn de codes waarmee het KNMI op zijn website een weeralarm aangeeft. Hierin herken je in de waarden red, orange, yellow en green de mogelijke omstandigheden.

Onder Setup worden de pinnen als uitgang gedefinieerd en met het wifi-station verbonden. Tevens wordt het domein van de host voor de regenvoorspelling opgehaald en toegekend aan de variabele raindomain, die verderop in de code wordt omgezet in rainhost. Alle leds en de luidspreker gaan ten slotte beurtelings kort aan om er zeker van te zijn dat ze werken.

©PXimport

Constanten

Om het programma te kunnen gebruiken, zul je enkele constanten moeten aanpassen. Laat de dubbele aanhalingstekens staan, wijzig alleen wat daarbinnen staat! De naam van je wifi-netwerk: const char* ssid = "SSID" Het bijbehorende wifi-wachtwoord: const char* password = "PASSWORD" Het pad naar het serverscript met de gewenste coördinaten als parameters: const String rainurl = "URL" De code van het meetstation waar je het dichtstbij woont: const String weerstation = "CODE" Het pad naar het serverscript met jouw provincie of regio als parameters: const String alarmurl = "URL" Je gps-coördinaten vind je eenvoudig door met je browser naar Google Maps te gaan en in te zoomen op je straat. In de adresbalk staan de coördinaten achter het @-teken. Gebruik alleen het aantal graden en de eerste twee decimalen, in het voorbeeld dus 52.36 en 4.85 (zie afbeelding). Zie de commentaren met uitleg in de code om te zien hoe je de lijsten met meetstations en mogelijke regio’s te zien krijgt.

©PXimport

Piepsignaal

Zoals eerder opgemerkt komt bij bepaalde situaties geluid uit de piëzo-luidspreker, zoals bij verwachte regen, als de temperatuur onder nul komt of bij een weeralarm. Om te voorkomen dat bijvoorbeeld bij buien elke tien minuten de pieper afgaat, is het aantal keer dat dit alarm klinkt beperkt. De duur is vastgelegd door een constante interval van het type unsigned long en staat standaard op een uur.

Zolang er nog niets heeft geklonken, gaat de pieper bij de eerste aanleiding. Vanaf dat moment geldt als voorwaarde dat er ten minste 3.600.000 milliseconden (een uur dus) verstreken moeten zijn voordat er weer wat mag piepen. De code maakt gebruik van een ingebouwde timer, die 49 dagen lang het aantal milliseconden telt vanaf het moment dat de module wordt aangezet. Daarna begint de teller weer bij nul, maar daar houdt de code rekening mee. De leds hebben met deze beperking uiteraard niets te maken en reageren direct op veranderingen.

Weersituatie in het scherm

De gegevens zijn afgeleid uit de xml-feed van Buienradar.nl. Dat houdt in dat de weergegevens binnen xml-tags staan, waar je deze uit moet halen. De functie lees_tot_tag verwerkt de feed. Deze wordt in de functie checkweer verderop in de code aangeroepen met als parameters de begin- en eindstrings van de gezochte weerinformatie. Bij de temperatuur-tag wordt bovendien nog een waarde 1 toegekend aan vorst, daarover straks meer. In checkweer staan de letterlijke tags waarbinnen de informatie staat.

De feed wordt ingelezen vanaf het gewenste weerstation en als dan de gezochte begintag is gevonden, knippen we die regel in stukken. Als regel bijvoorbeeld <temperatuurGC>16.5</temperatuurGC> is, halen we met substring de tekst 16.5 eruit. Die voegen we toe aan de string weersituatie, die verder wordt verwerkt door de functie checkweer. Daarbinnen gebeurt de echte magie, zoals het omzetten van de weersituatie naar het juiste pictogram en de windrichting naar de windpijl.

De functie eindigt met het aanroepen van displayweather met vier parameters: de windrichting, de temperatuur, de windkracht en het weersymbool. Aan windkracht en temperatuur voegen we respectievelijk Bft en °C toe, waarna de waarden naar het scherm worden geschreven.

Vorst- en weeralarm

Tot slot laat de functie lees_tot_tag de blauwe led branden als het vriest, door te kijken of er een minteken voorkomt in de regel temperatuur. De test op de aanwezigheid daarvan vindt alleen plaats als checkweer de waarde 1 meegeeft aan vorst, dus alleen wanneer de temperatuur wordt doorgegeven. Dit voorkomt vals alarm als er elders in de tekst een minteken staat. Door booleaanse variabele ijs op true (waar) te zetten na het eerste piepsignaal, piept de luidspreker alleen aan het begin van een vorstperiode. De temperatuur moet eerst weer boven nul zijn geweest, voor er weer een vorstalarm kan klinken.

De functie checkalarm is redelijk rechttoe-rechtaan. Doordat de pagina is voorbewerkt (zie paragraaf ‘Werking’) volstaat het lezen van slechts één tekstregel. De aanwezigheid van de string code_rood, code_oranje, code_geel of code_groen (wat wordt getest met indexOf) bepaalt vervolgens welke led er brandt. Bij een weeralarm gaat de pieper en wordt de booleaanse variabele alarm op true gezet, bij code groen op false. Net als bij het vorstalarm voorkomt dit herhaaldelijk piepen, zolang er een weeralarm geldt.

©PXimport

Regen

Omwille van de betrouwbaarheid en de flexibiliteit gebruiken we niet één enkele waarde, maar een tabel met de regenverwachting per vijf minuten voor de komende twee uur. Dat maakt het in theorie mogelijk om een lange periode vooruit te kijken, ware het niet dat de kwaliteit van die langetermijnvoorspellingen vaak te wensen overlaat. Het bruikbaarst zijn de gegevens tot pakweg een kwartier vooruit. De praktijk leert bovendien dat de kwaliteit enorm toeneemt als er twee aaneengesloten blokken van vijf minuten allebei regen of juist droog weer voorspellen. Om die reden kijkt de functie checkrain zowel naar de geselecteerde periode als naar die van de regel erna (vijf minuten later). Pas als ze het ‘met elkaar eens zijn’, verandert de status.

De regentabel bestaat uit 24 regels en twee door het sluisteken (|, beter bekend als pipe) gescheiden kolommen. De eerste kolom bevat de hoeveelheid neerslag, de tweede de tijd. De tabel wordt ingelezen en met de functie getValue in twee etappes gesplitst om de regendata over te houden. Die waarde zetten we om naar een geheel getal, zodat we ermee kunnen rekenen. De hoeveelheid doet er niet toe, nul staat voor droog en alles groter dan nul betekent regen. Eerst halen we de gekozen periode +1 op en via een aantal tussenstappen kennen we de waarde toe aan de variabele regen. Daarna volgt de gekozen periode zelf, die resulteert in de waarde voor regennu.

Zijn beide groter dan nul, dan gaat de blauwe led branden en klinkt een piepsignaal. Daarbij wordt de booleaanse variabele nat op true gezet om bij langdurige regenval herhaald piepen te voorkomen. Zijn beide variabelen gelijk aan nul, dan is het droog en is de blauwe led uit. Nat wordt false, zodat de pieper de volgende keer dat het regent weer alarm mag slaan.

Code uploaden en testen

De volgende stappen vereisen dat de ontwikkelomgeving Arduino IDE al is geïnstalleerd en geconfigureerd (zie kader ‘Ontwikkelomgeving’). Sluit de ESP-module aan met een usb-stekker en pak het zip-bestand dat je hebt gedownload uit naar een willekeurige map op je harde schijf en open de map esp-weerstation-grafisch. Dubbelklik op het bestand esp-weerstation-grafisch.ino en wijzig de gegevens bij ssid, password, rainurl, weerstation en alarmurl (zie ook het kader ‘Constanten’).

Druk op Ctrl+Shift+M om de seriële monitor te openen, waarmee je straks in de gaten kunt houden wat er gebeurt. Stel de snelheid van de seriële monitor in op 115200 baud. Klik op het pijltje naar rechts bovenin de ontwikkelomgeving. De code wordt nu achtereenvolgens gecontroleerd, gecompileerd en geüpload naar de module.

Eerst wordt de wifi-verbinding opgezet en als dat is gelukt, verwerkt de module achtereenvolgens de regendata, het weerrapport en de status van het weeralarm. Bij rustige, droge omstandigheden boven nul verschijnt het weerrapport op het scherm en brandt de groene led. Is er neerslag en/of vorst, dan branden de blauwe en/of de witte led. En bij een actief weeralarm ten slotte brandt geel, oranje of rood. Elke vijf minuten (of andere periode die je hebt ingesteld) wordt de informatie ververst, waarbij het schermpje gedurende enkele seconden uitgaat.

Niet alle meetstations zijn bruikbaar!

Helaas geven sommige meetstations niet alle gegevens door die wij gebruiken. Controleer daarom in een browser eerst of de gebruikte data aanwezig zijn. Voor meetstation De Bilt (stationcode 6260) typ je view-source:http://arduino.reshift.nl/weermonitor.php?weerstation=6260 in de adresbalk van je browser. Zijn de data binnen de tags **

©PXimport

©PXimport

©PXimport

▼ Volgende artikel
KPN-app geeft nu persoonlijk wifi-advies aan gebruikers
© KPN
Huis

KPN-app geeft nu persoonlijk wifi-advies aan gebruikers

KPN heeft een nieuwe functie toegevoegd aan de MijnKPN-app waarmee gebruikers persoonlijk wifi-advies krijgen. De app helpt klanten om het draadloze netwerk in huis te verbeteren, bijvoorbeeld door te laten zien waar een wifiversterker beter kan staan.

De nieuwe functie analyseert de kwaliteit van het wifi-netwerk en geeft praktische tips om de dekking te verbeteren. Als een SuperWifi-punt te ver van het modem staat, laat de app zien waar het beter geplaatst kan worden. Ook meldt de app wanneer het modem een update nodig heeft. Met één druk op de knop krijgt de gebruiker direct inzicht in wat er verbeterd kan worden, zonder dat er een monteur hoeft langs te komen.

Volgens KPN is het doel om klanten meer grip te geven op hun thuisnetwerk, zonder technische kennis. Het advies verschijnt automatisch in de app nadat de gebruiker toestemming geeft voor de analyse.

©KPN

KPN's SuperWifi-producten maken gebruik van wifi 6-technologie en zijn bedoeld om overal in huis een stabiel signaal te bieden. Via de MijnKPN-app kunnen gebruikers niet alleen hun netwerk optimaliseren, maar ook instellingen beheren zoals gastwifi of extra SuperWifi-punten toevoegen.

De nieuwe wifi-functie is per direct beschikbaar in de MijnKPN-app. Meer informatie over SuperWifi en de app staat op kpn.com/superwifi en kpn.com/app.

Wat is SuperWifi?

SuperWifi is de naam van KPN's eigen wifiversterkers die samenwerken met het modem om het signaal in huis te versterken. De apparaten gebruiken wifi 6, een snellere en stabielere standaard die beter omgaat met meerdere apparaten tegelijk. Via de MijnKPN-app kunnen gebruikers zien waar de versterkers het best geplaatst kunnen worden.

▼ Volgende artikel
Zo spoor je energieslurpers in Windows 11 op
© Denys Prykhodov
Huis

Zo spoor je energieslurpers in Windows 11 op

Heb je het idee dat de batterij van je laptop in Windows 11 wel erg snel leegloopt? Vaak ligt dat niet aan de accu zelf, maar aan een toepassing die ongemerkt veel stroom vraagt. Gelukkig kun je eenvoudig nagaan welke apps de meeste energie verbruiken.

Dit gaan we doen

In dit artikel leer je hoe je in Windows 11 ziet welke apps de meeste energie verbruiken en hoe je de accuduur van je laptop verbetert.

Lees ook: Zo zorg je dat je laptop zo lang mogelijk blijft werken op één acculading

De energiegrafiek

In Windows 11 zijn er minstens twee manieren om te controleren welke apps de meeste batterij verbruiken: via de app Instellingen en via Taakbeheer. Druk op Windows-toets+I om de Instellingen te openen en klik op Systeem. In het rechterdeel selecteer je het onderdeel Aan/uit en accu. Zo kom je op een pagina waar je bovenaan ziet hoeveel procent van de batterij nog vol is. Open het item Accuverbruik. Hierdoor krijg je een grafiek van het batterijniveau te zien. Je kunt de tijdsperiode bekijken: de Afgelopen 24 uur of de Afgelopen 7 dagen. In deze grafiek zoek je naar een opvallende terugval. Selecteer deze periode in de grafiek en sorteer de lijst apps op Totaal gebruik. Hierdoor lees je welke apps op dat moment de grote energieslurpers waren.

Hier was Microsoft Word de app die de meeste energie opeiste.

Via Taakbeheer

Ook met Taakbeheer herken je de apps die de batterij van de laptop leegtrekken. Open Start en zoek Taakbeheer. Klik bovenaan op Processen en klik daarna met de rechtermuisknop op een van de kolomkoppen om de opties Energieverbruik en Trend energieverbruik te openen.

De kolom Energieverbruik toont een momentopname van het huidige realtime stroomverbruik per proces. De kolom Trend energieverbruik geeft juist een overzicht van het gemiddelde stroomverbruik per proces. Een proces kan op een bepaald moment een hoog stroomverbruik aangeven als gevolg van een tijdelijke piek, terwijl het stroomverbruik over het algemeen toch laag is.

Zoek naar de toepassingen met een hoog energieverbruik.

Accu optimaliseren

Om energiebesparing in Windows 11 in te schakelen, open je de Instellingen en ga je opnieuw naar Systeem / Aan/uit en accu. Klik op de instelling Energiemodus en kies de optie Beste energie-efficiëntie voor de optie Op batterijstroom. Wanneer je deze stap hebt uitgevoerd, zal het systeem het stroomverbruik optimaliseren op basis van de levensduur van de batterij, in plaats van op basis van de prestaties van de laptop.

Om de batterij te sparen, kies je de optie Beste energie-efficiëntie.

Je eigen accu opladen?

Helemaal zen met een yogamat