Description
These are small unipolar stepper motors that come with a ULN2003A driver board that work well for smaller applications such as opening and closing a vent or to experiment with stepper motors.
PACKAGE INCLUDES:
- 28BYJ-48 unipolar stepper motor with built-in cable
- ULN2003 driver board
KEY FEATURES OF STEPPER MOTOR WITH ULN2003A DRIVER BOARD:
- Compact size
- Unipolar / 4-phase operation
- 5mm shaft
- 64:1 gear reduction for good torque capability
- 5V operation
The most useful aspect of stepper motors compared to other motors is that the position of the motor shaft can be controlled directly in discrete steps without requiring some type of feedback mechanism to determine position as would be required with something like a standard DC motor. Other benefits are that they are relatively precise in their movement, they tend to be fairly reliable since they do not use contact brushes in the motor and they generally have good torque even at stand-still which is maintained as long as power is supplied to the motor. The main downside is that they are a bit power hungry and will consume power even when they are not moving.
Stepper motors work by converting electrical pulses into discrete increments of rotation of their shaft. The motor is 4-phase and requires 4 control inputs. Pulsing these inputs has several effects on the motor.
- The sequence of the applied pulses determines the direction that the motor shaft turns.
- The frequency of the input pulses determines the speed that the shaft turns.
- The number of the input pulses determines how far the shaft turns.
The motors are model 28BYJ-48 and operate at 5VDC. The shaft is 5mm with two flat sides. They have a 64:1 gear reduction, so they have pretty good torque capability.
Power draw is approximately 240mA. Power is drawn whether the motor is turning or not in order to hold its position, so the motor will be slightly warm whenever power is applied. Because of the fairly high power draw, it is best to power the stepper motors directly from a 5V power supply rather than drawing that power from the MCU board that is driving it.
The motor comes with a ULN2003A based driver board. The ULN2003A is a 7 channel darlington transistor driver of which 4 channels are used on this board. The board has 4 LEDs that show activity on the 4 control input lines. It has 2 connectors for making connections as follows:
Motor / Driver Connections:
1 x 6 Header
- VDD – Connect to 5V power supply. Due to high current draw, this should come directly from a power supply and not a microcontroller board.
- IN1 – Digital input 1 – Connect to a digital output pin on the MCU.
- IN2 – Digital input 2 – Connect to a digital output pin on the MCU.
- IN3 – Digital input 3 – Connect to a digital output pin on the MCU.
- IN4 – Digital input 4 – Connect to a digital output pin on the MCU.
- GND – Connect to ground
1 x 5 White Connector
- This is where the motor plugs into. The connector is keyed, so it only goes in one way.
OUR EVALUATION RESULTS:
These stepper motors are designed and used for small industrial applications such as opening and closing vanes. They are a nice inexpensive way to learn about stepper motors and will work fine for many applications that don’t require absolute precision or huge torque loads. Having the driver electronics make them straightforward to use.
When using with an Arduino, the stepper.h library is built into the IDE and makes it straight forward to control stepper motors such as these.
The program below is a simple test program. It moves the stepper in both directions and then allows the stepper to be controlled using a potentiometer attached to the Analog 0 pin. Any other analog sensor could be used. For instance, using an analog temperature sensor, the stepper could be used to open/close vanes on an air vent to control temperature in a greenhouse.
The command stepper(STEPS, 8, 10, 9, 11); is used by the stepper library to define which digital pins the motor is connected to on the Arduino. These can be any 4 digital pins, but we use 8, 9, 10 and 11 in this example. Note that we have these defined out of sequence based on the wiring to the motor.
- IN1 = D8
- IN2 = D9
- IN3 = D10
- IN4 = D11
The most likely issue to run into is that the stepper only runs in one direction. That generally indicates that the wiring to the 4-phases of the motor may be different. If that happens you can try changing the ordering of the pin assignments in that command.
Stepper Motor with ULN2003A Test Program
/* * Stepper Motor Test * * Run the stepper motor CW and CCW one turn to verify wiring * then have the stepper motor follow the rotation of a potentiometer */ #include <Stepper.h> #define STEPS 2048 // change this to the number of steps on your motor // create an instance of the stepper class with the number of steps of the motor // and the pins it's attached to. Note the odd non-sequential pin ordering Stepper stepper(STEPS, 8, 10, 9, 11); int ADCPin = 0; // Analog pin that potentiometer is connected to. int prev = 0; // Variable to hold the previous reading from analog input int diff = 0; // Variable to hold difference between new and previous readings //=============================================================================== // Initialization //=============================================================================== void setup() { Serial.begin(9600); stepper.setSpeed(12); // set the speed of the motor to 12 RPMs // Run this sequence one time to test the basic motor operation Serial.println("counterclockwise"); stepper.step(STEPS); // step one revolution in one direction: delay(500); Serial.println("clockwise"); stepper.step(-STEPS); // step one revolution in the other direction: delay(500); } //=============================================================================== // Main //=============================================================================== void loop() { int val = analogRead(ADCPin); // get the sensor value from the pot val = val * 2; //ADC range is 0-1023. Double to match # steps in stepper diff = val - prev; // Calculate the difference between the readings diff = abs(diff); // Convert any negative number to positive if (diff > 10) { // Look for a decent size change to ignore noise on the ADC stepper.step(val - prev); // move a number of steps equal to the change in the pot prev = val; // remember the previous value of the sensor Serial.print("Pot = "); // Print the ADC value we are reacting to Serial.println(val); } delay(100); }
BEFORE THEY ARE SHIPPED, THESE MOTORS ARE:
- Sample inspected and tested per incoming shipment.
Notes:
- None
Technical Specifications
Motor Model | 28BYJ-48 | |
Operating Ratings | Voltage | 5VDC |
Current | 240mA (typical) | |
Number of phases | 4 | |
Gear Reduction Ratio | 64:1 | |
Dimensions | Cable Length | 24cm (9.5″) |
Motor Housing Diameter | 28mm (1.1″) | |
Motor Height (minus shaft) | 20mm (0.8″) | |
Motor Housing with Mounting Ears | 42mm (1.7″) | |
Shaft diameter | 5mm (3mm on flat sides) | |
Shaft length | 8mm | |
Driver Board (L x W) | 25 x 18mm (1 x 0.7″) |