How to Control Servo Motor Speed with Arduino

Actually, the working principle of servo motor is the angle where it will rotate (commanded by a controller) and not at whatever speed it rotates or which direction it will rotates, to right or to the left? No, a servo motor only knows the angle, not direction. If existing position now in the corner 00 and the controller ordered it to spin 900 then it will rotate clockwise. And conversely, if the current position is 1800 and the controller ordered it to spin 450 for example, then the motor will rotate counter clockwise. So once again, the servo motor only knows ‘angle’ parameter not direction or speed.

How to Control Servo Motor Speed with Arduino?

As I mentioned in the preceding paragraph, a servo motor has only one rate of speed (by manufacturer default). How measure the speed? Speed parameter usually specify in specifications / datasheet. For example, Tower Pro SG90 servo motor has a speed of 0:12 seconds / 60 degrees. In other word its speed is 0.72 RPS (Rotation per Second) or 43 RPM (Rotation per Minute).  Well, the servo motors will towards a certain angle with this typical speed constantly. How do I adjust the speed? If you set the servo motor speed using the technique of PWM (Pulse Width Modulation), it’s obviously impossible. Well, the only way to control the speed of the servo motor is give a ‘delay’ every movement 10 of angle. Sound tricky? Yes indeed, but there is no alternative ways. :)

I will show how to control servo motor speed with set delay giving each movement 10 of angle. By giving a different delay it will get different speeds. 'Speed' rate here is relative value (e.g. fast, a little faster, slower, a little slow, etc). It can’t be exactly measured e.g. 20 RPM, RPS 0.37 RPS, etc). You have to figure out yourself how much delay that corresponds to the speed you need.

Tools and materials for Servo Motor Speed-Arduino experiments

1. Arduino board suchas Uno or others
2. Servo Motor, for example Tower Pro SG90 or MG90
3. Jumper cable male to male (3 pieces)

Connect Arduino board with servo motor under the corresponding color as follows:
Motor Servo
The experiment circuit is shown in the picture below

Next, upload below sketch to your Arduino board.

#include <Servo.h>

Servo servomtr;

int pos = 0;
int servomtr_speed = 15;

void setup() {

void loop() {
for (pos = 0; pos <= 180; pos += 1) {
for (pos = 180; pos >= 0; pos -= 1) {

If the sketch has been uploaded, the servo motors should rotates clockwise and counterclockwise alternately with speed rate according to ‘servomtr_speed’ variable in sketch above. Try to change this variable value to suit your needs.

So, it’s a little trick How to Control Servo Motor Speed with Arduino. Maybe you need this trick to slowdown your servo motor in order to join with other parts in your system.
Next Post »