28 Nov 2011

How to control a Servo

Result:



In this one, servo is programmed to be controlled by two buttons, one turns servo to the left and the other one turns it to the right. When the servo is turning, corresponding LED will be switched on to indicate the operation.


Because Arduino has built-in library for controlling servo, which makes servo a really easy kit to use. In this project, I will be using a servo to turn the IR sensor around constantly.

This is the circuit Diagram:



This is the code:


// Oscar's Project

// 
// There are 2 input buttons (turn left and right), when button is pressed, the servo turns and corresponding LED is lit up.



#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 

int pos = 90;    // variable to store the servo position 
const int maxDeg = 160;
const int minDeg = 5;


const int leftPin = 3;
const int rightPin = 2;

const int led1Pin = 6; // indicator
const int led2Pin = 5; // indicator

const int outputPin = 9; // pwm function will be disabled on pin 9 and 10 if using servo

int leftPressed = 0;
int rightPressed = 0;


void setup() 
{ 
  myservo.attach(outputPin);  // attaches the servo on pin 9 to the servo object 
  pinMode(leftPin, INPUT);
  pinMode(rightPin, INPUT);
  pinMode(led1Pin, OUTPUT);
  pinMode(led2Pin, OUTPUT);
} 


void loop() 
{ 
  leftPressed = digitalRead(leftPin);
  rightPressed = digitalRead(rightPin);
  
  if(leftPressed){
    if(pos < maxDeg) pos += 3;
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    digitalWrite(led1Pin,HIGH);
  }
  else
    digitalWrite(led1Pin,LOW);
  
  if(rightPressed){
    if(pos > minDeg) pos -= 3;
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    digitalWrite(led2Pin,HIGH);
  }
  else
    digitalWrite(led2Pin,LOW);
  
  delay(15);                       // waits 15ms for the servo to reach the position 

}