

The ULN2003 is a high-voltage, high-current Darlington transistor array. It consists of seven NPN Darlington pairs, each capable of driving high-current loads. This component is widely used for interfacing low-power digital circuits, such as microcontrollers, with high-power devices like relays, stepper motors, lamps, and solenoids. Its built-in flyback diodes make it particularly suitable for inductive loads, ensuring safe operation and protecting the circuit from voltage spikes.








The ULN2003 is designed to handle high voltages and currents while providing ease of use in various applications. Below are its key technical details:
| Parameter | Value |
|---|---|
| Supply Voltage (VCE) | Up to 50V |
| Output Current (per pin) | 500mA (maximum) |
| Total Current (all pins) | 2.5A (maximum) |
| Input Voltage (VIH) | 2.4V (minimum for HIGH state) |
| Output Saturation Voltage | 1.6V (at 350mA output current) |
| Flyback Diodes | Built-in for inductive loads |
| Package Type | DIP-16, SOIC-16 |
| Operating Temperature | -20°C to +85°C |
The ULN2003 has 16 pins, as described in the table below:
| Pin Number | Name | Description |
|---|---|---|
| 1-7 | Input 1-7 | Inputs for controlling the corresponding outputs (active HIGH) |
| 8 | GND | Ground connection |
| 9-15 | Output 1-7 | Outputs for driving loads (active LOW) |
| 16 | COM (Common) | Common cathode for flyback diodes; connect to the positive supply of loads |
The ULN2003 is straightforward to use in circuits. Below are the steps and considerations for proper usage:
The ULN2003 is commonly used to drive stepper motors. Below is an example of how to control a 28BYJ-48 stepper motor using an Arduino UNO and the ULN2003.
// Include the Stepper library
#include <Stepper.h>
// Define the number of steps per revolution for the stepper motor
#define STEPS_PER_REV 2048
// Initialize the Stepper library with the ULN2003 pins
Stepper stepper(STEPS_PER_REV, 8, 10, 9, 11);
void setup() {
// Set the speed of the stepper motor (in RPM)
stepper.setSpeed(15);
}
void loop() {
// Rotate the motor one full revolution clockwise
stepper.step(STEPS_PER_REV);
delay(1000); // Wait for 1 second
// Rotate the motor one full revolution counterclockwise
stepper.step(-STEPS_PER_REV);
delay(1000); // Wait for 1 second
}
Problem: The load is not turning on.
Problem: The ULN2003 is overheating.
Problem: Voltage spikes are damaging the circuit.
Problem: The stepper motor is not rotating correctly.
Can the ULN2003 drive a DC motor? Yes, the ULN2003 can drive small DC motors, but ensure the motor's current and voltage are within the ULN2003's limits.
Do I need external diodes for inductive loads? No, the ULN2003 has built-in flyback diodes for this purpose.
What is the maximum input voltage for the ULN2003? The input voltage should not exceed the logic HIGH threshold, typically 5V for most microcontrollers.
By following this documentation, you can effectively use the ULN2003 in your projects to control high-power devices with ease and reliability.