Arduino with CNY70 reflective sensor as KWh meter

This post is part of a series on Arduino-based energy and climate monitoring.


Logging electricity use from the KWh meter was the first Arduino project I started. I made various attempts at measuring the KWh electricity usage from our Ferraris KWh meter. Detecting the small black section on the rotating disk turns out not to be easy due to a lot of other reflective surfaces in the meter.

I started off with an Arduino nano combined with a TCRT5000 Infrared Reflectance 2-Channel that I purchased at DealExtreme. The TCRT5000 module combines The TCRT5000 module had two (related) problems: (1) I could not get the calibration to the appropriate sensitivity to detect the rotations of the KWh meter disk, which was probably due to (2) the focus distance of the sensor was not appropriate for the approximately 10 mm distance to the disk.


After trying an OPB740 sensor, I settled for a CNY70 infrared reflectance sensor. I combined it with a 5V Arduino Pro mini and a RFM12b module.


The electronics are mounted on a 4×6 cm perfboard, which can nicely be boxed in a repurposed 3xAA battery holder. Power is provided by a USB phone charger. Since the CNY70 is constantly illuminating the rotating disk and the Arduino constantly detecting whether fluctuations in the reflectance, it is not possible to run this from a battery.


I recently switched from Nuon to Qurrent and now have a Qbox energy monitor. My attempts of implementing my own energy monitor use have therefore been overtaken by the availability of commercial meters. Nevertheless, I learned a lot and still see the advantages of having my own meter. Right now the Qbox is not yet installed due to the lack of a free Ethernet port in my basement. But as soon as my WRT703N becomes available again, I’ll try to combine the Qbox with my own meter. For this purpose I added a LED, which blinks at every rotation of the disk. I hope that I can have the QBox sensor detect the flashes of this LED, allowing me to use both monitors.

At the time of writing, gas monitoring by detecting the reflective surface in the last digit of the gas meter has not been implemented yet.

You can find the sketch for the Arduino here.