Home        Store        Learn        Blog

Low stability and accuracy distance from Ping1D in enclosed Al tank


We are using the Ping1D to monitor ice growth in a 36"x12" marine aluminum tank, but are having trouble with the stability and accuracy of the depth measurements. The tank’s lid is connected to a chiller so that it acts as a heat extractor, and generates ice growth at the top of the tank. We are trying to use the Ping, which sits at the bottom of the tank and is mounted facing upward, to monitor the thickness of the ice as it grows. Therefore, we should see the depth measurements decreasing over time as this happens. However, it has been challenging to obtain distance measurements that are trustworthy. What was first problematic, was that we had seen the confidence at 100% consistently, but the distance measurements were jumping around in a range of 20+mm, which doesn’t reflect the reality of the ice growth. I started out using the Ping Viewer software, but we have since been collecting data from the Ping in Python. We are indexing the profile data to a dataframe, and plotting as a function of time (see plot below). Using the python doxygen documentation as a reference, I have adjusted the speed of sound to reflect what is expected in the tank given the salinity and temperature data, turned off auto mode, set the range from 0 to 1000mm, and set the gain setting to 4. I am looking for general advice as to how to improve the stability and accuracy of measurements over time, and also wondering specifically if it might be useful to adjust the ping interval to something larger than the preset value (say five seconds or so)? Should we be changing the range over time as the ice growth increases? The smallest range it would allow me to change it to was 0 to 1000mm.

Also, when it was on auto mode it was jumping around even more than it is now. Should we be considering the transmission signal time and the interval? I’m curious to know whether the metal tank enclosure is feeding back signals as “noise” or causing issues because the ping interval was too small for range and transmission signal time. I am not an acoustics person, so any advice or direction you can provide will be quite useful. I have tried to thoroughly familiarize myself with all documentation and product info I have found online.


Hi @lkg,

Thanks I would like to say that your application looks great but will push Ping1D boundaries a bit, since the sensor was not produced for such use case and precision.
Some tips that may help you:

  • Fixed distance scan and gain, will help with the distance detection algorithm
  • Disable automatic scan, use single “emit” signals to fetch the profile and turn off the sensor after that.
    • This is necessary since the sensor will continue scanning while not emitting “pings”, this is used to track the distance while no profiles are requested. So the idea is: Turn on the sensor, ask for a profile, turn off the sensor, wait for a couple of seconds for the eco to be dissipated and repeat.
  • Add a sponge or any material that could absorb or dissipate the reflected ping signal behind the sensor.

Hi Patrick,

Could you clarify what you mean by turning on and off the sensor? Would turning it on be by initializing with initialize()? The documentation states that the get_profile() is “A profile produced from a single acoustic measurement”, so I believe I have already implemented the single “emit” signal, but am not clear on how to turn off the sensor before retrieving another profile.

Hi @lkg,

As I said, the sensor will periodically and automatically do the profile sample without any request from the user, what the get_profile do is to request the sensor the latest profile that was sampled by the sensor, and not necessary a control itself.

What I mean by turning on and turning off the sensor, what I mean is the transducer, you’ll need to send the message set_ping_enable and get_ping_enable.