Using Servos

300,538

292

55

Posted

Introduction: Using Servos

In this instructable, I am going to show you what a servo motor is, how to use it, and ideas for starting projects using it. I used arduino to control my servo, I added how to use a 555 in some of the later steps.

Step 1: What Is a Servo Motor

If you are like me, then you knew very little about servo motors, and how to use them, so we should start from the beginning. A Servo motor uses pulse width modulation (pwm) from a microcontroller or a 555 timing IC (or something different I haven't heard about) to know what position to move its horn to. They can move both clockwise or counterclockwise thanks to an H bridge which is hardwired into them. Most Servos, unlike conventional electric motors do not move in continuous rotations. the standard servo moves anywhere between 0 and 180 degrees, which make them useful for animatronics and robotics. The servo has three wires coming out of it which usually ends in a female jack. the wire colors are black, which gets connected to ground, red which gets connected to the positive power supply, and white or yellow which gets connected to the output of the microcontroller or 555 IC, and receives the pwm. Okay now that you know the basics, lets get started

Step 2: Testing the Servo

the first thing that you should do is make sure your servo motor is working. because the servos wires end in a female header, you cannot plug it into the arduino (unless you have a shield. insert solid core wires into the headers, so you can attach it to the pins of the arduino (or anything else). When you downloaded your programming environment for arduino, it should have two examples for the servo. The one we are going to use first is called sweep. Go to the "open" icon next to save near the top of the window on the environment. click on it, and a list of files should come up. go down to the one that says servo, and put your mouse over it. two files should come out of it. one called "sweep" and one called "knob". click on the one called sweep, compile the code and upload it to your board. if everything is connected correctly, the servo should begin to go back and forth from 0 to 180 degrees. If you cannot find the code, copy this:

// Sweep
// by BARRAGAN <http://barraganstudio.com>
// This example code is in the public domain.


#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 < 180; pos += 1)  // goes from 0 degrees to 180 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 = 180; pos>=1; pos-=1)     // goes from 180 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
  }
}


be sure to plug in the white wire to digital pin 9, the black wire to one of the ground pins on arduino, and the red wire to the 5v pin on the arduino board.

 

Step 3: New Code

Now that you know your servo works, you can begin to incorporate sensors into the mix. the first thing you should do is use a potentiometer. Use anything between 10 and 100k. keep the servo attached as it was using the sweep example. attach the top pin on the pot to 3.3v on the arduino. Connect the bottom pin to ground on the board. Connect the center of wiper pin of the pot to A0 (the first analog pin) on arduino. go to "open" on the IDE again. Go to servo and open "Knob". compile the code and upload it to your board.  When the program is running you will be able to control the position of the servo with a potentiometer. If you cannot find the code, copy this:

// 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

void setup()
{
  myservo.attach(9);  // 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)
  myservo.write(val);                  // sets the servo position according to the scaled value
  delay(15);                           // waits for the servo to get there
}

Step 4: Prepare the Sensor

The sensor that I used that would probably work very well was the QRD1114 reflective sensor which has a discrete infrared LED, and phototransistor. to get the sensor to work, you must connect it in a very specific way. you could use other reflective sensor, but this one just seemed convenient, and I am using it in another project so they are readily available for me. 

to setup this sensor you will need:

one QRD-1114

one 10k resistor

one 68 or 100ohm resistor

wire

Step 5: Using the Sensor With the Servo

Now that you have your sensor setup so that it will work for with arduino, you can replace the pot with it to make a servo that moves when something is in front of it and moves back when nothing is in front of it. use the same code that you did for the potentiometer. but this time instead of using the pot, connect pin one on the qrd to A0 on the arduino board. connect the two resistors to 3.3v, and connect pin 4 and 2 on the qrd to the ground on the board. run the program and when there is something about 1 cm from the sensor the motor will turn one way, and when the object moves away from the sensor the servo will move back. try adding a photo cell to make a light sensitive servo. using sensors with the servo, you can make robots, animatronics, and more. Have fun!

Step 6: Using a 555 and a Potentiometer

this is a simple circuit using a 555 to control the servo with a potentiometer. The circuit was originally meant as a tone generator, but with some simple modifications it became a servo tester. follow the schematic and it should work, but if you have any questions or problems, leave a comment and I will try to help you.'

to make this circuit you are going to need:
-one 555 timer
-one .1 µf ceramic disk capacitor
-one 1k resistor
-one 100 ohm resistor
-one 100k potentiometer
- a lot of jumper wires

Step 7: Using a 555 and Push Buttons

I like this 555 circuit more than the one that uses the pot. the servo acts less spastic, and is easier to control. When you hit one button the servo will go clock wise and when you hit the other button it will go counter clock wise.

for this circuit you are going to need:
-one 555 timer
-one .1 µf capacitor
-one 1k resistor
-two 100 ohm resistor
-one 33k resistor
-two push buttons

build the circuit from the previous step accept do not add the pot, add the push buttons and resistors in place of it.

Share

Recommendations

  • Spotless Contest

    Spotless Contest
  • Science of Cooking

    Science of Cooking
  • Microcontroller Contest

    Microcontroller Contest
user

We have a be nice policy.
Please be positive and constructive.

Tips

Questions

54 Comments

hello
I need a program for running servo motor for particular time ( more than 360 degree)
and return to its origin

Hello, I kind of need help in making the motor move 90 degrees clockwise and counter clockwise, both taking 5 seconds, and when it goes down clockwise, I want it to delay for another 5 seconds. I was thinking if there was anyway you could help me.

Hello there
void loop() {

for (pos = 0; pos <= 90; pos += 1) { // goes from 0 degrees to 180 degrees

// in steps of 1 degree

myservo.write(pos); // tell servo to go to position in variable 'pos'

delay(10); // waits 15ms for the servo to reach the position

}

delay(1000);

for (pos = 90; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees

myservo.write(pos); // tell servo to go to position in variable 'pos'

delay(10); // waits 15ms for the servo to reach the position

}

delay(1000);

}

That's what you want hope you understand it cause its way too simple good luck

i am new to using servos. How and what do i need to get it to move? All i have is the server

Awesome! You will need an Arduino Uno, a clone retails at $5.00. In addition, you need jumper wires, which are fairly cheap. After you have all of this, you must download the Arduino IDE (free). Input code and Upload.

( https://www.arduino.cc/en/Tutorial/Sweep)

great instructable.

can I use a 10k potentiometer in step 6?

Hey Higgs Boson,

I was just stuck in a part about what is a shield, is it like a program or something

Thanks

Nice, simple and good introduction. Thanks

Hi, does the 555 push button version require an arduino? I couldn't work out if it used one or not. Thanks for the answer!