How to Use the 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino

How to Use the 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino

The 28BYJ-48 stepper motor is a popular, affordable stepper motor often used in DIY electronics projects. Paired with the ULN2003 driver board, it is an excellent choice for applications requiring precise movement, such as robotics, camera sliders, and home automation. This tutorial will guide you through setting up and controlling the 28BYJ-48 stepper motor with Arduino.

What You Will Need

  1. 28BYJ-48 Stepper Motor
  2. ULN2003 Driver Board
  3. Arduino Board (e.g., Uno, Mega, Nano)
  4. Jumper Wires
  5. Breadboard (optional)
  6. A computer with the Arduino IDE installed

Step 1: Understanding the Components

28BYJ-48 Stepper Motor

  • The 28BYJ-48 is a 4-phase, 5-wire stepper motor with a gear reduction ratio of approximately 1:64, making it precise and reliable.

ULN2003 Driver Board

  • The ULN2003 is a driver board designed specifically for the 28BYJ-48 motor. It includes LEDs to indicate the motor’s active phase and simplifies connections to the Arduino.

Step 2: Wiring the ULN2003 to Arduino

  1. Connect the 28BYJ-48 motor to the ULN2003 driver board. The motor’s connector fits directly into the header labeled "IN" on the board.

  2. Use jumper wires to connect the ULN2003 driver board to the Arduino as follows:

ULN2003 Pin Arduino Pin
IN1 Pin 8
IN2 Pin 9
IN3 Pin 10
IN4 Pin 11
VCC 5V
GND GND

Step 3: Install the Stepper Library

The Arduino IDE includes a built-in library for stepper motor control.

  1. Open the Arduino IDE.
  2. Go to Sketch > Include Library > Stepper.

Step 4: Upload the Code

Here is a basic example code to control the stepper motor:

#include <Stepper.h>

// Define the number of steps per revolution for the 28BYJ-48 motor
#define STEPS_PER_REV 2048

// Initialize the Stepper library on pins 8, 9, 10, and 11
Stepper stepper(STEPS_PER_REV, 8, 10, 9, 11);

void setup() {
  stepper.setSpeed(15); // Set motor speed (in RPM)
  Serial.begin(9600);
  Serial.println("28BYJ-48 Stepper Motor Test");
}

void loop() {
  Serial.println("Moving Forward");
  stepper.step(STEPS_PER_REV); // Move one full revolution forward
  delay(1000);

  Serial.println("Moving Backward");
  stepper.step(-STEPS_PER_REV); // Move one full revolution backward
  delay(1000);
}

Step 5: Test the Setup

  1. Connect the Arduino to your computer via USB.
  2. Open the Arduino IDE and select the correct Board and Port under the Tools menu.
  3. Upload the code to the Arduino by clicking Upload.
  4. Once the code is uploaded, the stepper motor should rotate one full revolution forward and then backward repeatedly.

Advanced Control with Acceleration

For smoother and more precise control, you can use the AccelStepper library instead of the built-in Stepper library. Here’s an example:

#include <AccelStepper.h>

// Define the motor interface type
#define HALFSTEP 8

// Initialize the AccelStepper library
AccelStepper stepper(HALFSTEP, 8, 10, 9, 11);

void setup() {
  stepper.setMaxSpeed(1000); // Set maximum speed
  stepper.setAcceleration(500); // Set acceleration
  stepper.setSpeed(200); // Set initial speed
}

void loop() {
  stepper.runSpeed(); // Continuous rotation
}

Troubleshooting

  • Motor not moving: Check all connections and ensure the correct pins are defined in the code.
  • Erratic movement: Verify that the motor’s power supply is sufficient and the code matches your setup.
  • Low torque: The 28BYJ-48 is not a high-torque motor. Ensure it’s not overloaded.

Applications of 28BYJ-48 Stepper Motor

  1. Camera sliders
  2. Robotic arms
  3. Automated blinds
  4. 3D printer mechanisms

Conclusion

You’ve successfully set up and controlled the 28BYJ-48 stepper motor with the ULN2003 driver and Arduino. This affordable and reliable motor is perfect for various DIY projects. Experiment with different speeds, steps, and control methods to make your projects more dynamic!

Leave a comment

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.