The Purpose (Mission)
- Monitor, archive and analyze energy consumption in the house
- Visualize historical consumption data
- Access data remotely from Web
- Eventually include data from other sensors, like temperature, pressure, humidity, motion, light, security, etc.
- UPDATE: Temperature/Pressure sensors added: Additional Sensors for Home Energy Monitor
- Concept based on OpenEnergyMonitor project
- Hardware based on Arduino and Raspberry Pi platforms
- UPDATE: Raspberry Pi has now been replaced with Ubuntu NAS and Backup Server
- Software: Arduino IDE, EmonLib and RFM12B library by LowPowerLab
3. Progress Report
3.1. Measurement Box
To begin with, I looked at the electrical fuse box in my apartment and noticed that I have 10 or so circuit breakers leading to separate electrical house circuits. I thought that it would be nice to monitor these 10 output lines individually and independently. This way I could have detailed power data as well as compute total house consumption.
When I removed the plastic cover, I noticed that there is quite a lot of space under it, so I hoped I could nicely fit all required hardware inside and hide it from view.
As far as I could see, the original EmonTx approach from OpenEnergyMonitor was to measure current at the input to the breakers. This could be the result of limited measurement speed and/or limited processing power or the Arduino Uno -based hardware. EmonTx has only three current probe inputs with 10-bit resolution. So, instead I decided that I’d need faster processor, more analog inputs and 12-bit ADC resolution. In other words, this Arduino Due board:
The next logical step was to test wireless communication between this sensor controller and whatever the base might be. For this I purchased a couple of RFM12B modules and a JeeLink from JeeLabs shop:
(NOTE: JeeLink was later replaced with JeeNodeUSB
3.1.2. RFM12B library for Arduino Due
As a starting point, I used a great port of RFM12B library to C++ by Felix of LowPowerLab.com
Turned out, this library was not compatible with my ARM-based Due board. So I spent the next few weeks on modifying this code and eventually made it to work on my Due. The files are below. Just unzip this into library folder of the Arduino IDE and don’t forget to select Due before compiling 😉
Not all functionality has been implemented yet, like sleep mode, but overall it does work.
3.1.3. Current / Voltage Sensors
Once I had RF communication working properly between Due and JeeLink, I started working on setting up sensors.
As you can see, I used 22 Ohm burden resistors, which gave me more than enough head room to measure currents up to full range of SCT013 (100A). In addition, to measure line voltage using AC-AC adapter, I adjusted resistive divider to 100K – 6.6K, which slightly reduced resultant voltage range at the Arduino to below 3.3V p-p.
I soldered all components onto this Proto Shield for Arduino MEGA, which also fits perfectly to Due.
At the same time, in order to utilize full 12-bit ADC resolution of Arduino Due, I reworked original EmonLib library of OpenEnergyProject. Here’s my modified source code:
For more detail: Home Energy Monitoring System