Trouble with result from HCSR04

Hi, I'm trying my new sensor right now and found out that HC-SR04 is miss calculation when the object is not face to face to sensor or not flat.

this is example code from library called NewPing

// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------

#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
  sonar();
}

void loop() {
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
  Serial.println("cm");
}

this code is working fine when the object is flat and the sensor face to face to it.
like this

#>                  |

// on the left is sensor on the right is object, this working fine.

but when the object like this

#>                  /
// on the left is sensor on the right is object that have angle not facing the sensor, this is mess.

What I understand is that HCSR04 measure distance by bouncing sound and calculate the duration.
and I assume when the object not facing the right angle, the sound is bouncing multiple time / miss direction so the calculation is not the same again.

my question is there any way to make the calculation right.? or trick to make it work even without object facing right angle.?
thank you.

Nope. You've discovered the problem with sonic ranging. It only really works with hard, flat materials directly facing. Soft, sound absorbing materials don't work and a hard item at an angle reflects the sound.
You can average and exlude big jumps but nothing in software can change the physics.

1 Like

thank you for the reply,
i'll try to Mod RC Car with this sensor, so I can just sit and watch, but it hit the wall most of the time lol.

btw do you now some other/alterative sensor to work with distance measurement or similar.?

Real world robots integrate data from multiple sensors, to assemble a view of the world. Google, "arduino distance sensor".

1 Like

I found nice article, need to read it first. thanks for the keyword

A time-of-flight (ToF) optical sensor will work on angled surfaces as long as they are not reflective.

1 Like

yes, this is nice one, thank you,

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.