Robojax

Lesson 107: Control Stepper motor 28BYJ-48 with ULN2003 for Arduino, 7 Projects

Lesson 107: Control Stepper motor 28BYJ-48 with ULN2003 for Arduino, 7 Projects

Please select other codes for this lecture from the links below.

  • Purchase 28BYJ-48 Stepper Motor from Amazon USA
  • purchase 28BYJ-48 Stepper Motor from Amazon Canada
  • purchase 28BYJ-48 Stepper Motor from all other Amazon
  • Purchase 5 pcs 28BYJ-48 Stepper Motor from AliExpress
  • Purchase Arduino Start Kit from Amazon USA
  • Purchase Arduino Start Kit from Amazon Canada
  • Purchase Authentic Arduino board from Amazon USA
  • Purchase Authentic Arduino board from Amazon Canada
  • Part 10: Stepper Motors

    In this lesson we learn how to use mini stepper motor 28BYJ-48 for our project. I am presenting with 8 projects so you can use it in almost any applicaiton. In the video, I have explained the code, shown full wiring diagram and how connect the wires, push buttons and bread board.

    Projects

    In Project 2 we control direction of rotation of stepper motor using keyboard on our computer via serial monitor.

    Timing of chapters in the video

    00:00 Start
    02:03 Introduction to stepper motor
    07:40 How motor is controlled
    13:08 Wiring explained
    15:43 Project 1 code
    20:12 Project 1 demonstration
    22:23 Project 2: Controlling motor via Serial Monitor
    32:03 Project 2 Demonstration
    43:13 Project 3: Controlling using push button STPB-1
    35:48 Project 3: Wiring explained
    37:45 Project 3: Code explained
    39:59 Project 3: Demonstration
    41:07 Project 4: Controlling using push button STPB-2 keep pressing
    42:29 Project 4: Wiring
    45:31 Project 4: Code
    49:38 Project 4: Demonstration
    51:20 Project 5: One Revolution using push button STPB-3
    52:15 Project 5: Wiring
    55:40 Project 5: Code
    1:03:30 Project 5: Demonstration
    1:05:48 Project 6: Push button Any Angle and speed STPB-4
    1:07:43 Project 6: Wiring
    1:11:04 Project 6: Code
    1:17:34 Project 6: Demonstration
    1:20:18 Project 7: Push multiple buttons to any angles STPB-5 angle, speed and direction
    1:21:40 Project 7: Wiring
    1:25:35 Project 7: Code
    1:32:43 Project 7: Demonstration
    1:39:24 Project 8: Controlling Stepper Motor using potentiometer
    1:40:58 Project 8: Wiring
    1:44:04 Project 8: Code
    1:53:19 Project 8: Demonstration
    
     /*
    * Lesson 107-2: Controlling stepper motor from Serial Monitor
    In this lesson we learn how to use mini stepper motor 28BYJ-48 for our project. I am presenting with 8 projects
      so you can use it in almost any applicaiton. In the video, I have explained the code, shown full wiring diagram and 
      how connect the wires, push buttons and bread board. 
    
      Project 2: we will push different keys on keyboard and control motor
     
     
      Project 1: Running motor 
      Project 2: Controlling stepper motor from Serial Monitor(this code)
      Project 3:  Controlling stepper motor using push button STPB-1
      Project 4: Controlling using push button STPB-2  keep pressing
      Project 5: One Revolution using push button STPB-3
      Project 6: Push button Any Angle and speed STPB-4
      Project 7: Using multiple buttons to any angles STPB-5 angle, speed and direction
      Project 8: Controlling stepper motor using potentiometer
    
      * Watch Video instrution for this code:https://youtu.be/TQ7R2bY-MWU
      * 
      * This code is part of Arduino Step by Step Course which starts here:  https://youtu.be/-6qSrDUA5a8
      * 
      * for library of this code visit http://robojax.com/
      * 
     If you found this tutorial helpful, please support me so I can continue creating 
     content like this. Make a donation using PayPal by credit card https://bit.ly/donate-robojax 
     
    
     
      *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
      * This code has been download from Robojax.com
         This program is free software: you can redistribute it and/or modify
         it under the terms of the GNU General Public License as published by
         the Free Software Foundation, either version 3 of the License, or
         (at your option) any later version.
     
         This program is distributed in the hope that it will be useful,
         but WITHOUT ANY WARRANTY; without even the implied warranty of
         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
         GNU General Public License for more details.
     
         You should have received a copy of the GNU General Public License
         along with this program.  If not, see <https://www.gnu.org/licenses/>.
    
     */
    
    int Pin1 = 10;//IN1 is connected to 10 
    int Pin2 = 11;//IN2 is connected to 11  
    int Pin3 = 12;//IN3 is connected to 12  
    int Pin4 = 13;//IN4 is connected to 13  
    int pole1[] ={0,0,0,0, 0,1,1,1, 0};//pole1, 8 step values
    int pole2[] ={0,0,0,1, 1,1,0,0, 0};//pole2, 8 step values
    int pole3[] ={0,1,1,1, 0,0,0,0, 0};//pole3, 8 step values
    int pole4[] ={1,1,0,0, 0,0,0,1, 0};//pole4, 8 step values
    
    int commandLeft  =106;// 106 is ASCII value for lowercase L (l) rotate CW
    int commandStop  =107;// 107 is ASCII value for lowercase K (k) stops
    int commandRight =108;// 108 is ASCII value for lowercase J (j) rotate CCW
    
    int poleStep = 0; 
    int  dirStatus = 3;// stores direction status 3= stop (do not change)
    int directionCommand = commandStop;
    void setup() 
    { 
     pinMode(Pin1, OUTPUT);  
     pinMode(Pin2, OUTPUT);  
     pinMode(Pin3, OUTPUT);  
     pinMode(Pin4, OUTPUT);  
      Serial.begin(9600);
      Serial.println("Robojax 28BYJ-48 Stepper"); 
    } 
     void loop() 
    { 
      directionCommand =getCommand();
      if(directionCommand ==commandRight) 
      {
        dirStatus =1;
      }else if(directionCommand ==commandLeft)
      {
       dirStatus  = 2;  
      }else if(directionCommand ==commandStop)
      {
        dirStatus =3; 
      }
     if(dirStatus ==1){ 
       poleStep++; 
        driveStepper(poleStep);    
     }else if(dirStatus ==2){ 
       poleStep--; 
        driveStepper(poleStep);    
     }else{
      driveStepper(8);   
     }
     if(poleStep>7){ 
       poleStep=0; 
     } 
     if(poleStep<0){ 
       poleStep=7; 
     } 
     delay(1); 
    
    }// loop
    
    void driveStepper(int c)
    {
         digitalWrite(Pin1, pole1[c]);  
         digitalWrite(Pin2, pole2[c]); 
         digitalWrite(Pin3, pole3[c]); 
         digitalWrite(Pin4, pole4[c]);   
    }
    
    /*
     * 
     * @brief Turns gets command from Serial monitor to control  
     * direction of stepper motor
     * @param none
     * @return integer value of ASCII character
     */
    int getCommand()
    {
      int command =0;
            if (Serial.available() > 0) {
                    command =Serial.read()  ;
            } 
      //Serial.println(command);
     if(command >= commandLeft &&   command <= commandRight){   
      return command; 
     }else{
      return 1000;//nothing was received
     }
    }//getCommand() end
    
    
    
       

    Simple code to read serial monitor

    
      /*
     * Demonstration of Serial command
     *   * Watch Video instrution for this code:https://youtu.be/msB3zpxy7Uk
     * Written by Ahmad Shamshiri for Robojax (Robojax.com)
     */
    int commandLeft  =106;// 106 is ASCII value for lowercase L (l) rotate CW
    int commandStop  =107;// 107 is ASCII value for lowercase K (k) stops
    int commandRight =108;// 108 is ASCII value for lowercase J (j) rotate CCW 
    void setup() 
    { 
       Serial.begin(9600); 
    } 
     void loop() 
    { 
      int command;
            if (Serial.available() > 0) {
              
                    command =Serial.read()  ;
            } 
       if(command >=commandLeft &&   command<=commandRight){   
          Serial.println(command);
       }
      delay(500);
    
    }// loop