Meet je energieverbruik met Arduino

Meet je energieverbruik met Arduino

Gepubliceerd op: 26-10-2013 17:15 - Read this in English

Tegenwoordig zie je ze overal: energiemeters. Als standalone apparaat, als ‘cadeautje’ van je energieleverancier, of als onderdeel van een home automation oplossing. Maar wat als je geen zin hebt om een smak geld neer te leggen voor ‘alleen maar’ het bijhouden van je energieverbruik? Of je wilt liever niet dat het energiebedrijf zo’n gedetailleerd inzicht krijgt in jouw verbruik? Dan bouw je er toch zelf een?

Rekenen met de kWh-teller

Vrijwel elke woning is uitgerust met een Ferrarismeter, ook wel kilowattuur-meter of kWh-meter genoemd. In deze meter draait een metalen schijf met een zwart streepje erop rondjes. De C-waarde van je kilowattuur-meter geeft aan met welke maten gemeten wordt. Als de C-waarde bijvoorbeeld 375 is betekend dit dat je na 375 rondjes 1 kWh hebt verbruikt.

kWh = n/C

Door het tellen van de omwentelingen van de draaischijf kun je dus je totale energieverbruik bijhouden. Om erachter te komen wat je actuele energieverbruik is zal er ook een tijd gemeten moeten worden, er geldt immers:

kWh/h = kW

De kortst mogelijke tijd die we kunnen bepalen is de tijd tussen twee omwentelingen van de Ferraris-schijf. Door invullen van deze pulstijd in milliseconden verkrijgen we:

W = (1/C) / (tpuls/3.600.000) x 1000

Dit vereenvoudigd naar:

W = 3.600.000 / (C x tpuls) x 1000

Nu we de formules kennen om te berekenen wat er totaal in kWh en wat er actueel in Watt wordt verbruikt is het een fluitje van een cent om dit in de Arduino te zetten.

Aansluiten op je Arduino

Het energiebedrijf vind het, begrijpelijk, niet zo prettig als je de kilowattuur-meter openschroeft om hier wat draadjes aan te verbinden. De enige toegestane methode om de draaischijf uit te lezen is contactloos, door de behuizing heen, en nee, het is niet mogelijk om de meterstand op deze wijze te beïnvloeden!

kWhmeter uitlezen met Arduino

In dit geval gebruik ik een optische sensor, zelf gemaakt van een blauwe LED en een LDR. De blauwe led schijnt door de behuizing op de reflecterende draaischijf van de Ferrarismeter. De LDR vangt het terugkaatsende licht op en geeft dit door aan een analoge ingang van de Arduino. Als de zwarte streep op de draaischijf voorbijkomt zal er minder licht van de LED worden teruggekaatst naar de LDR, wat we in de Arduino zien als een lagere waarde op de analoge ingang. Het enige nadeel van deze goedkope zelfbouwsensor is dat hij gebruik maakt van zichtbaar licht, en dat hij hier dus ook door beïnvloed kan worden. Het openen van de meterkastdeur kan je meting dus verstoren!

Je kunt ook gebruik maken van een kant-en-klare sensor die werkt met infraroodlicht, bijvoorbeeld een TCRT5000, een CNY 70 of recycle er een uit een oude cassettedeck. Deze sensoren hebben over het algemeen drie aansluitingen, net als de zelfbouwsensor, een +5V, een ground, en de sensoruitgang die je aansluit op een analog in.

TCRT5000 aansluiten op je Arduino

Hierboven zie je het aansluitschema voor een TCRT5000. De LED heeft een voorschakelweerstand nodig (Rled), die bereken je net zoals in het artikel over de LED-matrix met de Wet van Ohm. De spanningsval en LED-stroom haal ik uit de datasheet van de TCRT5000.

R = (5 - 1,25) / 0,06 = 62,5 Ohm

Omdat de datasheet absolute maxima beschrijft kun je voor de veiligheid beter een iets grotere weerstand nemen, bijvoorbeeld 100 Ohm.

De sensoruitgang, de collector van de IR-sensor in dit geval, verbinden we met een willekeurige analoge ingang van de Arduino. De Arduino input krijgt nu een waarde van 0 op het moment dat de sensor een reflectie detecteert, maar als er geen reflectie gedetecteerd wordt zal de input random waardes geven. Dit komt omdat we de input dan loskoppelen van de ground: de input gaat 'zweven'.

De oplossing voor dit probleem is de pull-up weerstand. Deze Rpull verbindt de analoge ingang van de Arduino via een grote weerstand (10 kilo Ohm) met +5 Volt. Hierdoor wordt de ontkoppelde input naar +5 Volt getrokken (pull-up). Het resultaat is een stabiele waarde op de Arduino input, afhankelijk van de gemeten reflectie ergens tussen 0 en 255.

Arduino programmeren

Het hart van de software bestaat uit onderstaande code:

if (sensor < drempel) {
  pulse = true;
}
if (sensor > drempel && pulse == true) {
  pulse = false;
  pulseCount++;
  pulseTime = (millis() - prevMillis);
  prevMillis = millis();
  totalkWh = pulseCount / C;
  curWatts = (3600000 / (C * pulseTime)) * 1000;
}

In het eerste if-statement wordt het zwarte streepje gedetecteerd, de waarde van de lichtsensor zakt dan namelijk onder de proefondervindelijk vastgestelde drempelwaarde. Om te voorkomen dat we een enkele puls meerder malen tellen wachten we netjes tot het zwarte streepje voorbij is met behulp van het tweede if-statement. Vervolgens resetten we de puls, verhogen de pulsteller, berekenen de tijd tussen twee pulsen in milliseconden, resetten de prevMillis waarde voor de volgende meting, en berekenen we de totaal verbruikte kWh en het actuele verbruik in Watt.

Deze waardes stuur je vervolgens, met behulp van de Serial() functie, via USB naar je computer. Het wordt echt interessant als je de gemeten waardes in een database opslaat. Hier kun je dan vervolgens grafieken mee tekenen om zo meer inzicht in je energieverbruik te krijgen.

Uitbreidingen

Nu je deze basiskennis hebt kun je eigenlijk van alles gaan meten. Ik lees bijvoorbeeld op dezelfde wijze mijn gas-, en waterverbruik uit. De gasmeter heeft op het allereerste cijferwieltje een reflecterend vlakje, en de watermeter heeft een ronddraaiend zilveren wijzertje, wat goed van pas komt bij het uitlezen met een optische sensor. Uiteraard moeten de formules enigszins aangepast worden om het verbruik weer te geven in dm3 per uur of liter per minuut.

Interface van de zelfgebouwde Arduino energiemeter

Het is natuurlijk nog mooier als je de data realtime op je tablet kunt uitlezen zonder dat je laptop in de meterkast hoeft te staan. Dat kan met behulp van het Ethernetshield. Op Arduino.cc vind je diverse handleidingen over hoe het ethernetshield werkt. Je kunt de data bijvoorbeeld door de Arduino naar een externe webserver laten sturen, en daar een database aanleggen. Maar je kunt ook, zoals ik zelf heb gedaan, op de Arduino zelf een webserver draaien, en de gegevens lokaal opslaan. Hiervoor heb ik gebruik gemaakt van de webserver tutorial op Arduino.cc.

Tijd om zelf aan de slag te gaan! Laat je een reactie achter als jouw energiemeter het doet?

09-05-2015: Hier vind je de volledige Arduino code om in één keer je gas-, water- en kWh-meter uit te lezen en te loggen naar een SQL-database. Hoe je die database inricht en uitleest lees je in het artikel Arduino data online loggen.

59 reacties op dit artikel »

Aanbevolen artikelen