Skip navigation

Distance Sensor PING)))

In this episode of How-To Tuesday from Make Magazine they take a look at the PING))) sensor which can measure distance using sonar. This setup may not work for all distance sensors since the PING))) is unique in that it connects to a digital pin. If your sensor connects to an analog pin you will need a different setup/sketch.

Materials you’ll need:

  • Arduino Duemilanove
  • PING))) Distance Sensor

    Arduino Sketch
    You can find this sketch under File > Examples > Sensors > Ping

    /* Ping))) Sensor
       This sketch reads a PING))) ultrasonic rangefinder and returns the
       distance to the closest object in range. To do this, it sends a pulse
       to the sensor to initiate a reading, then listens for a pulse 
       to return.  The length of the returning pulse is proportional to 
       the distance of the object from the sensor.
       The circuit:
    	* +V connection of the PING))) attached to +5V
    	* GND connection of the PING))) attached to ground
    	* SIG connection of the PING))) attached to digital pin 7
       created 3 Nov 2008
       by David A. Mellis
       modified 30 Jun 2009
       by Tom Igoe
    // this constant won't change.  It's the pin number
    // of the sensor's output:
    const int pingPin = 7;
    void setup() {
      // initialize serial communication:
    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);
      digitalWrite(pingPin, HIGH);
      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("in, ");
    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:
      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;


    PING))) Schematic


    PING))) Illustration




    Leave a Reply

    Fill in your details below or click an icon to log in: Logo

    You are commenting using your account. Log Out /  Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out /  Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out /  Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out /  Change )


    Connecting to %s

    %d bloggers like this: