Electronic – arduino – problem with parallax ping

arduinosensor

I'm trying to use parallax ping ultrasonic sensor to measure distance but I'm having some problems. Here is the code that I'm uploading to my arduiono (duemilanove) that is kinda similar to the one in the example:

// this constant won't change.  It's the pin number
// of the sensor's output:
const int pingPin = 7;

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 PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): 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(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);

  Serial.print(duration);
  Serial.print(" ms ");
  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();

  delay(1000);
}

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 problem is that the serial keeps returning

21491 ms 145in, 370cm

regardless of object infront of the sensor or no object at all. I've tried modifying the delayMicroseconds in the code and it still comes out the same. I've tried different pins as well. So I'm guessing its not a software problem but maybe hardware? I also read the parallax documentation and it doesn't specify if ambient sounds might effect it or not or if there is some sort of initial calibration that needs to be done? I've read the arduino documentation and double and triple checked everything but I can't seem to find what might be causing this. The wires are connected up correctly and everything.

Anyway, does anyone have any suggestions on what I might be doing wrong here? Thanks for any help

Best Answer

Please try to format the program code with code sample button.

Your code seems to be correct, I could use it with my Duemilanove and Parallax Ping. Are the wires of the Ping correctly connected? 5 V to 5 Volt, GND to ground and SNG to Pin 7?