Arduino Tutorial - Servo

A servo is a small device that has an output shaft. You can connect small servo motors directly to an Arduino and control the shaft position very precisely by sending a coded signal to the servo.

As long as the coded signal is present in the input line, the servo maintains the angular position of the shaft. When the coded signal changes, the angular position of the shaft changes.

In practice, servo motors are used to control the position of objects, to rotate objects, to move the legs, arms or hands of robots, or to move sensors with high precision. Because servo motors are small and because they have integrated circuits to control their movement, they can be connected directly to an Arduino.

How does a servo work?

A servo has some control circuits and a potentiometer (a variable resistor, also called a poti) connected to the output shaft. This potentiometer allows the control circuit to monitor the current angle of the servo motor.

When the shaft is at the correct angle, the motor shuts off. If the circuitry determines that the angle is not correct, the motor is rotated in the correct direction until the angle is correct. The output shaft of the servo can move 180 degrees. Usually it is somewhere in the 210 degree range, but varies by manufacturer. With a normal servo, angular movement is controlled between 0 and 180 degrees. A normal servo cannot mechanically rotate any further because a mechanical stop is attached to the main output gear.
The amount of power applied to the motor is proportional to the distance it must travel. Therefore, if the shaft must rotate a large distance, the motor will run at full speed. If only a small amount needs to be turned, the motor runs slower. This is called proportional control.

How do you communicate the angle at which you want the servo to turn? The control wire is used to communicate the angle. The angle is determined by the duration of a pulse applied to the control wire. This is called pulse-coded modulation. The servo expects a pulse every 20 milliseconds (0.02 seconds). The length of the pulse determines how far the motor will turn. For example, if the pulse is 1.5 milliseconds long, the motor will rotate to the 90-degree position (often referred to as the neutral position). If the pulse is shorter than 1.5 ms, the motor rotates the shaft to 0 degrees. If the pulse is longer than 1.5 ms, the shaft rotates closer to 180 degrees.

As you can see in the figure, the duration of the pulse determines the angle of the output shaft (shown as a green circle with the arrow). Note that the times here are illustrative and the actual times depend on the manufacturer of the motor. However, the principle is the same.

Controlling the servo with an Arduino

In this experiment, we connect the power and ground pins directly to the Arduino 5 V and GND pins. The PWM input is connected to one of the digital output pins of the Arduino.

Connect the motor to the Arduino as shown in the following table:

  • Red cable - 5 V pin Arduino.
  • Brown/black cable - ground pin Arduino
  • Yellow cable- PWM (10) pin Arduino

Arduino Servo Code

/* Arduino Servo Test sketch */ #include <Servo.h> Servo servoMain; // Define our Servo void setup() { servoMain.attach(10); // servo on digital pin 10 } void loop() { servoMain.write(45); // Turn Servo Left to 45 degrees delay(1000); // Wait 1 second servoMain.write(0); // Turn Servo Left to 0 degrees delay(1000); // Wait 1 second servoMain.write(90); // Turn Servo back to center position (90 degrees) delay(1000); // Wait 1 second servoMain.write(135); // Turn Servo Right to 135 degrees delay(1000); // Wait 1 second servoMain.write(180); // Turn Servo Right to 180 degrees delay(1000); // Wait 1 second servoMain.write(90); // Turn Servo back to center position (90 degrees) delay(1000); // Wait 1 second }

Matching products

feetech-fs90-micro-servo_600x600.jpg
FEETECH FEETECH FS90 Micro Servo
Sale price2,20 €
In stock, 154 units
power-hd-continuous-rotation-servo-ar-3606hb_1_600x600.jpg
Pololu Power HD Continuous Rotation Servo AR-3606HB
Sale price18,84 €
Not in stock, available for backorder

Matching this article

View all
feetech-fs90r-micro-continuous-rotation-servo_600x600.jpg
FEETECH FEETECH FS90R Micro Continuous Rotation Servo
Sale price2,80 €
In stock, 67 units
sg92r-micro-servo-01_600x600.jpgsg92r-micro-servo-02_600x600.jpg
Adafruit SG92R Micro servo
Sale price2,90 €
In stock, 16 units
feetech-fs90-micro-servo_600x600.jpg
FEETECH FEETECH FS90 Micro Servo
Sale price2,20 €
In stock, 154 units
HTB1YbCINXXXXXbUXFXXq6xXFXXXs__600x600.jpgFeetech-Fitec-FM90-9g-Micro-DC-Motor_600x600.jpg
FEETECH FM90 9g Micro DC Motor gear box in servo body
Sale price1,30 €
In stock, 94 units
power-hd-micro-servo-hd-1900a_600x600.jpg
Pololu Power HD Micro Servo HD-1900A
Sale price6,36 €
In stock
9G-Metal-Gear-Mini-High-Torque-Servo_600x600.jpg9G-Metal-Gear-Mini-High-Torque-Servo-2_600x600.jpg
FEETECH FT90M-FB Metal Gear Mini High Torque Servo
Sale price4,50 €
Only 2 units left