To connect a standard 5V hobby servo (like the TowerPro SG90) to an Arduino Uno R3 or R4 Minima, wire the servo's VCC wire (usually red) to the Arduino 5V pin, the GND wire (usually black or brown) to the Arduino GND pin, and the signal wire (usually yellow, orange, or white) to a PWM-capable digital pin like Pin 9. While this direct connection works for micro servos, high-torque servos require an external power supply and a shared ground path to prevent microcontroller brownouts.

The Physical Device: Identifying Servo Terminals and Diagram Symbols

Before tracing the circuit, you need to identify the physical terminals on the servo and understand the schematic symbols used in wiring diagrams. Most standard hobby servos (Futaba, JR, Hitec, and TowerPro clones) use a 3-pin female connector with a 0.1-inch (2.54mm) pitch.

Physical Terminal Identification:

  • VCC (Power): Typically the Red wire. This supplies the DC voltage (usually 4.8V to 6.0V) to the internal DC motor and control logic.
  • GND (Ground): Typically the Black or Brown wire. This is the current return path and the 0V reference for the internal potentiometer and logic board.
  • Signal (PWM): Typically the Yellow, Orange, or White wire. This receives the 50Hz Pulse Width Modulation (PWM) control signal from the microcontroller.

Diagram Symbols in this Drawing:

When reading a servo wiring schematic, you will encounter three specific symbols. The VCC node is often represented by a solid horizontal line with an upward arrow or a simple '+5V' text label. The GND node uses the standard earth ground symbol: three descending horizontal lines of decreasing width. The PWM Signal line is denoted by a square wave symbol (a series of alternating high and low right angles), often accompanied by a tilde (~) next to the Arduino pin number to indicate hardware PWM capability.

Node-by-Node Wiring Trace: Power, Ground, and Signal Paths

A wiring diagram is only useful if you can trace the current and logic paths from source to load. Below is the exact node-by-node trace for a standard direct-wired micro servo, followed by the mandatory external power trace for high-torque models.

Trace 1: Direct Arduino Power (For SG90 / Micro Servos Only)

Micro servos like the 9g SG90 draw roughly 10mA at idle and spike to about 250mA at stall. The Arduino Uno's onboard 5V linear regulator can safely supply up to 800mA (minus the board's own overhead), making direct power viable for one or two micro servos.

  1. Node 1 (Source VCC): Current leaves the Arduino 5V pin.
  2. Node 2 (Distribution): The 5V travels via a jumper wire to the red (+) rail of the breadboard.
  3. Node 3 (Load VCC): A jumper wire routes 5V from the red rail to the Red wire of the servo connector.
  4. Node 4 (Source GND): The return path begins at the Arduino GND pin (next to Pin 13).
  5. Node 5 (Distribution): The ground travels to the blue (-) rail of the breadboard.
  6. Node 6 (Load GND): A jumper wire routes ground from the blue rail to the Brown/Black wire of the servo.
  7. Node 7 (Signal Source): The 50Hz PWM logic signal exits the Arduino at Digital Pin 9 (a hardware PWM pin).
  8. Node 8 (Signal Load): The signal travels directly to the Orange/Yellow wire of the servo, terminating at the servo's internal comparator IC.
CRITICAL GROUND PATH RULE: Ground is not just a reference; it is the physical return path for the current. If you use an external battery pack for a larger servo, the negative terminal of the battery pack must be wired directly to the Arduino's GND pin. Without this shared equipotential ground, the Arduino's 5V PWM signal has no reference point against the servo's internal logic, resulting in erratic jitter or total failure.

Trace 2: External Power (For MG996R / High-Torque Servos)

A metal-gear MG996R servo can pull 2.5 Amps at stall. Connecting this to the Arduino's 5V pin will instantly brownout the ATmega328P microcontroller, causing the board to reset or the onboard voltage regulator to overheat and fail. You must use an external 5V/6V BEC (Battery Eliminator Circuit) or a 4xAA battery pack.

  1. Node 1 (External VCC): Current leaves the Positive (+) terminal of the 6V battery pack.
  2. Node 2 (Load VCC): The positive wire connects directly to the servo's Red wire.
  3. Node 3 (Shared Ground Split): The Negative (-) terminal of the battery pack connects to a breadboard ground rail.
  4. Node 4 (Load GND): A jumper routes from the ground rail to the servo's Brown wire.
  5. Node 5 (Logic Ground Tie): A second jumper routes from that same ground rail to the Arduino GND pin. (This ties the logic grounds together).
  6. Node 6 (Signal): Arduino Pin 9 connects to the servo's Orange wire.

Terminal and Pin Mapping Table

Use this reference table to verify your physical connections against your schematic. Wire colors can occasionally vary by manufacturer (e.g., some Hitec servos use Blue for Signal instead of Yellow), so always verify against the datasheet if your servo has non-standard coloring.

