The 28BYJ-48 is a 5V unipolar stepper motor with an internal gear reduction (nominally 1:64, but practically 1:63.68), delivering roughly 0.3 N·m (3 kg·cm) of usable dynamic output torque at low speeds. It demands a ULN2003 Darlington transistor driver and is strictly suited for high-torque, low-speed, low-precision hobby loads like automated blinds, camera sliders, and pet feeders. If you need high RPM, closed-loop positional accuracy, or heavy industrial lifting, this is the wrong component.

The 28BYJ-48 Stepper Motor: Load Profiles and Application Fit

When selecting a motor for an embedded project, matching the load profile to the motor's torque curve is where most hobbyist builds fail. The 28BYJ-48 excels at moving moderate loads very slowly. Because of its internal plastic gear train, it multiplies the bare motor's torque but sacrifices top speed and backlash precision.

Bench Insight: The ULN2003 Voltage Drop
The standard ULN2003 driver uses Darlington transistor pairs, which have a high saturation voltage (VCE(sat)). At the motor's typical 200mA coil current, the driver drops about 1.2V. If you supply 5V to the ULN2003 board, the motor coils only see ~3.8V. This reduces your real-world torque by roughly 24% compared to the datasheet's ideal 5V-coil rating. Always factor this into your sizing math.

Sizing Rule of Thumb and Worked Load Example

The Rule: Never load a stepper motor beyond 50% of its rated dynamic holding torque for continuous motion. Steppers lose torque rapidly as speed increases, and a 50% safety margin prevents lost steps during acceleration and friction spikes.

Worked Example: Automating a Horizontal Blind

  • Load: A 1.2 kg blind mechanism.
  • Lever Arm (Spool Radius): 2.5 cm (0.025 m).
  • Required Static Torque: Mass × Gravity × Radius = 1.2 kg × 9.81 m/s² × 0.025 m = 0.294 N·m.
  • 50% Safety Margin: 0.294 N·m × 1.5 = 0.441 N·m required.

Verdict: The 28BYJ-48 yields about 0.3 N·m of usable dynamic torque at the output shaft (after accounting for gear friction and the ULN2003 voltage drop). Because 0.3 N·m is less than the required 0.441 N·m, the 28BYJ-48 will stall or lose steps on this load. You must step up to a NEMA 17 bipolar stepper or increase the spool radius to reduce the torque requirement. If the blind weighed only 0.5 kg, the required torque with margin would be ~0.18 N·m, making the 28BYJ-48 a perfect fit.

Driving the 28BYJ-48: Controllers, Wiring, and Failure Signatures

The 28BYJ-48 is a 5-wire unipolar motor. The center taps of the two internal coils are tied together and brought out as the red wire. This architecture requires a specific driver topology—most commonly the ULN2003A Darlington transistor array, which sinks current from the motor coils to ground in the correct sequence.

Wiring and Terminal Identification

The JST connector on the 28BYJ-48 uses a non-standard color order. Red is in the middle, not at the edge. Always wire by color function, not by physical pin position on the connector.

28BYJ-48 Pinout and ULN2003 Wiring
Wire ColorMotor FunctionULN2003 Board PinNotes
RedCommon / Center TapVCC (+)Connect to 5V external supply (not Arduino 5V).
OrangeCoil 1, Phase AIN1Energized in step sequence 1 & 2.
YellowCoil 1, Phase BIN2Energized in step sequence 2 & 3.
PinkCoil 2, Phase CIN3Energized in step sequence 3 & 4.
BlueCoil 2, Phase DIN4Energized in step sequence 4 & 1.

Recognizing Failure Signatures

Steppers fail in very specific, diagnosable ways. When debugging your build, look for these signatures:

  • Humming without moving (Stall): The motor is energized but the load exceeds the available torque, or your Arduino code is commanding an acceleration rate the motor cannot physically achieve. Lower the RPM and acceleration in your AccelStepper library.
  • Overheating ULN2003 Chip: If you run the motor in full-step mode (two coils energized simultaneously) at a high duty cycle, the ULN2003 IC will pull ~400mA and get too hot to touch. Switch to half-stepping or add a small stick-on heatsink to the IC.
  • Grinding or Clicking (Stripped Gears): The internal reduction gears are made of POM plastic. If your load experiences sudden shock loads (e.g., a mechanical hard-stop without a limit switch), the teeth will strip. Always use software limit switches and ramp down speed before stopping.

How the 28BYJ-48 Compares to NEMA 17 and Micro Servos

Choosing between a stepper and a servo is a common trap; they are not interchangeable. Steppers provide open-loop positional control and high holding torque, while servos use a closed-loop potentiometer for speed and angular limits. According to Adafruit's motor selection guidelines, matching the control topology to the mechanical need is critical.

Motor Type Comparison for Embedded Projects
Feature28BYJ-48 (Unipolar Stepper)NEMA 17 (Bipolar Stepper)SG90 (Micro Servo)
Torque CurveHigh at 0-15 RPM, drops to zero rapidly above 20 RPM.Flat and high up to 300+ RPM, requires chopper driver.High instantaneous torque, but drops if stalled.
Control NeedsULN2003, open-loop step pulses.A4988 / TMC2209, DIR/STEP pulses, current limiting.Standard 50Hz PWM signal (1-2ms pulse width).
PrecisionLow (gear backlash ~0.5°).High (1.8° per step, microstepping capable).Moderate (potentiometer jitter, ~1° resolution).
Cost (Approx)$2 - $4 (includes driver)$15 - $25 (motor + driver)$3 - $5
Best ApplicationSlow linear actuators, cheap pan/tilt rigs.3D printers, CNC routers, high-speed conveyors.RC steering, robotic arms, quick 180° sweeps.

28BYJ-48 Stepper Motor FAQ

Can I power the stepper 28BYJ-48 directly from the Arduino 5V pin?

No. The Arduino's onboard 5V linear regulator (or the USB polyfuse) typically maxes out at 400mA–500mA. The 28BYJ-48 draws roughly 240mA per phase, meaning two active phases will pull nearly 480mA just for the motor, not counting the Arduino's own logic draw and LEDs. This will cause a brownout, resetting your microcontroller mid-step. Always use an external 5V 2A power supply for the ULN2003 board, and connect the external supply's GND to the Arduino's GND to establish a common reference.

Why does my 28BYJ-48 not complete exactly 360 degrees when commanded for 2048 steps?

This is a notorious quirk of the 28BYJ-48. The datasheet claims a 1:64 gear reduction, which would mean 2048 half-steps equals exactly one revolution. However, the actual physical gear ratio is 1:63.68395. To achieve one exact mechanical rotation of the output shaft in half-step mode, you must command approximately 4076 steps (or 2038 full steps). If you are building a dial or a pointer, you must calibrate this fractional offset in your firmware, or the error will compound over multiple rotations.

How do I convert a 28BYJ-48 from unipolar to bipolar for use with an A4988 driver?

You can unlock higher torque and microstepping capabilities by converting the motor to bipolar. Pry off the blue plastic back cover of the motor to expose the internal PCB. Locate the trace or small jumper that connects the center taps (the red wire) to the coil phases, and cut it with a hobby knife. This isolates the two full coils. You can now ignore the red wire and drive the remaining four wires using a bipolar chopper driver like the A4988 or DRV8825. Note that without the center taps, the coil resistance doubles, so you will need to supply 9V to 12V to the driver to achieve the same current and torque.