This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tank level monitoring
I am working with induction water sensors to monitor the water (not clear if these sensors works for hydrocarbons, most probably not) level in tanks.
For background see my project page about Tank levels. The sensors produce a simple on/off signal, e.g. they fire when they sense water behind the pipe or tank wall, glass of metal works ok. A set of sensors are needed, using 4 one could have 0.0, 0.25, 0.5, 0.75 and 1.0. The exact numbers would depend on where the sensors are places. With clever measurement and math one might even manage to get correct numbers for a irregular shaped tank. Either by placing the sensors at the precalculated heights of via some math in the function. The latter is a bit hard as it might be that 3 of 4  sensors would fire at only 1/2 full tank. It should be best to place the sensors smart. 

As there are a limited set of on/off IO pins on the Pi itself I propose to use some external IO boards over the I2C bus which can bring the possible on/off IO pins up to 128. How this is done is documented on my project page. It's actually quite simple. 

Using a set of these sensors I plan to write a function that return a float number from 0.0 to 1.0 which correspond to a meter type widget in the Signal K web page. Hence the tank level would be mapped and displayed quite nicely. The only part I'm not really certain about is how to generate new Signal K names and exactly how I should integrate this function into the OpenPlotter structure, some help and cooperation with this would be nice.
Interesting project. I just finished a simple three-level indicator for my water tank. It is simply a plastic rod with a ground terminal on the bottom, then three more contacts wrapped around the rod to indicate low, medium and high level in the tank. I use an arduino to show four lights, the bottom indicating no contact and critically low (flashing), and three more LEDs to indicate the level. I've seen commercial versions of this sort of thing available that use a probe with 2 to 5 rods of varying lengths that go down into the tank. I might have done it that way if I had been able to find some non-corrosive rods, but the plastic rods with bare copper wire wrapped at intervals seems to work fine. I installed it a few days ago and it works great. I guess at some point I could use firmata (and MQTT?) to bring that data into Openplotter. That sounds like what you are thinking about.

When I was researching the project, I came across a commercial product for RV water and waste water tanks that used capacitance between two parallel strips of adhesive aluminum foil attached to the outside of plastic or fiberglass tanks, which sounds like something similar to what you are doing. Rather than using several patches, it used two strips, and (I think) measured the change in capacitance as the liquid level changed. I suppose if I had seen that prior to starting on my project, I might have tried that, but I don't need to know water levels down to a percentage!, I only need to know when I need to start looking for a water fill station!

As for generating Signal K names, have a look at the Signal K generator. I think you'll find keys there for what you need.
the capacitance idea is cool and it's a none intrusive method. It does not work with aluminium or steel, but most tanks for water are polypropylen or fiberglass. 

Do you have a link to a chipset or module that transform capacitance like this to a voltage or a digital number ? Making this would take a few components with a fair amount of calibration.  Buying a module would be nice. A continuous measurement is always the best, a 10 bit ADC would be adequate. 

For grey and black-water tanks (commonly of metal) I would go a long way to have something none intrusive that could measure on the outside. I have seen floats inside perforates tubes but they too tend to clog up.  

Not to mention fuel, which I am not sure if the inductive sensors would work with, I'll do a test soon. I need to figure out something smart, I have seen a it done using a radioactive source and a detector. Quite safe as the source are weak, but a lot of electronics which is either expensive or tedious to build, test and calibrate.  Maybe a float is good enough for fuel. 

Just ran into this post.


We have improved the I2C sensors management and now is much easier to add a new sensor. We can add support for PCF8572 or PCF8574A easily. If you send me the python code, actually you have already the code on your page, I can include it on I2C management tab.

Using the new I2C sensors management you would be able to select a signal k key for each pin.
I am on my way to holiday with the family tomorrow so not much time to write Python code now. I think the out from the sensors could be aggregated into a float number that could be a signal K label ranging from 0 to 1.0 which makes it easy to display as a tank measurement. One might even multiply with the number of liters to gt the signal K label in liters directly.

I'm happy for the effort to include the PCF8572 or PCF8574A, I have a small piece of Python code that just demonstrate the usage : bit some more lines are needed to present more than just high and low pins. I'l write that when I get back in beginning of August, and I have also some more sensors to check it out and get a real prototype that respond to real water level.

(2017-06-26, 01:04 PM)olewsaa Wrote: Do you have a link to a chipset or module that transform capacitance like this to a voltage or a digital number ? Making this would take a few components with a fair amount of calibration.  Buying a module would be nice. A continuous measurement is always the best, a 10 bit ADC would be adequate. 

Here's a link to a project at Arduino Create that might lead you in the right direction. It uses a TI FDC1004 breakout as the sensing circuit.
Ok Ole, no problem. We have to focus now on getting the beta stage asap.
By the way, I just noticed this product. It's a pre-made capacitance level measuring sensor designed for non-metallic tanks. At only $35, it sounds like a great deal. According to the diagnostic help for the product, it produces between 0-5V depending on liquid level.
DataOnline brings to you not only thorough and comprehensive experience in sensor selection and installation but also their finest hardware to tank level monitoring applications with more than 125,000 worldwide tank installations. Tank level monitoring can lower costs by delivering essential information required for optimizing and improving Supply Chain logistics, providing best solutions for remote tank monitoring and management for different systems.

DataOnline’s remote solution – Tank Level Monitoring deliver instant notifications of low inventory or high usage due to special sensors which can constantly monitor oil, gas or liquid levels in remote tanks. Along with these important tank levels alerts, inventory levels are continuously recorded to the cloud and consequentially uploaded into DOLV3, providing trends and historical data to use in forecasting, delivery scheduling and inventory management and service. Tank level monitoring has never been so simple and effective.
i used an ultrasonic sensor for level monitoring in an aquarium project before..i don't know how well it would work in a boat sloshing around all the time though..

found this looking on nasa site

Forum Jump:

Users browsing this thread: 1 Guest(s)