Pages: [1]   Go Down
Author Topic: HC-SR04 error  (Read 704 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

BCC AZ USA
Offline Offline
Edison Member
*
Karma: 38
Posts: 1307
It gets hot so it must be working
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BCC AZ USA
Offline Offline
Edison Member
*
Karma: 38
Posts: 1307
It gets hot so it must be working
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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. 
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Pages: [1]   Go Up
Jump to: