Arduino ULN2003 Stepper Motor Driver Board​: Complete Guide to the Darlington Driver IC (Applications, Sequence, and Alternatives)

The ULN2003 is one of the most widely used integrated circuits in electronics, especially when it comes to driving relays, stepper motors, LEDs, and other inductive loads. At its core, the ULN2003 is a Darlington transistor array that provides seven channels of high-current, high-voltage drivers in a compact 16-pin package.

In this guide, we will cover everything you need to know about ULN2003—including its working principle, sequence for stepper motor driving, wiring examples with Arduino, application scenarios, and alternatives. This article is designed for engineers, students, and hobbyists who want practical, in-depth knowledge.

What is the ULN2003?

The ULN2003 is a high-voltage, high-current Darlington transistor array IC. It contains seven NPN Darlington pairs with common cathode clamping diodes for switching inductive loads. Each channel can sink up to 500 mA of current and withstand up to 50 V.

Package types:

  • DIP-16 (dual inline package)
  • SOIC-16 (surface mount)

Datasheet highlights:

  • 7 open-collector Darlington pairs
  • 2.7 kΩ base resistor for TTL/CMOS input compatibility
  • Built-in flyback diodes for inductive load protection

ULN2003 Pinout

The ULN2003 is a 16-pin IC packaged in DIP or SOIC format. It provides seven Darlington transistor channels for driving external loads. Each pin of the IC plays a specific role in the driving operation. Below is the expanded description of all pins:

ULN2003 pinout configuration

Pin Mapping Summary Table

Pin No.NameFunctionDescription
1–7IN1–IN7Input control pinsLogic inputs from MCU, activate corresponding outputs
8GNDGround referenceConnect to system 0V ground
9COMClamp diode commonConnect to +V load supply for inductive loads
10–16OUT1–OUT7Output pinsOpen-collector outputs, sink current to drive relays, motors, lamps, or LEDs

Pins 1–7: Input 1 to Input 7

  • These are the input control pins of the ULN2003.
  • Each pin is connected to the base of an internal Darlington transistor pair.
  • When an input receives a logic HIGH (typically +5V from a microcontroller), the corresponding output channel will be activated (connected to ground).
  • The inputs are TTL and CMOS compatible, so they can be directly driven by Arduino, STM32, Raspberry Pi, or other MCUs.

Practical use: Connect these pins to digital I/O pins of your controller to switch relays, motors, or LEDs.

Pin 8: Ground (GND)

  • This is the ground reference pin (0V) of the IC.
  • It must be connected to the system ground (the same ground used by the microcontroller and load power supply).
  • Proper grounding ensures correct logic operation and prevents floating input/output issues.

Pin 9: Common (COM)

  • This pin is internally connected to the cathodes of the clamp diodes for all seven channels.
  • It is used to handle back EMF (inductive kickback) generated by loads such as relays, solenoids, or stepper motors.
  • Typically, COM is tied to the positive supply voltage (Vcc) of the inductive loads.
  • If the ULN2003 is used only for resistive loads (like LEDs), this pin can be left unconnected.

Tip: Always connect this pin to +V load supply when driving relays or motors for safer operation.

Pins 10–16: Output 1 to Output 7

  • These are the open-collector outputs of the Darlington transistors.
  • Each output corresponds to one input pin (Pin 1 → Pin 16, Pin 2 → Pin 15, etc.).
  • When the input is HIGH, the output pin is pulled to ground, completing the circuit for the connected load.
  • Each output channel can sink up to 500 mA, with a maximum voltage rating of 50V.

Practical use: Connect the loads (relay coil, stepper motor winding, LED, lamp, etc.) between +V and the ULN2003 output pins.

Key Takeaway:

  • Inputs (1–7) → Logic control from MCU
  • Outputs (10–16) → Drive external loads
  • GND (8) → System reference
  • COM (9) → Inductive load protection

How Does the ULN2003 Work?

Q: How does a Darlington array function in ULN2003?

how does uln2003 work

