The 28BYJ-48 (frequently searched by hobbyists as the 28bjy 48 stepper motor) is a 5V unipolar stepper motor with an integrated multi-stage gear reduction. Out of the box, it delivers roughly 34.3 mN·m (0.49 oz-in) of torque at the output shaft. It is the undisputed default for low-cost, low-speed, high-precision positioning in embedded IoT builds—think automated window blinds, camera sliders, and pet feeders. However, its cheap plastic gearbox and unipolar coil design introduce specific electrical and mechanical limits that will brick your project if ignored.

This guide cuts through the generic datasheets to give you bench-tested rules for sizing, wiring, and driving the 28BYJ-48 with microcontrollers like the Arduino Uno or ESP32.

Sizing the Load: Rules of Thumb and Worked Examples

Stepper motors do not behave like DC motors; their torque drops sharply as speed increases. The 28BYJ-48 is no exception. Its internal gear reduction is nominally 1/64, but the actual mathematical ratio is 1/63.684. This yields an output step angle of 0.08789°, meaning it takes exactly 4096 steps to complete one full revolution in half-step mode.

Bench Rule of Thumb: Never exceed 15 RPM for reliable holding torque, and keep the continuous radial load under 50g at a 10mm lever arm. Always design your mechanical linkage to operate at 50% of the motor's rated peak torque to account for friction and startup inertia.

Worked Load Example: Automated Pet Feeder

Let's say you are building an automated pet feeder that dispenses 200g of kibble using a 3D-printed auger. We need to determine if the 28BYJ-48 can turn the auger without stalling.

  • Load Mass: 200g (0.2 kg)
  • Force (Gravity): 0.2 kg × 9.8 m/s² = 1.96 N
  • Auger Radius: 20mm (0.02 m)
  • Required Torque: Force × Distance = 1.96 N × 0.02 m = 0.0392 N·m (39.2 mN·m)

Verdict: The 28BYJ-48 peaks around 34.3 mN·m. At a 20mm radius, the required 39.2 mN·m exceeds the motor's capacity. It will stall and hum. If you redesign the auger to have a 10mm radius, the required torque drops to 19.6 mN·m. The motor now handles the load easily, sitting comfortably within our 50% safety margin.

Wiring, Terminals, and the ULN2003 Driver

Because the 28BYJ-48 is a unipolar stepper, it requires a specific driver topology to sequence the coils. You cannot wire it directly to microcontroller GPIO pins; the coils draw roughly 120mA each (240mA total when two are energized), which will instantly brownout an ESP32 or fry an Arduino Uno's ATmega328P I/O limits.

Terminal Identification

The motor terminates in a 5-pin JST connector. Here is the internal wiring breakdown:

Wire ColorFunctionInternal Connection
RedVCC / CommonCenter tap for both coil pairs
PinkCoil 1APhase A positive
OrangeCoil 2APhase B positive
YellowCoil 2BPhase B negative
BlueCoil 1BPhase A negative

The ULN2003 Darlington Array

The standard driver for this motor is the Texas Instruments ULN2003A Darlington transistor array. It handles the current sinking required to energize the coils sequentially.

Voltage Drop Gotcha: The ULN2003 uses Darlington pairs, which have a saturation voltage (Vce_sat) of roughly 0.9V to 1.1V. If you feed the driver 5V, the motor coils actually see about 4V. This reduces your theoretical torque by ~20%. For maximum torque, power the ULN2003 and the motor's red wire from a dedicated 5V/1A buck converter, not your microcontroller's 5V rail.

Motor Selection Matrix: 28BYJ-48 vs NEMA 17 vs SG90 Servo

A common mistake in embedded design is treating steppers and servos as interchangeable. They are not. Servos use closed-loop potentiometer feedback for absolute angular positioning, while steppers rely on open-loop step counting. Here is how the 28BYJ-48 stacks up against the alternatives for low-cost actuation.

