An Arduino servo is the default choice for projects requiring precise, closed-loop angular positioning (typically 0° to 180°) without the need for external encoders or homing switches. If your project demands exact joint angles for a robotic arm, a pan-tilt camera mount, or an RC steering linkage, a standard hobby servo is your component. However, if you need continuous high-speed rotation or heavy linear lifting, you are looking at the wrong motor type. Selecting the right servo—and more importantly, powering it correctly—separates reliable builds from fried microcontrollers and stripped nylon gears.

Arduino Servo vs. Stepper vs. DC: Which Motor Fits Your Load?

A common mistake on the workbench is treating servos and stepper motors as interchangeable. They are not. A stepper motor moves in discrete steps and requires a constant current to hold position, generating significant heat. It also needs a homing switch to know where "zero" is on startup. A servo, by contrast, contains an internal DC motor, a gear train, and a potentiometer for closed-loop feedback. It only draws significant current while moving or fighting a load, and it inherently knows its absolute position.

Below is a data-dense comparison to help you match the motor to your specific load profile and control hardware.

Motor Type Torque Curve & Holding Control Hardware Demands 2026 Avg Cost (USD) Ideal Load Profile
Micro Servo (SG90) Low torque (1.8 kg-cm). Drops off rapidly near stall. Arduino PWM pin. Can run off board 5V (barely). $2 - $4 Lightweight linkages, sensor sweeps, micro-grippers.
Standard Metal Gear (MG996R) High torque (10-13 kg-cm). Strong holding, but analog jitter. Arduino PWM pin + External 5V 3A BEC. $9 - $15 Robotic arms, RC car steering, medium payload pan-tilts.
High-Torque Digital (DS3218) Very high (20+ kg-cm). High-frequency PWM holding, no jitter. Arduino PWM pin + External 5V-8.4V 5A supply. $22 - $30 Heavy lifting joints, large RC models, high-stress pivots.
NEMA 17 Stepper Constant holding torque (4-5 kg-cm). High heat at standstill. Stepper driver (A4988/TMC2209) + 12V-24V supply. $12 - $18 3D printers, CNC routers, continuous precise linear motion.
Brushed DC Motor Zero holding torque. Max torque at stall, drops with speed. H-Bridge (L298N) + external supply + encoder for position. $5 - $12 Drive wheels, conveyors, continuous rotation winches.

Sizing an Arduino Servo: Torque Math and a Worked Example

Servo torque is universally rated in kg-cm (kilogram-centimeters) or oz-in (ounce-inches) at a specific voltage (usually 4.8V or 6.0V). This rating represents the stall torque—the maximum force the servo can exert before the motor stops turning. You should never design a system that operates at stall torque.

The Sizing Rule of Thumb: Calculate your maximum expected load torque, then apply a 1.5x to 2.0x safety margin. Servos lose torque as the internal potentiometer wears, and dynamic loads (acceleration/deceleration) create inertial spikes that exceed static weight calculations.

Worked Load Example: Robotic Arm Forearm

Let’s say you are building a robotic arm. The forearm segment is 15 cm long (from the elbow pivot to the gripper). The forearm itself weighs 100g, and it needs to lift a maximum payload of 250g at the very end of the arm.

  1. Calculate the Force: Total mass = 100g (arm) + 250g (payload) = 350g (0.35 kg). Force due to gravity = 0.35 kg × 9.81 m/s² = 3.43 Newtons.
  2. Calculate the Torque: Torque = Force × Distance. Assuming the center of mass for the worst-case scenario is at the end of the 15 cm (0.15 m) arm: 3.43 N × 0.15 m = 0.514 Nm.
  3. Convert to kg-cm: 0.514 Nm × 10.197 = 5.24 kg-cm.
  4. Apply Safety Margin: 5.24 kg-cm × 1.5 = 7.86 kg-cm.

The Verdict: A standard SG90 micro servo (1.8 kg-cm) will instantly stall and strip its nylon gears. An MG996R (rated at 10-13 kg-cm at 6V) is the correct choice here, providing enough overhead to handle dynamic acceleration without hitting the stall point.

