The Direct Answer: Which Servo Fits Your Arduino Project?
Choosing the right servo on Arduino comes down to matching your mechanical load to the motor's stall torque and physical footprint. Do not guess based on physical size; a micro servo and a standard servo can look similar but have vastly different internal gear ratios. Use the decision tree below to lock in your part number based on your calculated load.
| Calculated Load Requirement | Physical Constraint | Concrete Part Pick | Typical Cost (2026) |
|---|---|---|---|
| < 2.0 kg-cm | Micro / Lightweight | TowerPro SG90 (Plastic) or MG90S (Metal) | $2 - $5 |
| 2.0 - 10.0 kg-cm | Standard / Medium Arm | DS9029MG (9 kg-cm, Metal Gear) | $8 - $12 |
| 10.0 - 20.0 kg-cm | Standard / High Torque | TowerPro MG995 / MG996R (13-15 kg-cm) | $6 - $10 |
| 20.0 - 35.0 kg-cm | Large / High Voltage (7.4V) | DS3218 (20 kg-cm) or LX-16A (Serial Bus) | $15 - $25 |
Motor Type Comparison: Servo vs. Stepper vs. Brushed DC
A common mistake in embedded design is treating steppers and servos as interchangeable because both offer precise position control. They achieve this through fundamentally different architectures, which dictates which one fits your load profile.
| Criteria | RC / Hobby Servo | Stepper Motor (e.g., NEMA 17) | Brushed DC Gear Motor |
|---|---|---|---|
| Torque Curve | High stall torque, drops at high speed. Maintains position without continuous current. | High holding torque, but torque drops sharply as RPM increases. | Low stall torque, peaks at mid-speed. Requires continuous current to hold. |
| Control Needs | Closed-loop (internal pot). Needs 50Hz PWM signal. | Open-loop. Needs high-frequency step/dir pulses via a dedicated driver. | Open-loop. Needs H-bridge for direction and PWM for speed. |
| Travel Range | Limited (typically 180° or 270°). | Infinite continuous rotation. | Infinite continuous rotation. |
| Battery Impact | Excellent. Draws near-zero current when holding a static position. | Poor. Draws maximum current continuously to maintain holding torque. | Poor. Must remain energized to hold position against a load. |
Verdict: Choose a servo when you need high torque at specific angular positions (like a robotic arm joint) and are running on battery power. Choose a stepper only when you need continuous rotation with precise positional tracking (like a 3D printer axis) and have a robust, unlimited power supply.
Sizing Rule of Thumb and Worked Load Example
Servo manufacturers rate torque in kg-cm (the weight in kilograms the motor can hold at a 1 cm radius from the shaft). To size a servo correctly, you must calculate the dynamic torque requirement, not just the static weight.
The Sizing Formula:
Required Torque (kg-cm) = (Mass in kg) × (Distance to center of mass in cm) × 1.5 (Dynamic Safety Factor)
Note: We drop the 9.81 gravity constant because the kg-cm unit already bakes in Earth's gravity. The 1.5x multiplier accounts for the inertial spike when the servo accelerates the load from a dead stop.
Worked Example: Pan-Tilt Camera Mount
You are building a pan-tilt mount for a 250g (0.25 kg) FPV camera. The distance from the tilt servo's output shaft to the camera's center of mass is 8 cm.
- Static Torque: 0.25 kg × 8 cm = 2.0 kg-cm.
- Dynamic Torque (with 1.5x safety factor): 2.0 kg-cm × 1.5 = 3.0 kg-cm.
- Selection: A standard SG90 micro servo is rated for 1.8 kg-cm. It will strip its plastic gears on the first fast pan. The MG90S metal-gear micro servo is rated for 2.2 kg-cm—still too weak. You must step up to a standard-size servo like the DS9029MG (9 kg-cm) to ensure smooth acceleration without stalling.
Wiring and Terminal Identification for Arduino Servos
Standard hobby servos use a 3-wire interface. While the functions are universal, the wire colors vary slightly by manufacturer. Always verify the pinout on the datasheet before applying power, as reversing VCC and GND will instantly fry the internal control IC.
| Function | Futaba / TowerPro Color | JR / Hitec Color | Arduino Connection |
|---|---|---|---|
| Ground (GND) | Black | Brown | Arduino GND (and external PSU GND) |
| Power (VCC) | Red | Red | External 5V-6V PSU (NOT Arduino 5V pin) |
| Signal (PWM) | White or Orange | Orange or Yellow | Any digital pin (e.g., Pin 9) |
Driver and Controller Demands: Powering the Servo on Arduino
Unlike brushed DC motors that require an H-bridge driver (like the L298N) or steppers that need a chopper driver (like the A4988), standard RC servos do not need a motor driver IC. The H-bridge, position feedback potentiometer, and control logic are already integrated inside the servo casing.
What a servo actually demands from your Arduino is clean 50Hz PWM signals and adequate current delivery.
Scaling Up: The PCA9685 Solution
If your project requires more than two servos, generating multiple 50Hz software PWM signals on the Arduino can cause timer conflicts and jitter, especially if you are also reading sensors or using serial communication.
For multi-servo rigs, use a PCA9685 16-Channel PWM Servo Driver board. This module communicates via I2C (using only the A4 and A5 pins on an Uno) and handles the precise pulse timing in hardware. It also includes a dedicated screw terminal for high-current servo power, completely isolating the heavy current draw from your Arduino's delicate logic traces.
For power supplies, a 5V 10A switching power supply (like a Mean Well RS-50-5) is ideal for bench testing. For mobile robots, use a 2S LiPo battery (7.4V nominal) paired with a 5V/6V BEC (Battery Eliminator Circuit) rated for at least 5A continuous output.
Failure Signatures: Diagnosing Hum, Overheat, and Stall
When a servo misbehaves, it is rarely a defective motor. It is almost always a power, signal, or mechanical issue. Use this diagnostic path to identify the failure signature.
1. Symptom: Constant Humming, Jitter, or 'Buzzing'
- Cause: Power supply ripple, inadequate current delivery, or a missing common ground. The servo's internal comparator is oscillating because the reference voltage is bouncing.
- Fix: Solder a 470µF to 1000µF low-ESR electrolytic capacitor directly across the VCC and GND wires at the servo connector. This acts as a local energy reservoir to absorb the micro-second current spikes when the motor changes direction. Verify your Arduino GND and Servo PSU GND are physically connected.
2. Symptom: Overheating and Melting Smell
- Cause: The servo is in a 'mechanical stall'—it is being commanded to an angle it physically cannot reach (e.g., commanding 180° when the mechanical hard stop is at 175°). The motor remains fully energized, pushing against the stop, converting all electrical energy into heat.
- Fix: In your Arduino code, use the
servo.write()command to move to the target, wait for the movement to complete usingdelay()or a millis() timer, and then callservo.detach(). Detaching stops the PWM signal, cutting power to the internal H-bridge and allowing the motor to cool. Alternatively, map your software limits to stay 5° away from the physical hard stops.
3. Symptom: Grinding Noise, Stripped Gears, or Total Stall
- Cause: Exceeding the dynamic stall torque, or lateral shock loads snapping the output shaft. Plastic gears (like those in the SG90) will strip instantly if the load catches on an obstacle.
- Fix: Upgrade to metal-gear variants (MG prefix). If the metal gears are stripping, your mechanical binding is too high. Add thrust bearings to the output shaft if the load is pushing down on the servo horn, as standard hobby servos are not designed to handle heavy axial (downward) loads on the output spline.
For comprehensive library implementation and advanced I2C driver setups, refer to the official Arduino Servo Library documentation and the Adafruit PCA9685 Servo Shield guide.






