Energieverbruik monitoren met Modbus, MKR WiFi 1010 & RS485
Onderdelen en benodigdheden
- Arduino MKR WiFi 1010 – 1 stuk
- Arduino MKR 485 Shield – 1 stuk
- USB-A naar Micro-USB kabel – 1 stuk
- USB Voeding – 1 stuk (elke compatibele voeding. MKR485 shield heeft 7-24V buck converter ingebouwd)
- Gedraaide enkelparig afgeschermde kabel – 1 stuk
Benodigde tools en machines
- Digilent Mastech MS8217 Autorange Digitale Multimeter
- Elektroloks schaar
- Kleine platte schroevendraaier (voor MKR485 klemmen)
- Middelgrote kruiskopschroevendraaier
Apps en online diensten
- Home Assistant
- Arduino Web Editor
- MQTT
Over dit project
Als je je slim wilt maken, begin je waarschijnlijk bij je maandelijkse rekeningen (energie, gas, etc.). Zoals sommigen zeggen: Goed voor de Planeet, de Portemonnee en de Balans. Open-source hardware is onze weg naar duurzaamheid in de thuishuis! Dit idee bracht ons tot een eenvoudige, veilige oplossing, gemakkelijk te integreren met elke home automation software omdat het data via MQTT beschikbaar maakt (hier tonen we integratie met Home Assistant).
Overzicht
Om elektrisch energieverbruik te meten, kozen we de Finder Energiemeter, ontworpen voor DIN-rail montage en perfect passend in de hoofdkast. Het coole aan dit product: het heeft een RS485 Modbus interface, een industriële standaardcommunicatieprotocol wat communicatie met Arduino heel makkelijk maakt. Arduino heeft een officiële shield uitgebracht, de MKR485, en twee bibliotheken voor het decoderen van het protocol. Als hoofdboard gekozen: Arduino MKR WiFi 1010, deel van de MKR-formfactor en met WiFi-connectiviteit.
Installatie
Waarschuwing! Controleer je landelijke voorschriften over werken aan je huiselektriciteit en wees extreem voorzichtig – het kan dodelijk zijn! Als je niet weet hoe, bel een elektricien.
Eerst de meter in je elektrokast plaatsen. Voor veiligheid: zet de stroom uit vóór je systeem en controleer met de multimeter dat er geen spanning is tussen de klemmen.
Plaats de energiemeter in de kast en verbind fase en nul van de hoofddeler met de meter-invoer (kleurenconventie: blauw = nul, bruin/zwart/grijs = fase in EU). Uitgang naar rest van systeem.

RS485-aansluiting: gedraaide enkelparige kabel met ground (telefoonkabel). Kan tot 1.2 km, maar we gebruiken voldoende lengte om uit de kast te komen en Arduino bereikbaar te plaatsen.

RS485-klemmen: A, B, COM. MKR-shield ondersteunt ook Full Duplex (Y, Z). We klemmen op Y en Z want half-duplex communicatie gebeurt daar (volgens datasheet). COM verbinden met ISOGND. Schakelaars op MKR485 shield instellen: HALF (2 naar OFF) en terminatie op Y-Z (3 naar ON); de eerste schakelaar maakt niet uit. Terminatie = weerstand tussen data-klemmen voor demping van storingen.

Kast dicht, nu de software!
Software
IDE openen (Arduino IDE of Arduino Create). Code moet aan drie dingen voldoen:
- Modbus-communicatie
- WiFi-beheer
- MQTT-protocol
Modbus is een open protocol voor industriële sensoren/machines. We gebruiken de Arduino Modbus library die alle handlers inpakt en het koppelen van elk Modbus-apparaat snel maakt. Volgens de meter-datasheet vinden we functiecodes, registeradressen en registergrootte in woorden.
Hoe Modbus werkt:
Modbus-berichten volgen een simpele structuur:
01 03 04 00 16 00 02 25 C7
0x01= Apparaatadres0x03= Functiecode (lezen/schrijven; hier: holding registers lezen)0x04= Byte Count (4 bytes registeradres:00 16)00 02= Registergrootte in woorden (elk woord = 2 bytes)- Laatste 4 bytes = CRC-code (wiskundige controle voor correcte ontvangst)
In Arduino wordt dit afgehandeld in de if-voorwaarde:
// Gemaakt door Alberto Perro - Officine Innesto
// Lees integer van een modbus-apparaat holding registers
float readCurrent() {
float ampere = 0.;
// Formateer verzoek en stuur via RS485
if (!ModbusRTUClient.requestFrom(0x01, HOLDING_REGISTERS, 0x0016, 2)) {
Serial.print("failed to read voltage! ");
Serial.println(ModbusRTUClient.lastError());
} else {
uint16_t word1 = ModbusRTUClient.read(); // MSW uit buffer
uint16_t word2 = ModbusRTUClient.read(); // LSW uit buffer
int32_t milliamp = word1 << 16 | word2; // Samenvoegen tot 32-bit integer
ampere = milliamp / 1000.0; // Omrekenen naar ampere
}
return ampere;
}
In de else-sectie zit de response-handler. Omdat het register twee woorden lang is, voegen we ze samen met bitmanipulatie. We lezen de woorden uit de buffer, slaan op in unsigned 16-bit integers, voegen samen tot signed 32-bit door eerste woord left-shift en OR over tweede woord. Resultaat in mA, delen door 1000 = ampere.
Ditzelfde proces passen we toe op alle gewenste metingen. De rest van de code handelt MQTT en WiFi-netwerken af.
Home Assistant Integratie
Meter toevoegen aan Home Assistant is eenvoudig. Stel je MQTT-broker in (hier is de gids), voeg definities toe aan configuration.yaml:
sensor:
- platform: mqtt
name: "Hoofdspanning"
state_topic: "energy/main/voltage"
unit_of_measurement: "V"
Naam, MQTT-topic en eenheid invullen. Opslaan, configuratie controleren, Home Assistant herladen – metingen verschijnen op hoofdpagina.

Home Assistant zorgt voor grafieken en automatisering getriggerd door je metingen. Tutorial klaar – nu jij features toevoegen en aanpassen!
Code
Modbus RTU naar MQTT bridge voor Finder
Deze sketch biedt een complete brug tussen de Finder energiemeter en MQTT. Ontworpen om elektriciteitskosten en -verbruik te monitoren in Casa Jasmina.
De volledige code is beschikbaar in de originele repository.
Productieproces
- Bouw een Internet-gecontroleerde Video-streamende Robot met Arduino & Raspberry Pi
- Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
- Bouw een Betrouwbare Arduino Energiemonitor & Datalogger – Stapsgewijze Handleiding
- Bouw Boeiende LCD Animaties & Games met Arduino UNO
- Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
- Real-time IoT hartslagmonitor met Arduino en MAX30100
- Arduino Temperatuurbewaking & Realtime Klok met 3.2" TFT-display
- Arduino Uno WiFi Webserver: LED aan/uit schakelen via browser
- Arduino UNO & WiFi Shield: Realtime Temperatuurweergave op het Web via Serieel
- Python 3 naar Arduino UNO: Eenvoudige Commando Besturing en LED Demo
- Kinetische en Potentiële Energie Begrijpen: Vormen, Formules en Alledaagse Voorbeelden