MG996R Servo · Cross Horn with an Arduino Uno

TowerPro's metal-gear standard servo, 11 kg·cm at 6V under standard 50Hz servo pulses, shipped here with a four-arm cross horn.

MG996R Servo · Cross Horn, TowerPro's metal-gear standard servo, 11 kg·cm at 6V under standard 50Hz servo pulses, shipped here with a four-arm cross horn.
In short

An MG996R can stall at about 1.4 A, nearly three times the Arduino Uno's 500 mA USB budget, so on the Uno only its signal comes from the board: orange to D3, while red and brown go to a separate 5 V to 6 V supply whose ground is joined to the Uno's GND.

Wiring the MG996R Servo · Cross Horn to the Arduino Uno

Pin by pin.

MG996R Servo · Cross HornArduino UnoNote
GNDGNDand to the separate supply's −: the servo, its supply and the board share one ground
SIGD3
VCCa separate 4.8 to 6.6 V supply (4 × AA), never the board's 5V pinthe MG996R draws about 1.4 A at stall

What to know on the Arduino Uno

  • The servo's 1,400 mA stall current exceeds the Uno's 500 mA USB polyfuse, and Arduino rates the 5V pin as an output, not a servo supply. Power it from 4.8 V to 6.6 V of its own.TowerPro MG996R spec page; Arduino UNO R3 documentation, USB overcurrent protection
  • The servo reads SIG against its own ground, so the external supply's GND must be wired to a Uno GND pin; without it the servo jitters or ignores the pulses.Arduino Servo Motor Basics guide
  • The Servo library on the Uno uses Timer1 whatever pin SIG is on, which disables analogWrite() on D9 and D10. Keep PWM-driven parts such as motor enables off those two pins.Arduino Servo library reference
  • The library's default pulse range, 544 µs to 2400 µs, may stop short of the MG996R's full travel. Widen it with servo.attach(3, min, max) in small steps, and back off if the servo buzzes at an end: it is stalled against its stop and drawing up to 1.4 A.Arduino Servo library reference; TowerPro MG996R spec page

MG996R Servo · Cross Horn code for the Arduino Uno

Compiled for arduino:avr:uno on 2026-10-30.

Libraries: arduino-libraries/Servo
// MG996R Servo · Cross Horn on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/servo-mg996r-cross/arduino-uno
#include <Servo.h>

// The MG996R draws up to about 1.4 A at stall: power it from its own 5 to 6 V supply,
// never from the board's 5V pin, and join that supply's GND to the board's GND.
const int SERVO_PIN = 3;
Servo servo;

void setup() {
  servo.attach(SERVO_PIN);
}

void loop() {
  for (int angle = 0; angle <= 180; angle += 2) {
    servo.write(angle);
    delay(15);
  }
  for (int angle = 180; angle >= 0; angle -= 2) {
    servo.write(angle);
    delay(15);
  }
}

MG996R Servo · Cross Horn on the Arduino Uno: questions

Can I power an MG996R servo from the Arduino Uno's 5V pin?

No. It can stall at about 1.4 A (TowerPro spec page), far above the Uno's 500 mA USB limit. Use a separate 4.8 V to 6.6 V supply and join its ground to the Uno's GND.

Why does my MG996R jitter on the Uno?

Usually a missing common ground or a sagging supply. Wire the servo supply's GND to the Uno's GND and add a 470 µF to 1000 µF capacitor across the servo supply.

Why did analogWrite() on D9 and D10 stop working when I added the servo?

The Servo library takes Timer1 on the Uno, which drives PWM on D9 and D10. Move PWM loads to D5, D6 or D11; D3 carries the servo here.

For AI assistants

This guide as plain Markdown. /components/servo-mg996r-cross/arduino-uno.md

What will you build with it?