Wiring, Terminals, and Powering High-Torque Servos Safely

Standard hobby servos use a universal 3-pin JST or Dupont connector. The terminal identification is standardized across almost all manufacturers (TowerPro, Futaba, Hitec):

  • Brown or Black Wire: Ground (GND). Must be tied to the Arduino GND and the external power supply GND.
  • Red Wire: Power (VCC). Nominally 4.8V to 6.0V. Never exceed 6.0V on standard analog servos unless the datasheet explicitly supports 7.4V/8.4V high-voltage (HV) digital servos.
  • Orange, Yellow, or White Wire: PWM Signal. Connects to an Arduino digital pin capable of hardware PWM (e.g., pins 3, 5, 6, 9, 10, or 11 on the Uno).
The 50Hz PWM Standard: Unlike DC motor speed control which uses high-frequency PWM (490Hz - 1000Hz), the Arduino Servo library overrides the timer to output a strict 50Hz signal (a pulse every 20 milliseconds). The position is dictated by the pulse width: 1000 microseconds (1ms) is typically 0°, 1500µs is 90°, and 2000µs is 180°.
CRITICAL POWER WARNING: Do not power an MG996R or larger servo directly from the Arduino’s 5V pin. The onboard linear voltage regulator on an Arduino Uno maxes out around 500mA to 800mA. A high-torque servo under load can pull 2.5 Amps at stall. If wired directly, the servo will pull the 5V rail down to 3V, causing the ATmega328P microcontroller to brownout, reset, or permanently damage the USB trace. Always use an external 5V 3A Buck Converter (BEC) to power the servo's red wire, and ensure the BEC's ground is bonded directly to the Arduino's ground.

Diagnosing Servo Failure Signatures: Hum, Overheat, and Stall

When an Arduino servo misbehaves, it rarely fails silently. The physical and electrical symptoms will tell you exactly what is wrong on the bench.

1. The "Hum" or Jitter

Symptom: The servo is at its target angle, but it constantly vibrates, buzzes, or hunts back and forth by 1 or 2 degrees.
Cause: This is almost always caused by a noisy power supply, inadequate decoupling, or a dirty internal potentiometer. Analog servos (like the MG996R) continuously compare the PWM pulse to the pot voltage; if the VCC rail has ripple, the comparison threshold shifts, causing the H-bridge to rapidly reverse polarity.
Fix: Solder a 100µF to 470µF electrolytic capacitor directly across the VCC and GND wires as close to the servo connector as possible. If the jitter persists under no load, the internal carbon-track potentiometer is worn, and the servo must be replaced or upgraded to a digital servo (which uses a microcontroller and magnetic encoder or higher-resolution pot to filter noise).

2. Overheat and Melting

Symptom: The servo casing is hot to the touch, or you smell melting plastic near the output shaft.
Cause: The servo is being commanded to a position that is mechanically impossible (e.g., commanding 180° when a physical linkage hard-stops at 170°). The motor stalls, but the internal H-bridge continues to apply full voltage, driving current up to the 2.5A stall limit. The energy dissipates entirely as heat.
Fix: Use the attach(pin, min_us, max_us) function in the Arduino Servo library to software-limit the travel range. Alternatively, implement a current-sense resistor on the ground leg and write a watchdog routine in your code to detach the servo if current exceeds 1.5A for more than 200 milliseconds.

3. Mechanical Stall and Gear Stripping

Symptom: The motor hums, but the output spline does not move, or it moves erratically with a grinding noise.
Cause: The load torque exceeds the servo's stall torque, or the output shaft has been subjected to a shock load (e.g., a robotic arm dropping onto a table). If the servo has nylon gears, the teeth on the final drive gear will shear off.
Fix: If the load is genuinely too heavy, you must either increase the gear reduction ratio externally, add a counterweight to balance the arm, or upgrade to a 20+ kg-cm digital servo with steel or titanium gears. Never rely on the servo's internal mechanical hard-stops to support a load; always design your mechanical linkages to bear the weight at the physical limits of travel.