The ULN2003 Stepper Motor Driver is built around the Darlington transistor pair principle. Each channel inside the IC contains two NPN transistors connected in cascade, where the first transistor amplifies the input signal and feeds it into the base of the second transistor. This arrangement produces a very high current gain—meaning that even a small input current from a microcontroller pin can control a much larger load current at the output.

When a logic HIGH (e.g., 3.3V or 5V) is applied to an input pin:

  1. The first transistor turns on, which in turn drives the second transistor.
  2. The output pin (collector) is pulled to ground, creating a low-impedance path for current to flow through the connected load (e.g., motor coil, relay, LED).
  3. Built-in clamp diodes absorb back EMF from inductive loads like motors or relays, protecting the IC and the microcontroller.

Input side (logic interface):

  • Fully compatible with TTL and CMOS logic.
  • Works directly with popular development boards like Arduino, STM32, Raspberry Pi, and ESP32, without extra buffer stages.

Output side (load driver):

  • Each channel can sink up to 500 mA, with a total package dissipation of around 2.5 W.
  • Multiple channels can be paralleled for higher current loads.
  • Capable of switching voltages up to 50V, making it suitable for relays, DC motors, solenoids, and lamp arrays.

In simple terms: the ULN2003 acts as a bridge between low-power logic circuits and high-power devices, allowing tiny signals from a microcontroller to safely control much larger loads.

ULN2003 Stepper Motor Driver

One of the most popular applications of the ULN2003 driver board is in stepper motor control, especially 28BYJ-48 5V stepper motors.

ULN2003 Stepper Motor Sequence

Q: What is the ULN2003 sequence for driving a stepper motor?
The driver board provides four inputs (IN1–IN4) connected to the ULN2003 channels. These inputs energize the motor coils in a defined sequence.

Example sequence (half-step mode for 28BYJ-48):

StepIN1IN2IN3IN4
11000
21100
30100
40110
50010
60011
70001
81001

Wiring ULN2003 with Arduino

Q: How to connect ULN2003 to Arduino for stepper motor driving?

  1. Connect Arduino digital pins D8–D11 → ULN2003 IN1–IN4
  2. Connect motor 28BYJ-48 → ULN2003 outputs
  3. Power supply (5V) to motor, ground shared with Arduino
wiring uln2003 with arduino

Arduino example code:

#include <Stepper.h>

const int stepsPerRevolution = 2048;  
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);

void setup() {
  myStepper.setSpeed(10); // RPM
}

void loop() {
  myStepper.step(stepsPerRevolution);
  delay(1000);
  myStepper.step(-stepsPerRevolution);
  delay(1000);
}

Applications of ULN2003

The ULN2003 is popular because it offers a simple way to connect low-power digital circuits to higher-power loads. Its seven Darlington transistor channels and built-in diodes make it versatile across consumer electronics, industrial automation, and educational robotics. Below are the most common applications:

ULN2003 applications

Relay Driving

One of the most frequent uses of ULN2003 is to control electromechanical relays.

  • Relays typically require coil currents higher than what a microcontroller I/O pin can supply.
  • ULN2003 acts as a current sink: when the input is HIGH, the transistor pair activates the relay coil.
  • Built-in clamp diodes absorb back EMF from the coil, preventing damage to both the IC and the microcontroller.

Practical examples:

Industrial control panels where multiple relays need to be triggered by a PLC.
Home automation systems (switching lights, fans, or pumps).

LED and Lamp Driving

The ULN2003 can control large LED arrays, indicator lamps, or seven-segment displays.

  • Acts as a low-side driver: sinking current for multiple LEDs simultaneously.
  • Suitable for applications where LEDs require more current than MCU pins can provide.
  • Can be paralleled for higher currents (e.g., signage or status indicators).

Example use cases:

  • Elevator indicator panels.
  • LED scoreboards or industrial machine status lights.
  • Driving multiple 12V lamps in automotive dashboards.

DC Motor Control

Although not as efficient as MOSFET drivers, ULN2003 can be used to power small DC motors.

  • Ideal for robotics projects, toys, and educational platforms.
  • Provides enough current for low-power motors, typically under 500 mA/channel.
  • For higher current or bidirectional control, alternatives like L293D or MOSFET drivers are preferred.

Example projects:

Conveyor belt mechanisms in small production lines.
Simple robot cars.

Stepper Motor Driving

ULN2003 is widely paired with 28BYJ-48 stepper motors, especially in Arduino and robotics kits.

  • The IC simplifies coil sequencing with four inputs directly mapped to the motor’s phases.
  • Supports half-step and full-step driving modes.
  • Provides reliable torque at low cost.

Applications:

  • Camera gimbal systems.
  • Automated blinds or curtain controllers.
  • 3D printer feeder mechanisms.

Industrial Applications

The ULN2003 has been used in industry for decades because of its durability and ease of integration:

  • Printer head drivers: Controls solenoids or stepper motors in dot-matrix and thermal printers.
  • Line drivers in telecommunications: Switches multiple line circuits with a single IC.
  • Power supply switching: Enables on/off control of secondary circuits in power electronics.
  • PLC output modules: Commonly found in industrial automation where PLC logic outputs need to switch relays or actuators.

Educational and Prototyping Kits

Because of its low cost, DIP-16 packaging, and compatibility with Arduino boards, ULN2003 is a staple in:

  • Robotics starter kits.
  • DIY hobby electronics projects.
  • STEM educational kits for students learning about motors, relays, and digital logic.

The ULN2003 is not just a relay driver IC—it’s a multi-purpose bridge between logic circuits and real-world loads, making it a go-to choice for prototyping, consumer devices, and industrial systems.

Example ULN2003 Circuits

The ULN2003 can be easily integrated into real-world designs with Arduino, PIC microcontrollers, or even a computer’s parallel port. Below are three common example circuits that demonstrate its versatility:

1. ULN2003 Pinout: Arduino DC Stepper Motor Driver Circuit

This circuit shows how an Arduino Uno can control a 28BYJ-48 stepper motor using the ULN2003 as the driver.

  • Connections:
    • Arduino digital pins D8–D11 → ULN2003 inputs IN1–IN4.
    • ULN2003 outputs OUT1–OUT4 → motor coil terminals.
    • COM pin → +5 V (motor supply), GND shared between Arduino and ULN2003.
  • Operation: Arduino outputs a step sequence that the ULN2003 sinks through the coils, allowing precise control of motor position.
  • Applications: Robotics arms, automated blinds, CNC feeders, and low-cost positioning systems.
arduino uln2003 stepper wiring diagram

2. ULN2003 Pinout: PIC Microcontroller 5-Relay Driver Circuit

The second example highlights how a PIC microcontroller can control multiple 12V relays using a single ULN2003 IC.

  • Connections:
    • PIC MCU I/O pins → ULN2003 inputs (IN1–IN5).
    • Relay coils → ULN2003 outputs (OUT1–OUT5).
    • Relay common terminals → +12 V, ULN2003 sinks current to GND.
    • COM pin → +12 V to handle inductive kickback.
  • Operation: When the PIC sets an input high, the corresponding relay energizes, allowing the MCU to safely control high-voltage AC devices like lamps, fans, or pumps.
  • Applications: Home automation, industrial control panels, PLC-like relay output boards.
ulln2003 pic microcontorller relay driver schematic

3. ULN2003 Pinout: Stepper Motor Driver Using a Parallel Port

This classic circuit demonstrates how to use a PC parallel port (DB25 connector) to drive a unipolar stepper motor via the ULN2003.

  • Connections:
    • Parallel port data pins (D0–D3) → ULN2003 inputs IN1–IN4.
    • ULN2003 outputs → stepper motor coils.
    • COM pin → motor supply +V (5 V or 12 V).
    • GND → PC ground.
  • Operation: Software running on the computer sends bit patterns through the parallel port, which the ULN2003 translates into coil activations, rotating the motor.
  • Applications: Old-school CNC machines, DIY 3D printers (early builds), and educational experiments in digital control.
  • Note: While modern systems use USB-based controllers, this remains a simple, low-cost demonstration of ULN2003 stepper driving principles.
