Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel
Een relatief nieuw fenomeen in de energiewereld is het dynamische contract, waarbij de uurtarieven een dag van tevoren worden vastgesteld. Je mist de zekerheid, maar je kunt flink besparen door je verbruik slim te timen. Daarvoor is actuele prijsinformatie cruciaal. Een ESP32-microcontroller toont op een compact lcd-schermpje de prijzen per uur voor de hele dag, welke aanbieder je ook hebt.
Als je bij dagelijkse routines zoals het aanzetten van de vaatwasser, de wasmachine of de droger al op de klok kijkt, doe je dat waarschijnlijk alleen om te weten hoe laat de klus geklaard is. Maar met een dynamisch energiecontract bepaalt het uur ook de prijs ervan. Afhankelijk van het moment waarop je een apparaat aanzet, kost het je dus meer of minder. Ook voor bezitters van een elektrische auto kan het kiezen van het juiste moment van opladen aanzienlijk schelen in de kosten.
In dit artikel maken we een mini-dashboard met een lcd-schermpje van 1,8 inch dat de uurtarieven van het huidige en het volgende etmaal laat zien in een heldere grafiek. Zo’n compact schermpje helpt om het project zelf energiezuinig te houden, net als de ESP32-microcontroller. Die module werkt zonder besturingssysteem en voert alleen vooraf gedefinieerde instructies uit, die zijn vastgelegd in een programma. Dat is geschreven in de taal C++ en is behoorlijk uitgebreid. Het goede nieuws is dat je alleen de naam en het wachtwoord van je draadloze netwerk hoeft in te vullen en een API-sleutel.
We bespreken eerst de software en dan het bouwproces. Er is zowel een versie voor het tonen van de stroomprijs én de actuele gasprijs, en een versie die alleen de stroomprijs laat zien. Aangezien de meeste mensen dezelfde aanbieder hebben voor stroom en gas, gaan we in onderstaande beschrijving uit van de versie met gasprijs. Voor de uitvoering en werking maakt dat verder geen verschil.
Voorbereiding
Zoals gezegd hoef je niet zelf te programmeren: dat werk hebben we al voor je gedaan. Je hoeft alleen maar dit zip-bestand te downloaden met daarin het programma en een aangepast bestand voor de juiste aansturing van het beeldscherm. Pak het zip-bestand alvast uit, de bestanden heb je straks nodig.
We gaan ervan uit dat je Arduino IDE hebt geïnstalleerd en dat de module wordt herkend. Doorloop anders eerst de stappen uit de volgende paragraaf ‘Arduino IDE installeren’.
Ter voorbereiding op het uploaden van de software zijn er nog twee zogenoemde bibliotheken nodig voor de IDE. Deze uitbreidingen nemen je een hoop werk uit handen bij in dit geval de aansturing van het beeldscherm en het verwerken van de data.
Start Arduino IDE en klik op Hulpmiddelen / Bibliotheken beheren en zoek naar tft_espi. Selecteer TFT_eSPI door Bodmer en kies Installeren. Herhaal deze stappen, maar zoek nu naar arduinojson en installeer ArduinoJson door Benoit Blanchon. Sluit Arduino IDE af.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74044367](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695914110-02-arduinojson_16x9.png%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
De bibliotheken TFT_eSPI en ArduinoJSon maken het aansturen van het beeldscherm en het verwerken van de data een stuk eenvoudiger.
Arduino IDE installeren
Voor Windows en macOS zijn stuurprogramma’s nodig voor de communicatie met de module via usb. Die moet je downloaden en installeren.
Het uploaden van je code naar de module gebeurt straks met Arduino IDE. Download deze. Op het moment van schrijven is 2.1.0 de nieuwste versie, maar ook op de oudere versie 1.8 werkt het. De exacte versie is dus niet van belang. Geef de Windows-firewall toestemming als daarom gevraagd wordt.
Als de installatie is voltooid, start je het programma en via File / Preferences kun je achter Language de taal op Dutch (Nederlands) instellen. Dat is optioneel, maar in de volgende stappen gaan we uit van de Nederlandse benamingen.
Open Bestand / Voorkeuren en in het veld Bijkomende Borden Beheerder URL’s zet je de volgende url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Klik op OK ter bevestiging. Ga naar Hulpmiddelen / Bord / Borden Beheerder en zoek naar esp32. Klik op de knop Installeren bij ESP32 door Espressif Systems en de driver voor de module wordt geïnstalleerd. Open Hulpmiddelen / Bord / esp32 / ESP32 Dev Module om de module te selecteren. Sluit de module aan via de micro-usb-kabel of usb-c-kabel en selecteer bij Hulpmiddelen / Poort de beschikbare com-poort. Trek ten slotte de usb-kabel uit de pc.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74044733](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695914337-k2-esp32-url_16x9.png%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
De informatie voor de module staat in een JSON-bestand, waarvan je hier de url invult.
Nog niet eerder met Arduino gewerkt?
Een starterskit vind je bij Bol.com
Enkele aanpassingen
Ga naar het eerder uitgepakte zip-bestand en kopieer het bestand User_Setup.h naar de map Documenten\Arduino\libraries\TFT_eSPI, waarbij je het gelijknamige bestand overschrijft. Ga weer naar het uitgepakte zip-bestand en dubbelklik op Enever_grafisch_gas.ino (dat staat in een submap met dezelfde naam). Heb je geen aardgas of neem je dat niet af van jouw stroomaanbieder, gebruik dan in plaats daarvan het bestand Enever_grafisch.ino.
Arduino IDE start nu met het programma, waarbinnen je nog maar enkele instellingen hoeft aan te passen om het te laten werken. De eerste twee noodzakelijke aanpassingen zijn zoals gezegd de naam en het wachtwoord van je wifi-netwerk, en de derde is de API-sleutel van de informatiebron Enever (zie volgende paragraaf).
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74044751](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695914455-03-user-setup-h_16x9.png%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
Voor de juiste aansturing van het beeldscherm is een kleine aanpassing nodig, die al is doorgevoerd in ons meegeleverde bestand.
Gratis API-sleutel
Ga naar www.enever.nl/prijzenfeeds en voer bij Token aanmaken je e-mailadres in. Je ontvangt een mailtje met daarin de tekenreeks die je in de code invoert op de plek waar API-SLEUTEL staat. Nu staat alles klaar en is het tijd om te controleren of alles tot nu toe is gelukt. Klik daarvoor op de ronde knop met het vinkje, links bovenaan in Arduino IDE.
Vindt het programma geen fouten, dan kun je de usb-kabel met de module op de pc aansluiten. Check nog even in Hulpmiddelen / Poort of de module daadwerkelijk is verbonden en open met Ctrl+Shift+M de seriële monitor. Klik links bovenaan op de ronde knop met het pijltje naar rechts om de software te uploaden. Aan het einde van de procedure wordt de module gereset en start de seriële monitor.
Als het goed is gegaan, zie je hoe de module eerst verbinding maakt met het draadloze netwerk en daarna met de website van Enever. Tot slot komt prijsinformatie en de huidige tijd voorbij. Als dat zo is, is het uploaden geslaagd!
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74044769](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695914519-04-alles-oke-uitsnede_16x9.png%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
Als je dit in de seriële monitor te zien krijgt, is het programmeren geslaagd.
Appje bij de laagste prijs
Eventueel kun je ervoor kiezen om een appje te ontvangen wanneer de stroomtarieven het laatste punt van de dag bereiken. WhatsApp zelf heeft daarvoor helaas geen API, maar de dienst CallMeBot biedt daarvoor een eenvoudige, gratis oplossing. Voeg om te beginnen het telefoonnummer +34644418720 toe aan je contactpersonen en geef het een naam naar keuze. Stuur een appje met de letterlijke tekst I allow callmebot to send me messages naar de zojuist aangemaakte contactpersoon en wacht totdat je een bericht terug krijgt. In dat bericht staat de API-sleutel, die je samen met je telefoonnummer invult in de Arduino-IDE. Verander tot slot achter bool WhatsApp de waarde false in true en klik weer links bovenaan op de ronde knop met het pijltje naar rechts om de software te uploaden. Daarmee zit het softwaregedeelte erop! Koppel de usb-kabel los van de pc en de module, en sluit Arduino IDE.
Uiteraard kun je de code aanpassen als je bijvoorbeeld ‘s nachts geen berichten wilt ontvangen. Misschien wil je zelfs een koppeling maken met slimme apparaten die je automatisch in- of uitschakelt. De mogelijkheden zijn vrijwel onbegrensd!
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74044781](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695914600-05-callmebot_16x9.png%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
Ontvang automatisch een appje als de prijs het laagst is.
Assembleren
Ondanks het geringe aantal componenten, kan de assemblage best een uitdaging zijn. In dit voorbeeld gebruiken we namelijk beide kanten van de printplaat, zodat de uiteindelijke schakeling zo compact mogelijk blijft. Houd je het liever iets eenvoudiger en is wat meer volume geen probleem, dan kun je ook kiezen voor een grotere printplaat waarop alles naast elkaar komt te staan. Het printplaatje in dit voorbeeld heeft uitsluitend losse eilandjes, zodat alle componenten willekeurig zijn te plaatsen.
Begin met de ESP32-module, die je niet strak tegen de printplaat monteert waardoor je de pinnen niet op maat hoeft af te knippen. Bijkomend voordeel van het ‘hoog op z’n poten’ zetten is een betere warmteafvoer. De module zit aan de kant zonder koperen eilandjes, wat straks de onderkant van de schakeling zal worden. Ook het (optionele) klemschroefblok komt aan deze kant, naast de module. Negeer de zwarte header op de foto, die diende slechts voor testdoeleinden.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74045899](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695914970-06-printplaat-onder-2_16x9.jpg%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
De onderkant van de printplaat, met alleen de ESP32-module en het klemschroefblok.
Solderen
We beginnen met het solderen. Weet je nog niet goed hoe je het best kunt solderen, lees dan dit artikel voor een opfriscursus.
Plaats op de andere kant van de printplaat de header, beide leds en de weerstand. Op de afbeelding zijn nog twee weerstanden te zien, maar een van de twee is tijdens het maakproces overbodig geworden. Nu kun je beginnen met solderen, waarbij je ook hier de pootjes van de componenten zo min mogelijk laat uitsteken aan de andere kant van de printplaat.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74046277](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695915238-07-printplaat-boven-1_16x9.jpg%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
Duw de pootjes van de module niet helemaal door de printplaat heen, zodat je kunt solderen zonder ze af te knippen.
Aan de slag met solderen?
Bij Bol.com vind je alles wat je nodig hebt
Verbind tot slot de componenten met soepel montagedraad met elkaar, zoals aangegeven in onderstaand schema. In het schema staan soms meerdere namen voor een en dezelfde aansluiting, omdat niet elke fabrikant dezelfde termen hanteert. Let op: waar in het schema 'GPIO' staat, wordt dat bij sommige modules 'IO' genoemd. Bij de meeste modules staat 'D' voor de nummers.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74047537](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695915344-08-energieprijzen-schema.jpg%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
Hier het aansluitschema, waarbij de opgedrukte pinnummering is aangehouden.
Strip met een kleine zijkniptang enkele millimeters van de draad en vertin het blanke uiteinde voordat je de pinnen van de componenten ermee met elkaar verbindt. Omdat niet elke module dezelfde lay-out heeft en de pinnummers bij verschillende fabrikanten kunnen afwijken, is het handiger om te werken met de witte opdruk aan de bovenkant van de modules. De cijfers in het schema zijn dus NIET de fysieke pinnummers! Het is even een precisiewerkje, het zijn uiteindelijk slechts vijftien verbindingen. De usb-kabel (in het schema aangegeven met usb+ en usb-) mag je nog heel even achterwege laten.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74047544](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695915403-09-printplaat-boven-2_16x9.jpg%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
Het met draad verbinden van de aansluitingen vergt nauwkeurig werken.
Bijna klaar
Verbind als laatste de drukknop via twee iets langere draden met de ESP32-module. Daarmee toont het scherm gedurende een minuut de prijzen van de volgende dag als die binnen zijn. Nadat je klaar bent en alles zorgvuldig hebt gecontroleerd, kun je de pinnen van het tft-schermpje voorzichtig in de header duwen.
Start Arduino IDE, sluit de ESP32-module weer aan op je pc en open je met Ctrl+Shift+M de seriële monitor om te kunnen zien wat er gebeurt. Als het goed is, maakt de module nu weer verbinding met Enever. Zodra de gegevens binnen zijn, toont het schermpje een grafiek met de prijzen per uur. De laagste prijzen worden in groen weergegeven en de hoogste in rood. Is de prijs op dit moment het laagst of juist het hoogst, dan brandt respectievelijk de groene of de rode led.
Zie je ook na enige tijd niets op het scherm, koppel de schakeling dan los van de pc en kijk nogmaals alle verbindingen heel goed na.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74047552](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695915468-10-printplaat-klaar_16x9.jpg%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
Alle informatie wordt keurig getoond, dus dit werkt.
Aansluiten
Afhankelijk van de fabrikant van het beeldscherm kan het zijn dat je nog wat moet aanpassen om het beeld goed uit te lijnen. Door in het bestand User_Setup.h in de map Documenten\Arduino\libraries\TFT_eSPI vanaf regel 100 de dubbele schuine strepen weg te halen voor een van de regels, kun je kijken welke instelling geschikt is voor jouw schermpje. Let erop dat je dan juist dubbele schuine strepen toevoegt bij het model dat je niet gebruikt. Na elke aanpassing moet je de code opnieuw compileren en uploaden naar de ESP32-module.
Werkt alles naar tevredenheid, dan kun je de module loskoppelen van je pc. Gebruik voor het aansluiten van de module op de usb-lader een usb-kabel die je niet voor het uploaden van de code gebruikt. Laat de A-stekker (de grote platte) intact en knip de andere stekker van de kabel af. Strip de plus- en de min-aders (meestal rood en zwart) en vertin ze. Sluit ze aan op het schroefklemblok, let daarbij goed op de polariteit! Sluit de module aan op de usb-lader en controleer of de leds op de module zelf branden. Haal direct de usb-stekker uit de lader als dat niet het geval is.
Afhankelijk van de bereikbaarheid van de websites en de tijdserver zou je nu binnen enkele tientallen seconden de grafiek moeten zien, waarna je het eindresultaat in een fraaie behuizing kunt inbouwen.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74047922](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695915525-11-offset-2_16x9.jpg%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
Aan de randen is te zien dat de uitlijning nog niet goed is. Gelukkig is dit eenvoudig aan te passen in de code.
Inbouwen
Voor het inbouwen zijn er diverse mogelijkheden. Het eenvoudigst is een kant-en-klare behuizing, die je kunt kopen bij Conrad of elke andere leverancier van elektronicaproducten. Uitdaging daarbij is de zichtbaarheid van het beeldscherm, waarvoor je bij een niet-transparante behuizing een uitsparing zult moeten maken.
Mocht je een 3D-printer hebben, dan kun je gebruikmaken van de printerbestanden die we voor je hebben klaargezet. Het is dan het handigst om eerst de behuizing te printen en daarna de onderdelen op de printplaat te solderen, zodat je alles precies op maat kunt maken.
Ook zonder eigen 3D-printer kun je de print voor twee à drie tientjes laten maken en bezorgen bij een van de vele aanbieders zoals 3DLabs of 3D Print Portaal.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74047930](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1695915992-12-behuizing_16x9.jpg%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
Een fraaie behuizing maakt het natuurlijk helemaal af! Met dank aan Arjen de Nobel voor het 3D-ontwerp.
Over het programma
Zoals gezegd is het niet noodzakelijk om ook maar iets te weten over de werking van de code om deze te gebruiken. Toch is het leuk een leerzaam om je er wel in te verdiepen, al is het maar om de werking af te kunnen stemmen op jouw specifieke wensen. In plaats van een appje te ontvangen als de stroomprijs op z’n laagst is, zou je er ook voor kunnen kiezen om je domoticasysteem aan te sturen, zodat bijvoorbeeld de elektrische auto wordt opgeladen of de wasmachine start. Op regels 336 t/m 345 staat bijvoorbeeld al code klaar die je eenvoudig kunt aanpassen voor het uitvoeren van een of meer acties als de stroomprijs negatief is.
Het programma begint met het laden van een aantal bibliotheken, te herkennen aan de instructie include. Dankzij deze externe programma’s hoef je je niet bezig te houden met netwerkprotocollen en seriële communicatie met het beeldscherm. Het bestand WiFiClientSecure.h verzorgt zowel de communicatie met het draadloze netwerk, als de verbinding met de te raadplegen websites. Het bestand ArduinoJson.h haalt precies de gewenste data uit een verzameling gegevens en time.h synchroniseert de tijd en datum van de module periodiek met die van een NTP-server. Het bestand TFT_eSPI.h tot slot stuurt het beeldschermpje aan.
Dan volgt de declaratie van een indrukwekkend aantal constanten en variabelen. De constanten blijven, zoals de naam al suggereert, onveranderd. De variabelen kunnen tijdens het draaien van het programma andere waarden krijgen.
Functies
In het programma staan diverse functies, waarbij het te ver gaat om ze allemaal te bespreken. We beperken ons daarom tot de interessantste.
De functie getData() is van het type bool, wat betekent dat deze na het uitvoeren ervan de waarde waar of onwaar teruggeeft. Je kunt op die manier zien of de functie van begin tot eind correct is doorlopen, of dat deze voortijdig is afgebroken. Deze functie haalt achtereenvolgens data op van de website van Enever, controleert deze en filtert de gewenste gegevens eruit. Die worden vervolgens opgeslagen voor gebruik door andere programmaonderdelen.
Het bepalen van de goedkoopste en duurste stroom gebeurt binnen de functie minmax(). Ook worden alle bedragen omgezet in centen, de leds aangestuurd en bepaald of er een WhatsApp-bericht uit mag.
Bijna alles wat op het scherm te zien is, komt uit de functie drawGraph. De belangrijkste instructies zijn drawString() en fillRect(), respectievelijk voor het tonen van tekst en rechthoeken. De tekst is er voor de bovenste regel en de schalen op de X- en Y-as en de rechthoeken zijn de basis voor de grafieken.
Binnen loop() worden om middernacht de variabelen klaargezet voor een nieuwe dag met nieuwe gegevens. Een minuut later haalt de functie de nieuwe stroomprijzen op en om een over zeven de gasprijs van die dag, met een herkansing na acht en negen uur. Na vier uur ‘s middags volgen de prijzen van de volgende dag.
Als het ophalen van de gegevens om wat voor reden dan ook niet lukt, volgt elke vijf minuten een nieuwe poging, bepaald door de constante interval aan het begin van het programma. De eerste keer dat de module wordt aangezet, probeert deze functie alle gegevens op te halen. ‘s Ochtends en ‘s avonds wordt ledcWrite() uitgevoerd, die het scherm dimt in de avond en nacht.
![Heb jij een dynamisch energiecontract? Zo maak je de uurprijzen visueel-74224820](/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F56706%2F1696005949-11-voorbeeldcode_16x9.png%3Ffm%3Dwebp%26fit%3Dfill%26w%3D693%26auto%3Dcompress%26fp-x%3D0.5%26fp-y%3D0.5&w=3840&q=100)
De functie getData() haalt de gegevens op die de basis vormen van het programma.
Bouwen en besparen
Door stroomverbruikers niet lukraak in- en uit te schakelen, valt substantieel te besparen. Gebruik de grootste energievreters waar dat mogelijk is vooral tijdens de voordeligste uren. Hopelijk lukt het je om dit al met al best uitdagende project werkend te krijgen en er uiteindelijk daadwerkelijk je voordeel mee te doen. Dat niet alleen leuk en leerzaam, maar vooral goed voor je portemonnee. Daarbij kan natuurlijk ook nooit kwaad om bewust(er) met energieverbruik om te gaan.
Powered by
![logo](/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Flogo-kieskeurig-red.a846e3f8.png&w=256&q=75)