Esa formula afecta la velocidad de sonido en diferentes ambientes.
Tu haces mediciones y durante las mediciones que cambia? La temperatura no cambia, la humedad tampoco.
Veamos.
He resumido un en Excel posibles variaciones.
| Velociad de sonido: 331.4+(0.606Temperatura)+(0.0124Humedad) | ||||
|---|---|---|---|---|
| Temperatura | Humedad | Sonido | Var % | |
| 331,4 | 35 | 30 | 352,98 | 106,51 |
| 331,4 | 30 | 30 | 349,95 | 105,60 |
| 331,4 | 25 | 30 | 346,92 | 104,68 |
| 331,4 | 20 | 30 | 343,89 | 103,77 |
| 331,4 | 15 | 30 | 340,86 | 102,86 |
| 331,4 | 10 | 30 | 337,83 | 101,94 |
| 331,4 | 5 | 30 | 334,80 | 101,03 |
| 331,4 | 0 | 30 | 331,77 | 100,11 |
| 331,4 | -5 | 30 | 328,74 | 99,20 |
| 331,4 | -10 | 30 | 325,71 | 98,28 |
| 331,4 | 25 | 80 | 347,54 | 104,87 |
| 331,4 | 25 | 70 | 347,42 | 104,83 |
| 331,4 | 25 | 60 | 347,29 | 104,80 |
| 331,4 | 25 | 50 | 347,17 | 104,76 |
| 331,4 | 25 | 40 | 347,05 | 104,72 |
| 331,4 | 25 | 30 | 346,92 | 104,68 |
| 331,4 | 25 | 20 | 346,80 | 104,65 |
| 331,4 | 25 | 10 | 346,67 | 104,61 |
| 331,4 | 25 | 0 | 346,55 | 104,57 |
En los casos mas extremos hay un 5% hacia arriba o hacia abajo en las lecturas.
O sea.. tus mediciones podrian ser corregidas a lo largo de los dias cuando las condiciones ambientales cambien y la lectura del sensor este afectada por dichos cambios.
Ahora dime, donde estas midiendo con el sensor ultrasónico como para prestarle atención a esto? Acaso tienes cambios de temperatura en tu casa debido a un aire acondicionado o humidificador?
EDITO 1:
Te completo la información con esta nota.
Encontré una tema similar al tuyo donde se muestra tu problema.
Resumiendo la nota se expresa que las posibles fallas se deben a que las lecturas que ese tema se hacen usan pulseIn y que claramente no es preciso.
Sugieren usar interrupciones con algun pin dedicado a un TIMER como el 1.
Edito 2: Encontré este tutorial de cómo mejorar las lecturas del sensor
Basadas precisamente en pulsein
digitalWrite(trigPin, LOW);//setting trigger pin in LOW state
delayMicroseconds(5); //for 5 microseconds
digitalWrite(trigPin, HIGH); //setting trigger pin in HIGH state
delayMicroseconds(10); //for 10 microsecond and emits 8pulses from the transmitter and bounces back onces hit by an object
digitalWrite(trigPin, LOW); //after recieving the signal,setting the trigger pin to LOW state
duration = pulseIn(echoPin, HIGH); //duration is a variable that starts timing once echo pin is high by using arduino function pulseIn()
float temperature = dht.readTemperature();// temperature is the variable use to store the value of current temperature which sensors detects
speedofsound = 331.3+(0.606*temperature);// Calculate speed of sound by using the given formula in m/s:
distance = duration*(speedofsound/10000)/2; // Calculate the distance
Supongamos que la medida sea sobre supuestos 40 cm exactos.
Aca con el excel calculé los errores que tienes
