Shop OBEX P1 Docs P2 Docs Learn Events
Ping)))) + Servo — Parallax Forums

Ping)))) + Servo

EllieEllie Posts: 2
edited 2009-04-15 00:30 in Accessories
Hi, i am using a Ping))) to connect to and trigger a Futaba Servo. I am using an Arduino microprocessor. So far, I have found the example code for a ping sensor in the arduino examples, and i have a code for the servo which does the movements i need. I really need help with how to combine the two together into one code which I can send to the arduino. Would anyone have any code already done for such a purpose? I need the ping))) to basically turn the servo on when a person stands in front of the setup, go through the servo functions and when the person leaves the range of the sensor, to stop the servo. I'd be really grateful for any comments or ideas of how this might be achievable. Thanks, E.




//code for ping))) taken from arduino sketchbook

int pingPin = 7;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // We 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;
}




Post Edited (Ellie) : 4/14/2009 8:24:22 PM GMT

Comments

  • FranklinFranklin Posts: 4,747
    edited 2009-04-14 19:19
    My first question is what does it do when you run this code and what is it you expect it to do? Also your [noparse][[/noparse]code and [noparse][[/noparse]/code tags are reversed. You can edit your post by clicking the pencil icon.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    - Stephen
  • EllieEllie Posts: 2
    edited 2009-04-14 20:12
    Hi Stephen, thanks for your reply. The first piece of code is for the Ping))). It measures the distance and prints that measurement to the viewing monitor in arduino. That is all this piece of code will do when i run it. The second piece of code moves the servo, but as i just realised, i posted the wrong code. So here is the correct piece of code for the servo which i need to combine with the code for the Ping))). Sorry for that.

    Regards
    Ellie



    
    //This code moves the servo 45degrees from left to right.
    // Sweep
    
    
    // by BARRAGAN <http://barraganstudio.com> 
    
    #include <Servo.h> 
     
    Servo myservo;  // create servo object to control a servo 
                    // a maximum of eight servo objects can be created 
                    
                    
     
    int pos = 0;    // variable to store the servo position 
    
    
    
     
    void setup() 
    { 
      myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
    } 
     
     
    void loop() 
    { 
      for(pos = 0; pos < 45; pos += 1)  // goes from 0 degrees to 45 degrees 
      {                                  // in steps of 1 degree 
        myservo.write(pos);              // tell servo to go to position in variable 'pos' 
        delay(15);                       // waits 15ms for the servo to reach the position 
      } 
      for(pos = 45; pos>=1; pos-=1)     // goes from 45 degrees to 0 degrees 
      {                                
        myservo.write(pos);              // tell servo to go to position in variable 'pos' 
        delay(15);                       // waits 15ms for the servo to reach the position 
      } 
    } 
    
    

    Post Edited (Ellie) : 4/14/2009 8:28:20 PM GMT
  • FranklinFranklin Posts: 4,747
    edited 2009-04-15 00:30
    Call the loop() in the second code move_servo then in the first piece add some code such that if the ping see an object closer than X inches it calls move_servo otherwise it loops and checks for an object again.

    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
    - Stephen
Sign In or Register to comment.