4
\$\begingroup\$

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

\$\endgroup\$
1
\$\begingroup\$

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?

\$\endgroup\$
  • \$\begingroup\$ Thats strange. Are there different versions of the parallax ping hardware? should the room be quiet? does ambient noise count? \$\endgroup\$ – Stan Dec 19 '10 at 15:23
  • 1
    \$\begingroup\$ ambient noise should not affect it and I don't think that there are different versions. Have you tried another pin on the arduino? \$\endgroup\$ – jsolarski Dec 20 '10 at 0:10
  • \$\begingroup\$ I've tried almost all the digital pins on the arduino...is there an alternative for analog? or is the ping digital pin only? Thanks again \$\endgroup\$ – Stan Dec 20 '10 at 1:15
  • \$\begingroup\$ the Ping is digital. Is the activity light turning on when sending a signal? I can double check your code tomorrow and hook it up to my ping and arduino. \$\endgroup\$ – jsolarski Dec 20 '10 at 3:57
  • \$\begingroup\$ The parallax light? Yeah, I think the green light turns on everytime a reading or pulse is done. I doubt its the code because the reading is the same even if there are objects or no objects infront of it \$\endgroup\$ – Stan Dec 20 '10 at 6:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy