Using Servos With Arduino Made Easy !





Introduction: Using Servos With Arduino Made Easy !

Servomotors or simply servos are essential components of a robot which convert electrical energy into mechanical energy.They are widely used in the field of RC hobby and robotics. But unlike simple geared motors , these servos are made by integrating a geared motor with a position feedback circuit which allows us to control the rotation of the shaft precisely. To drive a servo , we need a controller which provides PWM signals to the servo which in turn determines the angle of rotation. Using an arduino to do this is pretty easy job, all you need is :

1. A servo ( To make your own servo , check this out : make your own servo ! )

2. Arduino ( and the default "knob.ino" sketch )

3. A bunch of jumper wires ( male to male )

4. A 10k potentiometer

5. A USB cable

Step 1: Prepare the Potentiometer

The potentiometer has three pins one is for the wiper and the other two have 10k resistance between them. The wiper should be connected to the analog 0 pin on the arduino , one of the remaining two pins should be connected to +5v and the other should be grounded. The potentiometer has been soldered on a protoboard to make it "arduino friendly" ( you can use a breadboard too ).

Based on how you rotate the the wiper arm , the analog values on the analog 0 pin will change and therefore the angle of rotation of the servo will also change.

Step 2: Upload the Program and Attach the Servo

I've made some minor changes in the program :

pin 15 ( analog 1 ) and pin 16 ( analog 2 ) are used as power source for the potentiometer board.

The arduino reads values from potentiometer between 0 and 1023

" val = analogRead(potpin); "

Then it converts or "maps" the values from 0-1023 to 0-179 ( in degrees )

" val = map(val , 0 , 1023 , 0 , 179 ); "

Finally , it writes these values to the servo.


1. Connect the potentiometer to the arduino ( as mentioned above )

2. Attach the yellow/orange signal pin of servo to pin 9 on arduino.

3. Connect the red wire to VIN pin* and the brown one to ground.

4. Take power from USB.

5. Upload the attached sketch to arduino.

***IF you are using external power source ( other than USB ) then first convert the voltage to 5v.

>> some important tips

Step 3: Troubleshooting and Tips


1. Do Not take +5v from any pin on arduino or from the +5v pin on arduino , I'm saying this because sometimes servos tend to draw high current from the source which can seriously damage the microcontroller. Instead use lithium batteries or any other batteries to power-up your servo ( USB power also works quite well ).

2. If your arduino keeps on resetting and the servo behaves abnormally , try adding capacitors to your power supply.

3. You can use optoisolators / optocouplers to electrically isolate the servo from microcontroller. This keeps the high current away from the microcontroller and stops the noises from damaging the controller.

At last , feel free to ask your questions

and if you find my instructable helpful , please do vote for me :)



    • Microcontroller Contest

      Microcontroller Contest
    • Spotless Contest

      Spotless Contest
    • Science of Cooking

      Science of Cooking

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




    What if i need to control multiple servos..with multiple potentiometers...what would be the code?

    Hello. I got an instructable where I show how to control 3 servos with 3 potentiometers. Maybe it can help you.

    thanks dude :)

    I made it and made a door lock out of it :)

    How much noise do you get? I've tried working with servos before, and they tend to get a lot of noise from the PWM. This is partially due to servo quality, however, I think a small capacitor on the signal line can help. Unfortunately, I have no working servos at this time, I'll have to try building one like you said.

    While using these micro servos , I usually get a lot of noise followed by jittering. Adding a bunch of capacitors to the power pins turns out to be helpful but I've not tried adding them to the signal pin.