parallel port uln2003 stepper motor wiring diagram

Key Takeaway:

  • With Arduino, ULN2003 is perfect for small stepper motors.
  • With PIC or other MCUs, it excels as a multi-relay driver.
  • With parallel ports or simple digital interfaces, it offers a low-cost solution for stepper motor control.

ULN2003 vs Alternatives

When designing driver circuits, engineers often compare the ULN2003 with other popular solutions like the L293D H-Bridge and discrete MOSFET drivers. Each option has its strengths depending on the type of load, voltage/current requirements, and system complexity.

ULN2003 vs L293D, which should you choose?

The L293D is a dual-channel H-bridge driver commonly used for bidirectional control of DC motors and stepper motors. In contrast, the ULN2003 is a 7-channel Darlington transistor array optimized for sinking current and driving multiple outputs.

FeatureULN2003L293D (H-Bridge)
Channels7 independent channels2 full H-bridges (or 4 half)
Max current500 mA per channel (sink only)600 mA per channel
Output typeSink only (cannot source)Bidirectional (forward/reverse)
Operating VoltageUp to 50 V loads4.5 V – 36 V supply range
Internal DiodesIntegrated clamp diodesInternal diodes for back-EMF
Typical ApplicationRelays, lamps, stepper motor (28BYJ-48)DC motors, stepper motors needing bidirectional control

Decision Guide:

  • Choose ULN2003 if you need to control many small loads (relays, LEDs, solenoids, or unidirectional stepper motor coils).
  • Choose L293D if you need bidirectional control (e.g., forward and reverse movement of DC motors).

ULN2003 vs MOSFET Driver

MOSFETs are the go-to choice when efficiency and current handling are critical. Unlike the Darlington transistors inside the ULN2003, MOSFETs have a much lower voltage drop (Rds(on)), which reduces power loss and heat generation.

Advantages of MOSFET drivers:

  • High efficiency: Minimal voltage drop, ideal for battery-powered or energy-sensitive systems.
  • High current capability: Can easily handle tens of amps, far beyond ULN2003’s 500 mA limit.
  • Fast switching: Suitable for high-frequency applications such as PWM control.

Disadvantages compared to ULN2003:

  • Complexity: Often requires gate drivers for proper operation.
  • Cost and board space: External MOSFETs and supporting circuitry increase BOM cost and PCB size.
  • Not “all-in-one”: Unlike ULN2003, MOSFETs usually don’t come with built-in protection diodes, so designers must add external components.

Decision Guide:

Use MOSFET drivers for high-current or high-efficiency designs (e.g., large DC motors, power inverters, high-speed PWM).

Key Takeaway:

  • ULN2003 = Best for simplicity, multiple channels, low-cost small load control.
  • L293D = Best for bidirectional motor control.
  • MOSFET driver = Best for high-power, high-efficiency applications.

Practical Examples & Code

Raspberry Pi Python Example

import RPi.GPIO as GPIO
import time

pins = [17, 18, 27, 22]
GPIO.setmode(GPIO.BCM)
for p in pins: GPIO.setup(p, GPIO.OUT)

seq = [
  [1,0,0,0],
  [1,1,0,0],
  [0,1,0,0],
  [0,1,1,0],
  [0,0,1,0],
  [0,0,1,1],
  [0,0,0,1],
  [1,0,0,1]
]

while True:
    for step in seq:
        for pin, val in zip(pins, step):
            GPIO.output(pin, val)
        time.sleep(0.01)

Choosing ULN2003 and Alternatives

When to Choose ULN2003

The ULN2003 is ideal when your project requires:

  • Low-cost driver solutions: It is inexpensive and widely available.
  • Multiple outputs: Seven channels make it perfect for controlling several relays, LEDs, or solenoids at once.
  • Simple interfacing: Directly works with microcontrollers (Arduino, STM32, Raspberry Pi) without the need for additional transistors or buffer circuits.
  • Medium current loads: Each channel supports up to 500 mA, sufficient for hobby motors, small stepper motors, relays, and lamps.

