Skip to content

Instantly share code, notes, and snippets.

@bdryanovski
Created July 5, 2013 19:50
Show Gist options
  • Select an option

  • Save bdryanovski/5936809 to your computer and use it in GitHub Desktop.

Select an option

Save bdryanovski/5936809 to your computer and use it in GitHub Desktop.
Ardoino Experiment with Servo and Sonar
// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
// Ultrasonic Sensor
int ultrasonic_trig_pin = 51;
int ultrasonic_echo_pin = 50;
long duration, cm;
/*
* Get the distance from the ultrasonic sensor
* return in cm
*/
long get_distance() {
// Send soundwave
pinMode(ultrasonic_trig_pin, OUTPUT);
digitalWrite(ultrasonic_trig_pin, LOW);
delayMicroseconds(2);
digitalWrite(ultrasonic_trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(ultrasonic_trig_pin, LOW);
// Read it
pinMode(ultrasonic_echo_pin, INPUT);
duration = pulseIn(ultrasonic_echo_pin, HIGH);
return duration / 29 / 2; // Return in cm's
}
void setup()
{
Serial.begin(9600);
myservo.attach(21); // attaches the servo on pin 9 to the servo object
}
void loop()
{
//val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
//val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
for(int i = -50; i < 180; i++) {
myservo.write(i); // sets the servo position according to the scaled value
Serial.print(get_distance());
Serial.print("cm");
Serial.print("\n");
delay(20);
}
// waits for the servo to get there
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment