Water meter read

Hello guys,

I'm new into the Arduino world and this is my first post here so excuse any rookie mistakes.
I'm building a system to monitor the utilities for my house (electric, gas, water).
The gas counter has a magnetic pulse, so it was pretty straight forward with hall effect sensor (just counting the pulses and sending them to the server)
For the electric power, I've based the system on http://openenergymonitor.org/ libraries (just minor tweaks to work with the components I had)
Here is the main dashboard for the system: http://shiftdel.ro/zabbix/screens.php?ddreset=1&sid=e96e7280051a9cd4

The problem that I have is with the water monitoring. I have and old counter that does not have any kind of electronic output, it is all mechanical so hall effect sensors are out of the question and it has no mirror on one of the numbers. Here is a picture of it:

The only way that I could think of is to read the "water leak indicator" (the black 6 tooth cog). To do this I've used a CNY70 (only the detector) and a laser pointer diode to be able to focus the light so the beam of light is not wider than one of the cogs tooth. When the the laser hits the background a little bit more light comes back than when it hits the cog. I only get a variation of ~30 units (from arduino's 1024 analog read) and the signal is not very clean so this makes it error prone and system is very sensitive to external light.

Ok now for the question: Does anyone (especially guys with more experience with optical systems) have an idea on how to improve this?
Please don't recommend to replace/add a counter, this is not an option due to utility company policy and space constraints in the manhole.

Thanks

Misu

0.1 uF capacitor from analog in to GND to cut down in noise.

Over sampling followed by decimation (ie right shifting the summed results of a couple hundred reads by 7 bits, for example)

Using a comparator to create a cleaner on/off transition

Constantin:
0.1 uF capacitor from analog in to GND to cut down in noise.

Over sampling followed by decimation (ie right shifting the summed results of a couple hundred reads by 7 bits, for example)

Using a comparator to create a cleaner on/off transition

First of all thanks for answering.

I will try to ad a capacitor.

For a cleaner on/off transition I use this:
if (IRsensorVal < lower){
prevPulseState = pulseState;
pulseState = false;
}
if (IRsensorVal > upper){
prevPulseState = pulseState;
pulseState = true;
}

with the lower and upper set to a few units up/down from the maximum reads.

Regarding "Over sampling followed by decimation(ie right shifting the summed results of a couple hundred reads by 7 bits, for example)"
I thought of using an average but never bit-wise operations (right shift). I will give it a try.

I have some kinkd of meter like this (much newer, but still it has only rotary star and numbers - no pulses or LED).
Have you figured out any better way?
Could you post photo of system working?

PS: (And also - if you please could share the code for the electricity meter [which counts pulses and send them - i'm planning to use RF24].

What you could do is use an LDR with a small lens or a light2frequency sensor (TSL235 ?) and detect the variation in light when the red finger (Of the 0.1 meter) passes by.
Also the 6 fingered thingie seems to be 'detectable' when rotating.
Use a small led for lighting...

Might help,

andriej:
I have some kinkd of meter like this (much newer, but still it has only rotary star and numbers - no pulses or LED).
Have you figured out any better way?
Could you post photo of system working?

PS: (And also - if you please could share the code for the electricity meter [which counts pulses and send them - i'm planning to use RF24].

I haven't figured out a better way, but I managed to make the thing work with some frequency filtering (a kind of "hight pass filter").
It works but the setup is not very stable, as I said in my first post (sensitive to external light, and mechanical vibrations)
Here is a picture:

For the electricity I'm not counting pulses, I measure the voltage and current and use the openenergymontor libraries to do the power calculations. I send the data through Ethernet to a web server, so I don't think the code would help you (it is a mess any way :slight_smile: ).

Misu