👉 Best for educational projects, robotics kits, hobby electronics, and low-to-medium power automation systems.

Alternatives to ULN2003

While ULN2003 is versatile, other ICs and solutions may be better suited depending on the design requirements. Although the ULN2003 is one of the most widely used Darlington transistor array ICs, there are several equivalents and alternatives depending on the application requirements. These ULN2003 Equivalent ICs can be chosen based on input logic levels, channel count, current capability, or motor control features.

  1. ULN2004
    • Almost identical to ULN2003 but optimized for higher input voltage logic (up to 15V).
    • Useful when interfacing with industrial PLCs or 12V logic systems instead of 5V microcontrollers.
    • Pin-compatible with ULN2003 but supports higher input voltages up to 15V.
    • Preferred in cases where the controller operates on 12V logic signals instead of 5V.
    • Common in PLC interfaces, automotive electronics, and 12V relay driving applications.
  2. TD62003 Series (Toshiba)
    • A pin-compatible alternative with similar Darlington arrays.
    • Offers slightly better electrical performance and sometimes lower power dissipation.
  3. MOSFET Driver ICs
    • Best for high-current loads (several amps).
    • Higher efficiency than Darlington arrays because of lower voltage drop (Rds(on)).
    • Suitable for motor drivers, battery-powered devices, and high-frequency switching applications.
  4. L293D / L298N (H-Bridge Drivers)
    • If bidirectional control is required for DC motors, H-bridge drivers are more suitable than ULN2003.
    • Common in robotics and automotive electronics.
    • A dual-channel H-Bridge motor driver IC.
    • Unlike ULN2003 (which can only sink current), L293D provides bidirectional control for DC and stepper motors.
    • Built-in diodes for back-EMF protection.
    • Suitable for robotics and motor control projects requiring forward and reverse motor rotation.
  5. TPIC2701
    • A Texas Instruments device similar to the ULN2003.
    • Provides 8 open-collector drivers instead of 7.
    • Higher current capability per channel compared to ULN2003.
    • Suitable for industrial automation and automotive applications where additional channels are needed.
  6. ULN2002
    • Similar to ULN2003, but optimized for 14–25V input logic levels.
    • Designed to work with CMOS and PMOS logic families.
    • Typically used in telecommunications and industrial control systems that use higher voltage logic circuits.
  7. ULN2004
    • Pin-compatible with ULN2003 but supports higher input voltages up to 15V.
    • Preferred in cases where the controller operates on 12V logic signals instead of 5V.
    • Common in PLC interfaces, automotive electronics, and 12V relay driving applications.
  8. Motor Driver Shields (Arduino Shields)
    • Modern replacement in prototyping environments.
    • Integrate ICs like L293D, L298N, or even MOSFET drivers into a single plug-and-play module.
    • Provide convenient headers and power connectors for direct use with Arduino, ESP32, or Raspberry Pi.
    • Preferred by hobbyists and students for ease of use and reduced wiring complexity.

ULN2003 vs L293D vs MOSFET Drivers

FeatureULN2003L293D (H-Bridge)MOSFET Driver
Channels7 (independent)2 H-bridges (4 half)Varies
DirectionSink onlyBidirectionalN/A (depends on circuit)
Current~500 mA/ch (drop matters)~600 mA/chAmps (low loss)
EfficiencyMedium (Darlington drop)MediumHigh
Best forRelays/LEDs/steppers (28BYJ-48)DC motor FWD/REV, steppersHigh-current, PWM, battery-sensitive

Decision guide

  • Need many simple outputs (relays/LEDs/solenoids/28BYJ-48)? → ULN2003
  • Need forward/reverse DC motor control? → L293D/L298N
  • Need high current & efficiency (PWM, battery)? → MOSFET driver

Comparison Summary

