L293D Motor Drive Shield: Run Two DC Motors and a Servo
By Official Hobby Components Online Store | Buy Electronic Kits, Components, Boards, Shields, Modules | Published: 2026-10-16
Category: How-to Guides
Wire an L293D motor drive shield to an Arduino Uno, power the motors externally, and control two DC motors plus a 5V servo with a practical step-by-step build.
Quick answer
Stack the L293D motor drive shield on an Arduino Uno, remove the power jumper only if you feed the shield's own screw terminal with a separate motor supply, and connect the servo to one of the two 5V servo headers. If you are driving two DC motors from a bench supply and want I2C control instead, the mLink L9110 controller is a cleaner alternative. The steps below cover the standard shield build.
What the L293D shield actually gives you
The Motor Drive Shield L293D for Arduino is designed to help you add motor control to your projects. It provides two interfaces for 5V servos, connected to the Arduino's high-resolution dedicated timer, allowing for precise servo operation. It is compatible with Arduino Uno boards, and the board itself is not included.
That combination is why this shield stays popular: two DC motor channels plus two servo headers on one board, with the servo timing handled by a dedicated timer rather than blocking your main loop. The tradeoff is that the L293D is a bipolar driver with a real voltage drop, so motors that need high current or very low voltage may not behave well. Check your motor's stall current before you commit.
Check your motor and supply before you wire anything
Two numbers decide whether this build works: the motor's stall current and the supply voltage. The L293D drops roughly 1.4 to 2 V across its internal transistors, so a 6 V motor on a 6 V supply will feel sluggish. Plan on a supply a few volts above the motor's rated voltage, and confirm the current per channel is within what the driver can handle.
If your motors draw more than the shield can comfortably supply, or you want speed control with 255 steps in each direction over a simple I2C link, the mLink L9110 DC Motor Controller is worth considering. It is a serial (I2C) 2 channel DC motor driver capable of driving up to two DC motors at a maximum current of 800mA per motor, with independent direction and speed control.
The power jumper: the one thing people get wrong
The shield's power jumper connects the Arduino's 5V rail to the motor driver's logic supply. With the jumper in place, the shield draws logic power from the Uno, and you still need a separate supply for the motors themselves through the screw terminal.
Remove the jumper only when you are feeding the shield's own 5V logic pin from an external regulated 5V source. If you remove it and forget to supply that pin, the logic side goes dark and nothing moves, which is the most common 'dead shield' report. Leave it in place for a normal Uno build.
- Jumper in: logic from the Arduino 5V rail, motors from the screw terminal.
- Jumper out: you must supply regulated 5V to the shield's logic pin yourself.
- Never feed motor voltage into the 5V logic pin.
Servo headers and the dedicated timer
The two 5V servo interfaces are wired to the Arduino's high-resolution dedicated timer, which means servo pulses stay accurate even while your sketch is busy with other tasks. That is a genuine advantage over bit-banging servo pulses in software, where jitter shows up as twitching.
Power is the catch. Servos can pull a surprising surge current when they start moving, and pulling that from the Uno's 5V regulator can brown out the board. For anything beyond a small micro servo, power the servo rail from your external 5V supply and share ground with the Arduino.
Finishing the build cleanly
For the motor and supply wiring, a 2.1mm DC Power Male Plug Connector gives you a solderable male plug with a 2.1mm inner diameter and plastic and metal construction, which is handy when you want to terminate a bench supply lead or a battery pack into the shield's screw terminal. Solder connections keep the joint secure under vibration, which matters on anything that moves.
Keep motor wires twisted and short, route them away from the servo signal lines, and add a common ground between the Arduino and the external supply. If a motor twitches but does not spin, suspect the supply or the jumper before you rewrite the code.
Step-by-step: L293D shield build
- 1. Match the motor to the driver: Look up your motor's rated voltage and stall current. The L293D drops roughly 1.4 to 2 V internally, so pick a supply a few volts above the motor rating and keep per-channel current within the driver's limits. If the numbers do not fit, switch to the mLink L9110, which is rated to 800mA per motor. Checkpoint: if you cannot find a stall current figure, measure it or choose a driver with a published ceiling.
- 2. Seat the shield on the Uno: Power the Arduino down, align the shield's headers with the Uno's pins, and press it fully home. The shield is compatible with Arduino Uno boards, and the board is not included, so confirm you have an Uno rather than a board with a different pinout. Checkpoint: a shield that is one pin row off will often still power up but behave erratically.
- 3. Decide the power jumper state: Leave the jumper in place for a normal build so the shield takes logic power from the Arduino's 5V rail. Remove it only if you are supplying regulated 5V to the shield's logic pin yourself. Either way, the motors get their own supply through the screw terminal. Common mistake: pulling the jumper and then wondering why the board is dead. If nothing lights up, put the jumper back first.
- 4. Wire the external motor supply: Connect your motor supply to the shield's screw terminal, observing polarity. Use a soldered 2.1mm DC Power Male Plug Connector if you are terminating a bench supply or battery lead, and tie the supply ground to the Arduino ground. Checkpoint: measure the terminal voltage before connecting motors, and never feed motor voltage into the 5V logic pin.
- 5. Connect the two DC motors: Land motor A on the first output pair and motor B on the second. If a motor spins the wrong way, swap its two leads rather than changing code, and keep the leads short and twisted. Checkpoint: test one motor at a time so a wiring fault on one channel does not mask the other.
- 6. Add the servo: Plug a 5V servo into one of the two servo headers, which are connected to the Arduino's high-resolution dedicated timer for precise operation. For anything larger than a micro servo, power the servo rail from the external 5V supply instead of the Uno's regulator. Common mistake: running a loaded servo from the Arduino 5V pin and getting random resets when it moves.
- 7. Upload and verify: Load a sketch that drives each motor forward, then reverse, then sweeps the servo. Watch for supply sag on the meter while the motors run, and confirm the servo holds position without jitter. Next step: if a channel stalls under load, revisit the supply voltage and current headroom before touching the code.
Parts used in this build
- Motor Drive Shield L293D for Arduino: Motor Drive Shield L293D for Arduino: two 5V servo interfaces connected to the Arduino's high-resolution dedicated timer; compatible with Arduino Uno boards (board not included). Gives you two motor channels and two servo headers on one stackable board, with servo timing handled in hardware rather than in your sketch.
- mLink L9110 DC Motor Controller: mLink L9110 motor controller: serial (I2C) 2 channel DC motor driver, up to two DC motors at a maximum of 800mA per motor, with independent direction and speed control at 255 steps in each direction. A better fit when you want I2C control or need to know the current ceiling per motor up front instead of estimating it.
- 2.1mm DC Power Male Plug Connector: 2.1mm DC Power Male Plug Connector: male plug with 2.1mm inner diameter, plastic and metal construction, solder connections for secure attachment, designed for DC power applications. Lets you terminate a bench supply or battery lead into the shield's screw terminal with a soldered, vibration-resistant joint.


