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
    
    http://www.arduino.cc/en/Tutorial/Ping
    
       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:
      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(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;
    }
    

     

    PING))) Schematic

     

    PING))) Illustration

     

    Photos

    About these ads

    Leave a Reply

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

    WordPress.com Logo

    You are commenting using your WordPress.com 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 )

    Google+ photo

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

    Connecting to %s

    Follow

    Get every new post delivered to your Inbox.

    %d bloggers like this: