loading

Monitoring residential water usage by reading municipal water meter with Hall effect sensor + Arduino

Picture of Monitoring residential water usage by reading municipal water meter with Hall effect sensor + Arduino
compass.gif
If you'd like to monitor your water usage, as part of a DIY smart home automation and monitoring project, then this instructable might help you to achieve that goal. The solution described here is non-invasive, uses your existing municipal water meter, and the total project cost can be kept under $5-10.

First, let's take a look at what is going on inside a typical residential water meter. The most common water meter type that is installed by local municipalities is a positive displacement water meter. This type of water meter design usually incorporates a wheel, as part of the internal mechanism, with one or more magnets attached to the wheel. When water is flowing through the meter, this wheel spins, driving the register. The register is the part that sits on top of the water meter, analog or digital, that shows you how many gallons of water you have used.

This magnetic drive between the water meter and the register is used in virtually all residential water meters. So to measure water flow, you just need to monitor whether this wheel is spinning, and how fast. Since the wheel has magnets attached to it, the magnetic field from the magnets will almost certainly be detectable from the outside of the water meter enclosure.  To test this, hold a compass next to the water meter. Hold it close to where the meter and the register join, this is where the magnetic field will be strongest. If the compass needle fluctuates when the water is flowing, then there is a very good chance that you will be able to monitor those fluctuations.
 
Remove these adsRemove these ads by Signing Up

Step 1: Un-amplified and un-filtered Hall effect sensor output

Picture of Un-amplified and un-filtered Hall effect sensor output

To monitor magnetic field fluctuations you will need a Hall effect sensor. In my experiments I have used a Honeywell SS494B Hall effect sensor, which is available online for $3-$4. Other sensors should work also, just pick an analog model, not latching, with comparable or better sensitivity. The Honeywell SS494B promises to be sensitive enough to provide around 5mV per 1 gauss.  For a frame of reference,  the earth's natural magnetic field measures around 0.5 gauss, a refrigerator magnet is about 50 gauss, and a neodymium magnet is in the 1000's of gauss.

The Honeywell SS494B is a very sensitive Hall effect sensor, as far as low cost hall effect sensors go, but its measuring range still reaches over 400 gauss. Depending on the construction of your water meter enclosure, if it's made of  metal or plastic, the magnetic field strength outside the meter can be as low as 1 gauss or less. This presents a challenge, since 1 gauss or less is at the extreme low end of the Hall effect sensor's measuring range.

But before tackling the challenge of measuring very small magnetic fields, let's take a look at how the Honeywell SS494B Hall effect sensor works. The sensor has 3 pins: power (Vcc), ground, and output. If you were to look at the output from this Honewell Hall effect sensor, simply powered from a +5v source, you would see that the output sits at around +2.5v, or roughly half of Vcc. This is called the quiescent output voltage, or in other words, this is the voltage the Hall effect sensor will output when no magnetic field is present. But if you hold a magnet in front of the sensor, the magnetic field will pull the output voltage either towards ground(0V) or Vcc(5v), depending on the polarity of the magnetic field.

The tricky part comes next. If you were to measure field strengths of 1 gauss or less, the Honeywell SS494B will deviate no more than ~5mV from the quiescent output voltage. So, to use an Arduino to measure such tiny voltage fluctuations, and with good resolution,  amplification will be required.

To amplify the signal coming from the Hall effect sensor, a general purpose operational amplifier like the LM324 will work just fine. In my experiments I have used a widely available and cheap (less than $0.25) LM324 op-amp, and the schematic in the next step is based on the LM324 op-amp.

Step 2: Amplification + filtering circuit schematic

Picture of Amplification + filtering circuit schematic
oscope.jpg
This is a fairly simple schematic of the amplifier and filter. At the core of the circuit is a 4 channel LM324 op-amp running in an ac-coupled inverting configuration. Capacitor C1 removes the DC quiescent output voltage from the Hall effect sensor, feeding only the tiny sine wave output from the sensor into the op-amp. Resistors R1 and R3 set the amplification, in this case roughly 1000x, so a fluctuation of 2-3mV would become 2-3V on the output (pin 1). With an amplification of 1000x, there is bound to be some noise, so a second channel of the LM324 op-amp will be turned into a Schmitt trigger.

The oscilloscope screen shot shows exactly how the signal looks when water is flowing through the water meter. Channel 1 (yellow) shows the amplified sine wave coming out of op-amp (pin 1). Channel 2 (blue) shows the output from the Schmitt trigger (pin 7).

Depending on how strong the magnetic field is in your water meter, amplification might need to be adjusted (resistor R1), and/or the DC offset (resistor R2). An oscilloscope is the right tool to do this adjustment, but it can be done with a decent multimeter.

Step 3: Logging amplified Hall effect sensor output with an Arduino

Picture of Logging amplified Hall effect sensor output with an Arduino
There are many ways to digitize the output from the op-amp, but the easiest is to simply connect the output from the op-amp to one of the Arduino's digital input pins. The pin will switch state from HIGH to LOW, or from LOW to HIGH, when the op-amp's output voltage passes the ~2.5V mark. Each magnet pass will initiate a state change, so to calculate water flow, you'll just need to figure out* how many passes the magnet makes for each 1 gallon of water flowing through the meter.

At this point, a gallon per minute (GPM) water flow rate can be calculated by simply counting the state changes on the digital pin in any 1 minute time period.

If you are using an Aduino to log the output of the sensor, just use digital pin 2 or 3 (on most Arduino boards), and attach an interrupt to it as such:

------------------------------------------------------------------------------------

int magnetPasses = 0;

void setup(void) {
  attachInterrupt( 0, magnetPass, FALLING ); // attach interrupt to external trigger on digital pin 2
  timer.setInterval( 60000, printWaterTotal ); // call function 'printWaterTotal' every 60 seconds
}

void magnetPass() {
  magnetPasses++; // increase by 1
}

void printWaterTotal() {
  Serial.print( "Magnet passes " );
  Serial.println( magnetPasses );
  magnetPasses = 0; // reset counter
}

------------------------------------------------------------------------------------

*For example, a popular Neptune T-10 residential water meter will show 120 magnet passes for every 1 gallons of water flow. This is roughly 1 magnet pass for every 1oz of water flow, so even very small water leaks can be easily detected using this method.

Step 4: Miscellaneous tips & tricks

Picture of Miscellaneous tips & tricks
electrical-tape.jpg
Tip #1: To make the Hall effect sensor package sturdy, use small diameter heat shrink tubing around each of the 3 wires soldered to the Hall effect sensor, then a larger diameter shrink tube around the 3 wires. Do not put shrink wrap on the sensor itself, as you want the sensor to be as close to the register as possible.

Tip #2: Electrical tape can be used to affix the Hall effect sensor to the register. Make sure the Hall effect sensor "front" is facing the register. Hall effect sensors have a "front" and "back", and the "front" should be facing the source of the magnetic field you are trying to measure.
pedr9 days ago

When did you come up with the idea?

drewzarn1 year ago

Your schematic shows the lm324 with ground to pin 4 and +5 to pin 8. However, the pinout of my lm324 shows pin 4 as vcc and pin 11 as ground (pin 8 is output for internal amp 3). Seeing as I have no idea how an op amp works, why the difference? Thanks!!

esbailey drewzarn12 months ago

Different manufacturers can have different pinouts for their products. Lesson learned: Always compare the schematic to the spec sheet of the IC chip used to make sure pinouts are correctly used! The Texas Instruments LM324AN had the same pins as you described, not as listed above. Spec Sheet for the one I obtained and used here:

http://www.ti.com/lit/ds/symlink/lm124-n.pdf

fstr1 year ago

The instructions and schematics are a bit over my head so I bought a sensor module from eBay. But it appears the sensor is not strong enough to read my water meter. It's range is 7mm to 10mm depending on the magnet strength. I tested it with a strong magnet and appears to slightly exceed the 10mm claim even.

Is it possible to boost the signal from the sensor?

The module in question is here:

http://m.ebay.com/itm?itemId=230955026196

Water meter is a Sensus SR-II/SR-A

titusjon1 year ago

Can you explain the difference between the circuit diagram you uploaded a few days ago and the one that was up here originally? I don't think the text description matches the new diagram, so it's a bit confusing.

Gregory0 (author)  titusjon1 year ago

I've updated the amplification circuit to a much better design. Let me know if the description is clear enough. I'll add some more details in the near future.

You've completely missed concentrating the field with pole pieces. You can get 100X more signal that way.

Can you explain this a little more?

Imagine the shape of the field around the magnet inside the meter, it flows from the north to the south pole of the magnet. Your job is to intercept and concentrate that field, which is probably oriented towards the meter on the front, and not out to the side

Putting a piece of transformer iron on the back of the sensor, and iron concentrates the field from the magnet. A lot of experimenting is needed for the best result though - maybe putting the magnet, and "pole piece" on the FRONT of the meter would help too.

Imagine the shape of the field around the magnet inside the meter, it flows from the north to the south pole of the magnet. Your job is to intercept and concentrate that field, which is probably oriented towards the meter on the front, and not out to the side

Putting a piece of transformer iron on the back of the sensor, and iron concentrates the field from the magnet. A lot of experimenting is needed for the best result though - maybe putting the magnet, and "pole piece" on the FRONT of the meter would help too.

huckw1 year ago
So I adjust R3 while monitoring the voltage between R4 and R5 until its just a little bit below the quiesent voltage of the sensor correct? And I measure the quiesent voltage of the sensor between the sensor and R2?
kevinmp332 years ago
How many voltage did you use to supply the LM124?
Gregory0 (author)  kevinmp332 years ago
Both the op-amp and the hall effect sensor are powered by +5v from an Arduino, which in turn itself is powered by USB.
great idea! has this affected your water usage?
Gregory0 (author)  amandaghassaei2 years ago
Not really, since the marginal cost is around $0.0005 per gallon. Having an alert when there is a small leak, or something that has been left on too long (like a forgotten sprinkler), is the most useful feature.