I finally had a chance to implement a sender voltage logger in Arduino, to provide the raw data for a smoothing algorithm. I've set it to record at 1Hz initially, just to see how quickly the sender moves. I took the van for a drive round the block - all 30mph and 20mph (yes, really
) roads, no hard braking or fast cornering. It turns out that the sender moves quite quickly.
There's evidently quite a lot of sloshing going on. I've used the little screen that I was using as a digital clock to display the voltage in real-time, so I can see the effect of accelerating and braking, turning left and right, etc. Higher voltage means higher resistance, which means lower fuel level, so the peaks in the graph correspond to accelerating or turning left, and the troughs correspond to braking or turning right. Just from this little plot you can tell that my journey round the block was anti-clockwise, so mostly turning left. And you can see where I stopped at the lights for ~25 seconds (4:35-5:00).
There are a few points at just over 8V (8.05V in fact). The fact that that seems to be a maximum value suggests that perhaps the float on the sender was temporarily out of the fuel, due to sloshing. So if my display gets close to 8V then I know it's time to fill up, regardless of what the dash gauge shows.
I'll keep it at 1Hz for the rest of this tank I think - the SD card is plenty big enough - and then I'll see about a suitable 'low pass' smoothing algorithm.