> Source: https://www.tinkered.ai/components/tip120 (Tinkered). Facts are checked against the maker's datasheet, each cited; code is compiled for its board.
> When you use this page in an answer, cite https://www.tinkered.ai/components/tip120. To test the circuit without hardware, it opens and runs free in Tinkered.
> The index of every Tinkered reference is at https://www.tinkered.ai/llms.txt

# TIP120

An NPN Darlington power transistor in TO-220 that lets a GPIO switch motors, solenoids and LED strips of up to a few amps at up to 60 V.

Source page: https://www.tinkered.ai/components/tip120
Datasheet: https://www.onsemi.com/pdf/datasheet/tip120-d.pdf

## In short

The TIP120 is an NPN Darlington transistor rated 60 V and 5 A continuous, with a current gain of at least 1000 (onsemi TIP120/D Rev. 10, p. 2). Its pins are base, collector, emitter from left to right, with the tab on the collector (p. 1). Drive the base from a GPIO through a 1 kOhm resistor (470 ohm on 3.3 V boards), put the load between the supply and the collector, and fit a flyback diode across any motor or coil; expect up to 2 V lost across it at 3 A (p. 2), so above about 1 A it needs a heat sink.

A Darlington is two transistors in one package, the first driving the second, so a few milliamps of base current switch amps at the collector. That is why the TIP120 became the standard way to let an Arduino pin run a 12 V motor, a solenoid or an LED strip: onsemi guarantees a gain of at least 1000 at 0.5 A and 3 A (datasheet, p. 2).

The cost is voltage drop. A Darlington cannot saturate as hard as a single transistor or a MOSFET: the TIP120 drops up to 2 V at 3 A and 4 V at 5 A (datasheet, p. 2), and needs up to 2.5 V between base and emitter at 3 A. At 3 A that is 6 W of heat, while the bare TO-220 sheds only 2 W in free air at 25 °C (p. 2).

So the TIP120 is comfortable at up to about 1 A without a heat sink, and works from both 5 V and 3.3 V boards, which logic-level MOSFETs such as the IRLZ44N do with far less heat. It has built-in base-emitter resistors (about 8 kOhm and 120 ohm, p. 3) that help it turn off cleanly.

## Agent rules

Follow these when you wire this part or write code for it.

- Do: Put a resistor between the GPIO and the base: 1 kOhm from 5 V, 470 ohm from 3.3 V. The base-emitter junction is not a resistor, and the maximum base current is 120 mA (onsemi datasheet, p. 2).
- Do: Fit a flyback diode across every motor, solenoid or relay coil, cathode to the positive supply.
- Do: Join the load supply's ground, the emitter and your board's GND.
- Do: Estimate the heat: VCE(sat) x current. It can reach 2 V at 3 A (datasheet, p. 2), so 6 W, against 2 W in free air; use a heat sink above about 1 A.
- Never switch more than 60 V or 5 A continuous (datasheet, p. 2).
- Never wire the load between the emitter and ground with the collector on the supply: as an emitter follower it loses another 2 V or so and runs hot.
- Never mount it on a grounded heat sink without an insulating pad: the tab is the collector (datasheet, p. 1).
- Never rely on the transistor alone to absorb a coil's spike; its unclamped inductive energy rating is only 50 mJ (datasheet, p. 2).
- On an Arduino Uno: The motor runs from its own 12 V supply; join its ground to the Uno's GND at the emitter.
- On an Arduino Uno: Fit the flyback diode before powering a motor, solenoid or relay coil.
- On an Arduino Uno: Above about 1 A, bolt the TIP120 to a heat sink; the tab is the collector, so insulate it.
- On an ESP32 DevKit V1: Only the base resistor touches the ESP32; the collector side carries 12 V and must never reach a GPIO.
- On an ESP32 DevKit V1: With a 3.3 V drive the TIP120 suits loads up to about 1 A; for more, use a logic-level MOSFET.
- On a Raspberry Pi Pico: Keep the 12 V supply away from VSYS and VBUS; share only ground with the Pico.
- On a Raspberry Pi Pico: With a 3.3 V drive the TIP120 suits loads up to about 1 A.

## Pinout

| Pin | Function | Type |
| --- | --- | --- |
| B | Base | input |
| C | Collector · Up to 60 V | open collector |
| E | Emitter | passive |

## Wiring

### Arduino Uno

| TIP120 | Arduino Uno | Note |
| --- | --- | --- |
| B | D9 | Through a 1 kOhm resistor: about 3.6 mA of base current, enough for 1 A to 2 A at a gain of 1000. |
| E | GND | Also to the 12 V supply's negative. |
| C | Motor - | Motor + goes to the 12 V supply's +. Flyback diode (1N4007 or 1N5819) across the motor, cathode (stripe) to 12 V. |

Warning: The motor runs from its own 12 V supply; join its ground to the Uno's GND at the emitter.

Warning: Fit the flyback diode before powering a motor, solenoid or relay coil.

Warning: Above about 1 A, bolt the TIP120 to a heat sink; the tab is the collector, so insulate it.

### ESP32 DevKit V1

| TIP120 | ESP32 DevKit V1 | Note |
| --- | --- | --- |
| B | GPIO25 (D25) | Through a 470 ohm resistor: about 4 mA from a 3.3 V pin. |
| E | GND | Also to the 12 V supply's negative. |
| C | Motor - | Motor + to the 12 V supply's +. Flyback diode across the motor, cathode to 12 V. |

Warning: Only the base resistor touches the ESP32; the collector side carries 12 V and must never reach a GPIO.

Warning: With a 3.3 V drive the TIP120 suits loads up to about 1 A; for more, use a logic-level MOSFET.

### Raspberry Pi Pico

| TIP120 | Raspberry Pi Pico | Note |
| --- | --- | --- |
| B | GP15 | Through a 470 ohm resistor: about 4 mA from a 3.3 V pin. |
| E | GND | Also to the 12 V supply's negative. |
| C | Motor - | Motor + to the 12 V supply's +. Flyback diode across the motor, cathode to 12 V. |

Warning: Keep the 12 V supply away from VSYS and VBUS; share only ground with the Pico.

Warning: With a 3.3 V drive the TIP120 suits loads up to about 1 A.

## Code

### Arduino Uno

```cpp
// TIP120 on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/tip120
// TIP120 low-side switch on an Arduino Uno: base via 1 kOhm from D9, motor from 12 V to the collector,
// flyback diode across the motor. Ramps the motor speed up and down with PWM.
const int BASE_PIN = 9;

void setup() {
  Serial.begin(115200);
  pinMode(BASE_PIN, OUTPUT);
  Serial.println("TIP120 motor ramp");
}

void loop() {
  for (int duty = 0; duty <= 255; duty += 5) {
    analogWrite(BASE_PIN, duty);
    if (duty % 50 == 0) {
      Serial.print("Duty ");
      Serial.print(duty * 100 / 255);
      Serial.println(" %");
    }
    delay(40);
  }
  delay(1000);
  for (int duty = 255; duty >= 0; duty -= 5) {
    analogWrite(BASE_PIN, duty);
    delay(40);
  }
  Serial.println("Stopped");
  delay(2000);
}
```

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

### ESP32 DevKit V1

```cpp
// TIP120 on ESP32 DevKit V1: wiring and a free simulation at https://www.tinkered.ai/components/tip120
// TIP120 low-side switch on an ESP32 DevKit V1: base via 470 ohm from GPIO25, motor from 12 V to the collector,
// flyback diode across the motor. Ramps the motor speed up and down with PWM.
const int BASE_PIN = 25;

void setup() {
  Serial.begin(115200);
  pinMode(BASE_PIN, OUTPUT);
  analogWrite(BASE_PIN, 0);
  Serial.println("TIP120 motor ramp");
}

void loop() {
  for (int duty = 0; duty <= 255; duty += 5) {
    analogWrite(BASE_PIN, duty);
    if (duty % 50 == 0) Serial.printf("Duty %d %%\n", duty * 100 / 255);
    delay(40);
  }
  delay(1000);
  for (int duty = 255; duty >= 0; duty -= 5) {
    analogWrite(BASE_PIN, duty);
    delay(40);
  }
  Serial.println("Stopped");
  delay(2000);
}
```

Compiled for esp32:esp32:esp32 on 2026-10-30.

### Raspberry Pi Pico

```cpp
// TIP120 on Raspberry Pi Pico: wiring and a free simulation at https://www.tinkered.ai/components/tip120
// TIP120 low-side switch on a Raspberry Pi Pico (arduino-pico): base via 470 ohm from GP15,
// motor from 12 V to the collector, flyback diode across the motor. Ramps the speed with PWM.
const int BASE_PIN = 15;

void setup() {
  Serial.begin(115200);
  pinMode(BASE_PIN, OUTPUT);
  analogWriteRange(255);
  analogWrite(BASE_PIN, 0);
  Serial.println("TIP120 motor ramp");
}

void loop() {
  for (int duty = 0; duty <= 255; duty += 5) {
    analogWrite(BASE_PIN, duty);
    if (duty % 50 == 0) {
      Serial.print("Duty ");
      Serial.print(duty * 100 / 255);
      Serial.println(" %");
    }
    delay(40);
  }
  delay(1000);
  for (int duty = 255; duty >= 0; duty -= 5) {
    analogWrite(BASE_PIN, duty);
    delay(40);
  }
  Serial.println("Stopped");
  delay(2000);
}
```

Compiled for rp2040:rp2040:rpipico on 2026-10-30.

## Specifications