IC / ModuleChannelsInput LogicOutput TypeTypical Application
ULN200375V logicSink onlyRelays, stepper motors, LEDs
TPIC270185V logicSink only (higher current)Industrial automation, automotive
ULN200175–15VSink onlyTTL-based control, legacy systems
ULN2002714–25VSink onlyCMOS/PMOS logic systems, telecom
ULN2004712–15VSink onlyAutomotive, PLC, 12V relay driving
L293D2 H-bridges5V logicBidirectional driveRobotics, DC/stepper motor control
Motor Driver ShieldVaries5V logicSink + BidirectionalArduino/Raspberry Pi motor projects

Key Takeaway:

  • Choose ULN2003 for low-cost, 5V-controlled multiple loads.
  • Choose ULN2004/ULN2001/ULN2002 if your logic voltage is higher than 5V.
  • Choose TPIC2701 if you need more channels and higher current.
  • Choose L293D or motor shields if you need bidirectional motor control instead of just sinking current.

Suppliers and Availability

The ULN2003 and its alternatives are manufactured by major semiconductor companies, ensuring long-term availability and second-source security.

  • Texas Instruments (TI): ULN2003A series, widely distributed.
  • STMicroelectronics: Reliable DIP/SOIC versions, popular in educational kits.
  • ON Semiconductor (onsemi): Equivalent Darlington arrays with strong global supply.
  • Toshiba: TD62003 and similar devices as direct ULN2003 replacements.

In addition, many authorized distributors (Digi-Key, Mouser, RS Components, Farnell) and independent suppliers (LCSC, Jameco, MOZ Electronics) stock ULN2003 and its equivalents, making it easy for both prototyping and mass production sourcing.

Key Takeaway

  • Use ULN2003 when you want a simple, cost-effective driver IC for multiple small-to-medium loads.
  • Consider ULN2004 or TD62003 when input logic levels differ or if you prefer alternative vendors.
  • Choose MOSFET drivers for higher current efficiency.
  • Use H-bridge drivers (L293D/L298N) if motor direction control is required.

Conclusion

The ULN2003 remains one of the most practical ICs in electronics design. With its seven Darlington transistor channels, built-in flyback diodes, and simple logic interface, it offers a reliable solution for driving relays, motors, and other loads.

For students and engineers, mastering ULN2003 opens the door to understanding how microcontrollers interact with higher-power devices. Whether you’re building a stepper motor driver with Arduino, controlling relays, or experimenting with robotics, the ULN2003 is a must-have in your toolkit.

FAQ

Q1: Is ULN2003 a motor driver?
A: It’s a low-side driver array (Darlington). It can switch motor coils (like 28BYJ-48 steppers) but is not a bidirectional H-bridge.

Q2: Can I drive a DC motor both directions with ULN2003?
A: Not directly. Use L293D/L298N or an H-bridge MOSFET design.

Q3: Do I have to connect COM?
A: For inductive loads (relays/steppers/solenoids), yes—tie COM to +V load. For purely resistive loads, it’s optional.

Q4: What’s the max current per channel?
A: Typically up to ~500 mA. Consider total package dissipation; multiple heavy channels at once can overheat.

Q5: Why is my output not reaching 0 V?
A: Darlington VCE(sat) is significant (~1–1.6 V at higher currents). Ensure the load tolerates the residual drop.

Q6: Can I PWM through ULN2003?
A: Yes, for low–mid frequencies and moderate current. For high-efficiency PWM (e.g., large DC motors), use MOSFET drivers.

Q7: 3.3 V inputs okay?
A: Often yes (logic-level tolerant), but check your device variant and current requirements. If marginal, buffer with a transistor/driver.

Q8: Paralleling outputs to get more current?
A: Possible but not ideal; current may not share equally. Use MOSFETs for sustained higher current.

Q9: Which step sequence for 28BYJ-48?
A: Use the half-step 8-state table above for smoother motion.

Q10: ULN2003 vs ULN2004?
A: ULN2004 accepts higher input voltages (12–15 V logic). Pinout-compatible.

We will be happy to hear your thoughts

Leave a reply

MOZ Electronics
Logo
Shopping cart