Instructables

Arduino Tutorial Bundle .:Arduino Experimentation Kit:. (ARDX)

Featured

Step 6: .:A Single Servo:. (Servos) - CIRC04

Picture of .:A Single Servo:. (Servos) - CIRC04
CIRC04-assembled.jpg
CIRC04-pieces.jpg
CIRC04-3d.png
CIRC04-3dexploded.png
CIRC04-scem.png
CIRC04-sheet.png

What We're Doing:
Spinning a motor is good fun but when it comes to projects where motion control is required they tend to leave us wanting more. The answer? Hobby servos. They are mass produced, widely available and cost anything from a couple of dollars to hundreds. Inside is a small gearbox (to make the movement more powerful) and some electronics (to make it easier to control). A standard servo is positionable from 0 to 180 degrees. Positioning is controlled through a timed pulse, between 1.25 milliseconds (0 degrees) and 1.75 milliseconds (180 degrees) (1.5 milliseconds for 90 degrees). Timing varies between manufacturer. If the pulse is sent every 25-50 milliseconds the servo will run smoothly. One of the great features of the Arduino is it has a software library that allows you to control two servos (connected to pin 9 or 10) using a single line of code.

(you can also download the breadboard layout sheet from the bottom of this step)


The Parts:
  • CIRC-04 Breadboard Sheet
  • 2 Pin Header (x4)
  • 3 Pin Header (x1)
  • Mini Servo (x1)
  • Wire


The Circuit and Plugging Everything In:
A Small Video of Everything Being Plugged in


The Code: - File > Sketchbook > Examples > Library-Servo > Sweep
// Sweep// by BARRAGAN <http://barraganstudio.com> #include <Servo.h>  Servo myservo;  // create servo object to control a servoint 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     }} 


Not Working?
  • Servo Not Twisting? - Even with colored wires it is still shockingly easy to plug a servo in backwards. This might be the case.
  • Still not Working - A mistake we made a time or two was simply forgetting to connect the power (red and brown wires) to +5 volts and ground.
  • Frustration? - Shoot us an e-mail, this circuit is both simple and complex at the same time. We want to hear about problems you have so we can address them in future editions.
help@oomlout.com


Making it Better:
Potentiometer Control:
We have yet to experiment with inputs but if you would like to read ahead, there is an example program File > Sketchbook > Examples > Library-Servo > Knob###. This uses a potentiometer (CIRC08) to control the servo. You can find instructions online here: http://tinyurl.com/dymsk2

Self Timing:
While it is easy to control a servo using the Arduino's included library sometimes it is fun to figure out how to program something yourself. Try it. We're controlling the pulse directly so you could use this method to control servos on any of the Arduino's 20 available pins (you need to highly optimize this code before doing that).
  int servoPin = 9;void setup(){  pinMode(servoPin,OUTPUT);}void loop() {  int pulseTime = 2100; //(the number of microseconds                         //to pause for (1500 90 degrees                         // 900 0 degrees 2100 180 degrees)   digitalWrite(servoPin, HIGH);  delayMicroseconds(pulseTime);  digitalWrite(servoPin, LOW);  delay(25);}
Great Ideas:
Servos can be used to do all sorts of great things, here are a few of our favorites.

Xmas Hit Counter
http://tinyurl.com/37djhq

Open Source Robotic Arm (uses a servo controller as well as the Arduino)
http://tinyurl.com/ckm3wd

Servo Walker
http://tinyurl.com/da5jfe

CIRC04-sheet.pdf(630x810) 42 KB
 
Remove these adsRemove these ads by Signing Up
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!