Stepper Motor Control System Based On Arduino With ULN2003 Chip

By on November 17, 2014

Web site:

http://www.instructables.com/id/28BYJ-48-Stepper-Motor-Control-System-Based-On-Ard/

Project Summary:

This project uses ULN2003 chip to drive. The working voltage is DC5V. It is widely used on ATM machine, inkjet printer,cutting plotter, fax machine,spraying equipment, medical instruments and equipments, PC peripheral, and USB Mass Storage ,precise instrument,industrial control system,office automation,robot areas,etc.

Full Project:

Step 1: Components List

Picture of Components List

Step 2: Schematic Diagram

Picture of Schematic Diagram

Working Principle:

To change the rotating speed of the stepper motor by changing the input frequency of pulse signal. And to realize the motor rotating in the clockeise direction and counter-clockwise direction by controlling the transform sequence of the pulse signal.

Step 3: Overall hardware connected diagram

Picture of Overall hardware connected diagram

Step 4: Plug into the power supply wires and place the components

Picture of Plug into the power supply wires and place the components

Step 5: Connect the LCD1602

Picture of Connect the LCD1602

Step 6: Connect the stepper motor

Picture of Connect the stepper motor

Step 7: Connect the signal end and power supply end

Picture of Connect the signal end and power supply end

Connect the signal end of the components and the cathode and anode of the power supply to the Arduino UNO and common port of power supply.

Step 8: The experimental effect after starting up the power supply

Picture of The experimental effect after starting up the power supply

Circuit diagram:

Picture of Schematic Diagram

Bill of Materials:

1.Arduino  UNO V3.0 R3 Board or Compatible Arduino

2.1602A HD44780 Character LCD Display Module

3.5V 4 Phase 5 Line 5VDC Stepper Motor

4.50K Ohm B50K Knurled Shaft Linear Rotary Taper Potentiometer

5.ULN2003AN DIP-16 TI Darlington Transistor Array

6.Trim Pot Resistor Potentiometer

7.830 Point Solderless PCB Bread Board MB-102 Test DIY

8.12X12X5mm Tact Switches 4 Legs

9.Bread Board Jump Line Jumper Wire

10. Dupont 20cm Color Cable Line

11.+5V DC power supply

Firmware:

Functions

1.When start up, the stepper motor will rotate in the clockwise direction, at the same time the1602 LCD will display the stepping rate and rotating direction.

2.When you press the key1, the stepper motor will rotate in the counter-clockwise direction.

3.When you turn the potentiometer to the left or to the right, you can adjust the stepping rate of the stepper motor. At the same tine the 1602 LCD will display the current speed.

Software & Code Snippets:

#include <Stepper.h>
#include <LiquidCrystal.h>
int Iint1=0;
int Iint2=1;
int anjian1=2;
int anjian2=3;
int motorSpeed;
LiquidCrystal lcd(9,8,7,6,5,4);
const int stepsPerRevolution =200;
// 	Here set the stepper motor rotation step how much is a circle
int dim=stepsPerRevolution;
//	Set the step motor number and pin
Stepper myStepper(stepsPerRevolution, 10,11,12,13);  
void setup()
{  
   lcd.begin(16, 2);
   lcd.print("speed:");
   
   lcd.setCursor(10,0);
   lcd.print("n/min");
   
   lcd.setCursor(0, 1);
   lcd.print("Direction:");
   // 	Set the motor speed of 60 steps per minute

   myStepper.setSpeed(60);     
pinMode(anjian1,INPUT_PULLUP);
   pinMode(anjian2,INPUT_PULLUP);
   attachInterrupt(Iint1,counterclockwise,FALLING);
   attachInterrupt(Iint2,clockwise,FALLING);
   Serial.begin(9600);
}

void loop() 
 { 
   
   myStepper.step(dim);
   void Direction();
   //	 Read the sensor values:
   int sensorReading = analogRead(A0);
  // 	Map it to a range of 0-150:
  int motorSpeed = map(sensorReading, 0, 1023, 0, 150);
  // 	Set the motor speed:
   if (motorSpeed > 0) 
    {
        myStepper.setSpeed(motorSpeed);
        lcd.setCursor(6,0);
        lcd.print(float(float(motorSpeed)/float(200)));
    } 
  }
   
 void clockwise()
  { 
     //   clockwise rotation
     dim=stepsPerRevolution;
     lcd.setCursor(10, 1);
     lcd.print(">>>>>>");
  }
    

  void counterclockwise()
  {  
     //	anti-clockwise
     dim=-stepsPerRevolution;
     lcd.setCursor(10, 1);
     lcd.print("<<<<<<");
   }

PCB:

Picture of Components List

About

7 Comments

  1. Simone Sormani

    November 18, 2014 at 7:06 PM

    Can i control the speed of 2 wire DC motor with L293D ?

    • OEM

      November 22, 2014 at 4:46 AM

      yes, you can PWM the Enable pin on the L293D corresponding to the Half-bridge that you are using for the motor.

      • Simone Sormani

        November 22, 2014 at 8:57 PM

        Thanks you :)

  2. Jan

    April 30, 2016 at 3:49 PM

    I dont have lcd .Did it work without lcd with the same program ?

  3. Daniel Barclay

    December 10, 2016 at 11:09 PM

    Is there a relatively easy way of connecting 4 of these motors to an arduino and addressing them individually?

  4. Margret

    June 28, 2018 at 11:23 PM

    Hello brother. Great project. Can you tell me how can I control steps of motor. I want to make it adjustable steps through buttons. And also want steps displayed on lcd16*2 … Steps I want to adjust are precised like 0.01mm to 5mm etc. Can you refer me to a link or can you help me out? I’ll wait for your reply.

  5. Mahendra Rizki

    December 16, 2018 at 3:57 PM

    why direction not orking

Leave a Reply