Servo Wire Function Standard Wire Color Arduino Uno Pin (Direct) External Power Connection Purpose
VCC (Power) Red 5V Pin Battery Pack Positive (+) Supplies 4.8V - 6.0V to motor and logic
GND (Ground) Black or Brown GND Pin Battery Pack Negative (-) AND Arduino GND Current return path and 0V logic reference
Signal (PWM) Yellow, Orange, or White Pin 9 (or any PWM ~ pin) Pin 9 (or any PWM ~ pin) Receives 50Hz pulse-width control signal

Verifying Your Connections with a Multimeter

Before uploading your code and risking a stripped gear or a fried board, grab your digital multimeter (DMM) and verify the physical layer. Set your meter to the following modes and check these specific thresholds.

1. Verify Ground Continuity (Ohms / Continuity Mode)

Set your DMM to continuity mode (the diode/soundwave symbol). Place the black probe on the metal shield of the Arduino's USB port (which is tied to ground) and the red probe on the exposed metal of the servo's GND wire terminal. You should hear a continuous beep and read less than 1.0 ohm. If the circuit is open, your servo will jitter violently when powered.

2. Verify VCC Voltage (DC Volts Mode)

Power the circuit. Set the DMM to DC Voltage. Place the red probe on the servo VCC wire and the black probe on the servo GND wire. You should read between 4.8V and 5.2V for direct Arduino power, or 5.8V to 6.2V if using a fresh 4xAA battery pack. If you read below 4.5V under load, your power supply is sagging, and the servo will stall.

Pro Tip: Measuring PWM with a Standard Multimeter
Standard multimeters cannot read the frequency of a PWM signal, but they can read the average DC voltage. A 50Hz PWM signal has a 20ms period. A 1.5ms pulse width (the center position for a servo) equals a 7.5% duty cycle. If your Arduino outputs 5V logic, 7.5% of 5V is 0.375V. Set your DMM to DC Volts, probe the Signal wire while the Arduino outputs a 90-degree command, and look for a reading between 0.3V and 0.5V. If you read 0.0V, you have a broken wire. If you read a steady 5.0V, your pin is stuck HIGH or configured as a standard digital output instead of PWM.

Frequently Asked Questions

How to connect a servo to an Arduino without a breadboard?

To bypass a breadboard, you can use a dedicated Sensor Shield (like the Adafruit 16-Channel PWM/Servo Shield or a generic Arduino Sensor Shield V5.0). These shields plug directly into the Arduino's header pins and provide 3-pin male headers with dedicated screw terminals for external power and ground. Alternatively, for a permanent installation, solder a 3-pin JST-XH or Dupont male header directly to a custom PCB or perfboard, routing the VCC and GND to a separate voltage regulator (like an LM7805 or a buck converter) and the signal directly to the microcontroller's PWM pin.

Why is my Arduino resetting when the servo moves?

This is almost always caused by a voltage brownout. When a servo starts moving, especially under mechanical load, it draws a high inrush current (often exceeding 1 Amp). If you are powering the servo directly from the Arduino's 5V pin, this current spike pulls the board's main 5V rail down below the ATmega328P's minimum operating voltage (around 2.7V to 4.0V depending on clock speed), triggering the internal brownout detection (BOD) circuit and forcing a reset. The fix is to power the servo from an external battery pack or BEC, ensuring only the signal wire and a shared ground connect to the Arduino.

How to connect multiple servos to one Arduino Uno?

The Arduino Uno has 6 hardware PWM pins (3, 5, 6, 9, 10, and 11), allowing you to wire up to 6 servos directly using the standard Servo.h library. Wire all servo VCC pins to a shared external 5V/6V power rail, all servo GND pins to a shared ground rail (tied to the Arduino GND), and route each signal wire to a separate PWM pin. If you need to control more than 6 servos (e.g., for a hexapod or robotic arm), use an I2C PWM driver board like the PCA9685. This module communicates via the I2C bus (SDA to A4, SCL to A5 on the Uno) and provides 16 dedicated, hardware-timed PWM outputs, freeing up your microcontroller's resources.

Can I power a 5V servo directly from the Arduino 3.3V pin?

No. Standard hobby servos require a minimum of 4.8V to operate their internal DC motor and logic board. Supplying 3.3V will result in insufficient torque, erratic behavior, or complete failure to initialize. Furthermore, the 3.3V voltage regulator on an Arduino Uno is typically rated for only 50mA to 150mA (depending on the board revision and clone manufacturer). A servo's idle current alone can exceed this limit, potentially destroying the onboard 3.3V regulator. If you are using a 3.3V microcontroller (like an ESP32 or Raspberry Pi Pico), you must still power the servo's VCC from a 5V source, but you will need a logic level shifter or a simple voltage divider on the signal line to step the 3.3V PWM signal up to 5V, as some older servo controller ICs fail to register 3.3V as a logic HIGH.