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.

Servo Selection Decision Tree
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
The Default Recommendation: For 80% of general-purpose Arduino robotics, pan-tilt camera mounts, and animatronics, buy the TowerPro MG995 (or MG996R). It delivers 13 kg-cm stall torque at 6V for under $10, features metal gears that won't strip under shock loads, and operates natively on standard 5V PWM logic. If your load calculation falls below 2 kg-cm, step down to the MG90S to save weight and current draw.

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.

Motor Architecture Comparison for Arduino Projects
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.

  1. Static Torque: 0.25 kg × 8 cm = 2.0 kg-cm.
  2. Dynamic Torque (with 1.5x safety factor): 2.0 kg-cm × 1.5 = 3.0 kg-cm.
  3. 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.

Standard 3-Wire Servo Pinout
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)
Critical Wiring Rule: The Arduino's onboard 5V linear regulator can only supply about 500mA to 800mA total. A single MG995 servo can draw over 2.5A during a stall condition. If you power the servo from the Arduino's 5V pin, the voltage will sag, causing the ATmega328P microcontroller to brownout and reset. Always use a separate power supply for the servo VCC, and tie the servo GND directly to the Arduino GND to establish a common logic reference.

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 using delay() or a millis() timer, and then call servo.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.