Criteria28BYJ-48 StepperNEMA 17 StepperSG90 Micro Servo
Peak Torque~34.3 mN·m (Geared)~400 mN·m (Ungared)~18 mN·m (1.8 kg-cm)
Torque Curve ProfileHigh at low RPM, drops off sharply past 15 RPMFlat mid-range, drops at high RPMConstant across limited 180° sweep
Control NeedsULN2003 + continuous GPIO pulsingA4988/TMC2209 + Step/Dir pinsSingle PWM pin (50Hz signal)
Position FeedbackNone (Open-loop step counting)None (Open-loop)Internal potentiometer (Closed-loop)
Typical Cost (2026)$1.50 - $2.50 (with driver)$12.00 - $18.00 (with driver)$2.00 - $4.00

Which motor type fits this load profile? Choose the 28BYJ-48 when you need continuous 360° rotation with high holding torque at very low speeds (like a valve or slow conveyor). Choose the SG90 servo when you only need to sweep between 0° and 180° (like a robotic arm joint). Choose the NEMA 17 when your load exceeds 50 mN·m or requires high-speed movement (like a 3D printer axis).

Failure Signatures: Diagnosing Hum, Overheat, and Stall

When a 28BYJ-48 system fails on the bench, it rarely just 'stops working.' It gives you physical and electrical feedback. Here is how to read those failure signatures.

  • The Hum (Missed Steps): If the motor vibrates and hums but the shaft doesn't turn, you are either commanding a step rate higher than the motor's physical inertia can handle, or your power supply is sagging under the 240mA coil draw. Fix: Lower the RPM in your Arduino Stepper Library code and measure the VCC rail with a multimeter to ensure it isn't dipping below 4.5V.
  • Overheat: The ULN2003 driver IC will get hot to the touch during continuous operation. This is normal for Darlington arrays dissipating power. However, if the motor casing exceeds 50°C, you are likely driving it with a 12V supply while it is rated for 5V, or you are leaving the coils energized (holding torque) indefinitely without a sleep state in your code.
  • Stall and Grind (Mechanical Failure): The 28BYJ-48 uses a multi-stage plastic gear train. If you physically block the output shaft while the motor is energized, the internal plastic teeth will strip. Once stripped, the motor will spin internally but the output shaft will remain stationary. Fix: Implement a software timeout. If the motor is commanded to move but an external limit switch or encoder doesn't register movement within 2 seconds, cut power to the coils immediately.

Frequently Asked Questions

Can I run a 28bjy 48 stepper motor on 12V?

Only if you specifically bought the 12V variant. The standard blue 28BYJ-48 is a 5V motor. Applying 12V to the 5V version will cause the coils to draw excessive current, rapidly overheating the motor, melting the internal plastic gear lubricant, and likely destroying your ULN2003 driver board. Always check the sticker on the side of the motor casing for the rated voltage before wiring it to your bench supply.

Why is my 28BYJ-48 stepper motor humming but not moving?

Humming without rotation usually points to one of three issues: 1) Your step delay in code is too short (you are asking it to spin faster than its geared inertia allows). Try increasing the delay between steps to at least 2ms. 2) The sequence is wrong. Ensure you are using the correct 8-step half-wave sequence (IN1-IN4). 3) The power supply cannot deliver the required 240mA peak current, causing a brownout that resets the driver logic.

How to convert 28BYJ-48 unipolar to bipolar for A4988?

You can convert the 28BYJ-48 from unipolar to bipolar to use modern chopper drivers like the A4988 or TMC2209, which will significantly increase your available torque. To do this, open the motor's rear plastic cap, locate the PCB where the wires terminate, and use a hobby knife to carefully cut the copper trace connecting the red wire (center tap) to the coil windings. Once the center tap is isolated, treat the Pink/Orange pair as Coil A, and the Yellow/Blue pair as Coil B. Ignore the red wire entirely.