I'm experimenting with an HC-SR04 sonar sensor. Basically I'm measuring the distance to a cardboard box twice a second with these lines of code running on an ESP32:
unsigned long sonarMeasure() {
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER, LOW);
return pulseIn(ECHO, HIGH);
}
double distance = duration * 0.03455;
The results are a bit strange. I know, that I can't expect millimeter accuracy. But why are there rather discrete jumps of about 4 mm? And when looking closer, there is another frequent jump of <1mm:
(As far as I can tell, the jumps increase at larger distances.)
Is this an issue of how I read the sensor on the ESP32, or is it something happening internally on the HC-SR04?
I'd love to understand the reason for this effect to be able to improve the accuracy of my measurements.
1 Answer 1
I think it's from the HC-SR04... it uses echos and it seems your bad readings are some kind of echo reflections.
What you should do is either remove the bad readings, or take the average/most common value of the last x readings.
Or throw away values too far off some default (like the last average) and average the rest.
-
Sure, I could implement some kind of filter. But actually I want to use it on a moving platform, so I can't repeat any measurement.Falko– Falko2018年02月16日 20:11:23 +00:00Commented Feb 16, 2018 at 20:11
-
2No, the spacing is much to small to be multiple reflections. For that to occur, you'd be seeing multiples of the base reading, rather than a distribution around a basic value.Chris Stratton– Chris Stratton2018年02月16日 21:53:35 +00:00Commented Feb 16, 2018 at 21:53
double distance = duration * 0.03455
(I'll add it to my question.)