user39327: 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.

user31105: 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.

39327: <p>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:</p>

<pre><code>unsigned long sonarMeasure() {
    digitalWrite(TRIGGER, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIGGER, LOW);
    return pulseIn(ECHO, HIGH);
}

double distance = duration * 0.03455;
</code></pre>

<p>The results are a bit strange. I know, that I can't expect millimeter accuracy. But why are there rather <strong>discrete jumps of about 4 mm</strong>? And when looking closer, there is <strong>another frequent jump of &lt;1mm</strong>:</p>

<p><a href="https://i.stack.imgur.com/909K0.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/909K0.png" alt="measured distances"></a></p>

<p>(As far as I can tell, the jumps increase at larger distances.)</p>

<p><strong>Is this an issue of how I read the sensor on the ESP32, or is it something happening internally on the HC-SR04?</strong></p>

<p>I'd love to understand the reason for this effect to be able to improve the accuracy of my measurements.</p>
 31105: <p>I think it's from the HC-SR04... it uses echos and it seems your bad readings are some kind of echo reflections.</p>

<p>What you should do is either remove the bad readings, or take the average/most common value of the last x readings.</p>

<p>Or throw away values too far off some default (like the last average) and average the rest.</p>
