Go Down

Topic: HC-SR04 error (Read 843 times) previous topic - next topic

Hello all, i bought a hc-sr04 sensor a few days ago and i´m trying to make a sketch. i have tried sereval that i found in the internet with the same result, my sensor always returns a value equal to 2 or 3, never mind the proximity. This is my code:

const int trigPin = 2;
const int echoPin = 4;

void setup() {
// initialize serial communication:
Serial.begin(9600);
}

void loop()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, inches, cm;

// The sensor is triggered by a HIGH pulse of 10 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Read the signal from the sensor: a HIGH pulse whose
// duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);

// convert the time into a distance
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print(duration);
Serial.print(" ");
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}

long microsecondsToInches(long microseconds)
{
// According to Parallax's datasheet for the PING))), there are
// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
// second). This gives the distance travelled by the ping, outbound
// and return, so we divide by 2 to get the distance of the obstacle.
// See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}

The connections are ok, phisically it seems to be ok,  i need you help, thanks.

groundfungus

In your code, move the pinMode() functions to setup().  That is the only thing in your code that looks incorrect.  I use pretty much the same code for my HC-SR04's.  Is the supply to the rangefinder 5V?  .Is the ground connected to Arduino ground?

moved and no results, i have tried with usb and with batteries supply and nothing, and yes, the ground is connected

groundfungus

I connected an HC-SR04 to my Uno with trigger to pin 2 and echo to pin 4 like your setup.  I moved the pinModes to setup and ran the sketch.  It worked fine, returning the range, so I don't know what else to tell you.  I did set the delay to 1000 (versus 100 in your original code) to slow down serial output. 

Hi,

Try make some delay (maybe 100 microseconds = 1 millisecond) between trigger finish and reading the duration.
I think you must give the signal enough time to travel and return back, then measure the duration and calculate distances.

try something like this.

digitalWrite(trigPin,LOW);
delay(1);
d=duration(echoPin,HIGH);



good luck


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy