Aziz Bench

2N3904 as a switch with Arduino and ESP32

A small-signal NPN: its saturation voltage is guaranteed only up to 50 mA, so it suits relay coils, buzzers and level shifting rather than motors.

Transistor
2N3904
NPN · TO-92 · onsemi
Max voltage
40 V
Max current
200 mA
VCE(sat)
0.2 V at 10 mA
TO-92 pinout
1E2B3C

From a 3.3 V or 5 V pin

PinVerdictWhyIn free air
ESP32 · 3.3 VWorks150 Ω on the base: up to 50 mA of load at a gain of 1050 mA (saturation data)
Arduino Uno · 5 VWorks220 Ω on the base: up to 50 mA of load at a gain of 1050 mA (saturation data)

In free air at 25 °C, with the junction 25 °C below its 150 °C maximum and θJA 200 °C/W, from a 20 mA pin at the datasheet’s forced gain, and no further than the highest current with a guaranteed saturation voltage.

Specifications

TypeNPN
PackageTO-92
Maximum voltage40 V
Maximum current200 mA
Minimum gain hFE60 at 50 mA · 30 at 100 mA
VCE(sat), maximum0.2 V at 10 mA (IC = 10 × IB) · 0.3 V at 50 mA (IC = 10 × IB)
VBE(sat), maximum0.85 V at 10 mA (IC = 10 × IB) · 0.95 V at 50 mA (IC = 10 × IB)
Thermal resistanceθJA 200 °C/W
Maximum junction temperature150 °C
Datasheet usedonsemi

Pinout

PinFunction
1Emitter
2Base
3Collector

Flat face toward you, leads down: pin 1 is on the left.

Similar parts

PartPackageVCE(sat), guaranteedMax voltageMax current
2N3904TO-920.3 V at 50 mA (IC = 10 × IB)40 V200 mA
2N2222ATO-921 V at 500 mA (IC = 10 × IB)40 V600 mA
BC547TO-920.6 V at 100 mA (IC = 20 × IB)45 V100 mA
S8050SOT-230.6 V at 500 mA (IC = 10 × IB)25 V500 mA
TIP120TO-2204 V at 5 A (IC = 250 × IB)60 V5 A

Tips

The base resistor is sized for IC = 10 × IB, the condition of the datasheet’s saturation voltage. A higher gain from the hFE column would leave the transistor half on and hot.

Every coil needs a flyback diode across it, cathode to the positive supply. Without it the voltage spike at turn-off can destroy the transistor at the first switching.

Open the calculator →Check the 2N3904 with your own load, supply, PWM frequency and temperature.

Other transistors

Frequently asked questions

Does the 2N3904 work with a 3.3 V ESP32?

Yes, with a base resistor: at the gain of 10 the datasheet uses for saturation, a 20 mA pin drives the 2N3904 up to 50 mA of load. For more current use a logic-level MOSFET.

How much current can the 2N3904 switch without a heatsink?

About 50 mA from a 5 V Arduino pin, in free air at 25 °C, keeping the junction 25 °C below its 150 °C maximum (limit: saturation data).

What is the 2N3904 pinout?

TO-92: 1 emitter, 2 base, 3 collector. Flat face toward you, leads down: pin 1 is on the left.

Source of the figures: onsemi datasheet (PDF)