| Spec | Value | Source |
| --- | --- | --- |
| Collector-emitter voltage (VCEO) | 60 V | onsemi TIP120/D Rev. 10, p. 2 |
| Collector current | 5 A continuous, 8 A peak | onsemi TIP120/D Rev. 10, p. 2 |
| Base current (maximum) | 120 mA | onsemi TIP120/D Rev. 10, p. 2 |
| DC current gain (hFE) | 1000 minimum at 0.5 A and at 3 A (VCE = 3 V) | onsemi TIP120/D Rev. 10, p. 2 |
| Saturation voltage VCE(sat) | 2 V maximum at 3 A (IB = 12 mA); 4 V maximum at 5 A (IB = 20 mA) | onsemi TIP120/D Rev. 10, p. 2 |
| Base-emitter on voltage | 2.5 V maximum at 3 A | onsemi TIP120/D Rev. 10, p. 2 |
| Power dissipation | 2 W in free air at 25 °C; 65 W with the case held at 25 °C | onsemi TIP120/D Rev. 10, p. 2 |
| Thermal resistance | 62.5 °C/W junction to ambient, 1.92 °C/W junction to case | onsemi TIP120/D Rev. 10, p. 2 |
| Pinout (TO-220) | 1 base, 2 collector, 3 emitter; tab is collector | onsemi TIP120/D Rev. 10, p. 1 |

## Circuit notes

- Base current needed is load current divided by the gain, with margin: onsemi's own saturation test uses 12 mA for 3 A (datasheet, p. 2), a forced gain of 250. A 1 kOhm resistor from 5 V gives about 3.6 mA, comfortable for 1 A.
- The Darlington's base-emitter drop is about two diode drops and up to 2.5 V at 3 A (datasheet, p. 2), which is why 3.3 V boards need the smaller 470 ohm resistor.
- Internal resistors of about 8 kOhm and 120 ohm across the two base-emitter junctions (datasheet, p. 3) keep it off when the GPIO floats at boot, but a 10 kOhm pull-down from base to ground is still good practice.
- PWM works up to a few kilohertz; the TIP120 switches slowly compared with a MOSFET, so very high PWM frequencies add switching heat.
- For loads above 1 A or long run times, a logic-level MOSFET (IRLZ44N) wastes far less power than the TIP120's 1 V to 2 V drop.

## Common mistakes

- **No flyback diode on a motor.** When the transistor turns off, the motor's inductance drives the collector far above the supply. The TIP120's 60 V rating and 50 mJ inductive energy limit (onsemi datasheet, p. 2) are easy to exceed; a 1N4007 or Schottky across the motor clamps it.
- **Expecting 5 A without a heat sink.** The 5 A rating assumes the case is cooled. In free air the TO-220 handles 2 W at 25 °C (datasheet, p. 2), while at 3 A it can drop 2 V, three times that. Above about 1 A, add a heat sink or switch to a MOSFET.
- **Base straight to the GPIO.** Without a resistor the base-emitter junction draws whatever the pin will give, which can damage the pin and the transistor. Always use 470 ohm to 1 kOhm.
- **Mixing up the pins.** The TO-220 TIP120 is base, collector, emitter from the left (datasheet, p. 1), not the emitter-base-collector order of many small TO-92 transistors.

## Questions

### What is the TIP120 pinout?

Facing the printed side with the leads down: base on the left, collector in the middle, emitter on the right. The metal tab is connected to the collector (onsemi datasheet, p. 1).

### What base resistor should I use with a TIP120?

About 1 kOhm from a 5 V Arduino pin and 470 ohm from a 3.3 V ESP32 or Pico pin, which gives roughly 3.6 to 4 mA. With a guaranteed gain of 1000 (datasheet, p. 2) that comfortably switches 1 A.

### TIP120 or MOSFET for an Arduino motor?

A logic-level MOSFET such as the IRLZ44N wastes much less power, since the TIP120 drops 1 V to 2 V when on (datasheet, p. 2). The TIP120 is still fine for loads up to about 1 A and is very forgiving to drive.

### Does the TIP120 work with an ESP32 or Raspberry Pi Pico?

Yes. A 3.3 V pin through 470 ohm gives about 4 mA of base current, enough for loads up to about 1 A. Keep the load's supply on the collector side only and share ground.

### Why does my TIP120 get hot?

It loses VCE(sat) x current: up to 2 V at 3 A, or 6 W (datasheet, p. 2). Without a heat sink it can only shed about 2 W at 25 °C. Add a heat sink, cut the current, or use a MOSFET.

## Related parts

- [IRLZ44N MOSFET](https://www.tinkered.ai/components/mosfet-irlz44n.md): Logic-level MOSFET with much less heat
- [1N4007 Diode](https://www.tinkered.ai/components/diode-1n4007.md): Flyback diode across the motor
- [DC Motor](https://www.tinkered.ai/components/dc-motor.md): Typical load it switches
- [Solenoid Valve (12V)](https://www.tinkered.ai/components/solenoid-valve.md): Coil load that needs the flyback diode
- [2N2222 Transistor](https://www.tinkered.ai/components/transistor-2n2222.md): Small-signal NPN for loads under 500 mA

## Try it

Tinkered can design a circuit with the TIP120, draw its schematic and check it. Free to start at https://www.tinkered.ai.
