Control a Stepper Motor Using an Arduino
Stepper Motor Speed Control using Arduino
Today, I am going to tell you that how to make a simple algorithm for Stepper Motor Speed Control using Arduino. I have already ...

Stepper Motor Speed Control using Arduino
In the tutorial Stepper Motor Direction Control using Arduino, I will explain you about making an algorithm to run the stepper motor at different speed. If the stepper motor is already running at its maximum speed and you want want to accelerate it further then nothing will happen to the speed of the stepper motor. If the stepper motor is rotating slowly and you enhance its speed, then the speed of the motor will increase in proportion to the number of accelerating command sent through the serial port.- You can download the complete Arduino source code here by clicking on the button below.
Download Arduino Code
- Download .rar file, extract it and enjoy the complete source code.
Flow Chart
- I have made a flow chart so that you can easily understand the entire algorithm because sometimes it becomes difficult to understand the algorithm with the help of the source code.
- Flow chart for the Stepper Motor Speed Control using Arduino is shown in the figure below.

- First of all we need to start the serial port so that our communication could be started.
- Then there is a method to check the speed, if the speed is greater than the maximum speed of the stepper motor then the program will wait for the next command.
- If the stepper motor is not rotating with its maximum speed then we can increase its speed.
- Similarly if the minimum speed of the stepper motor is reached then the program will rotate for the next commands.
- If the minimum limit of the speed of the stepper motor is not reached then we have a option to reduce its further.
- At the end we should close the serial port so that exchange of unnecessary commands through the serial port could be avoided.
Block Diagram
- Block diagram will be helpful for use for the better understanding of the exchange of information.
- It tells us that how the information is exchanged sequentially among all the components used.
- Block diagram is shown in the figure below.

- Arduino UNO communicates with the L298 motor controller to control the speed of the stepper motor.
- L298 Motor controller manipulates the Arduino's commands and starts to control the speed of the stepper motor.
Arduino Code Description
In this section of the tutorial Stepper Motor Speed Control using Arduino, I am going to elaborate you about the Arduino source.- I have made two different functions for increasing (accelerating) the speed of the stepper motor and for decreasing (deaccelerating) the speed of the stepper motor respectively.
- I have declared a variable named as count.
- InAcceleratefunction, you have to send the command H through the serial port to increase the speed of the stepper motor.
- In this function, I am continuously increasing the value of the count i.e as many times you send the commandHthe speed of the stepper motor will increase continuously.
- The source code of the Accelerate function is given below.
void Accelerate_Motor() { count=count+10; //Speed will increase continuously as we continue to press H if (count>120) //Speed must not be greater than 120 { count=120; } Serial.println("Accelerating"); //printing on the serial port Serial.println("");//prints blank line on the serial port myStepper.step(stepsPerRevolution);//counter clockwise rotation myStepper.setSpeed(count); //Updating the speed of the motor lcd.setCursor(3,0);//setting LCD cursor lcd.print("Acelerating"); //printing on LCD }
- InDeacceleratefunction, you have to send the command L through the serial port to increase the speed of the stepper motor.
- In this function, I am continuously reducing the value of the count i.e as many times you send the commandLthe speed of the stepper motor will reduce continuously.
- The source code of the Deaccelerate function is given below.
void Deaccelerate() { count=count-10; //reducing the speed of the motor if (count<20) //speed of the motor must not be less than 20 { count=20; } Serial.println("Deaccelerating"); // prints on the serial port Serial.println(""); //prints blank line on the serial port myStepper.step(stepsPerRevolution); myStepper.setSpeed(count); //Updating the speed of the motor lcd.setCursor(3,0); //setting cursor on LCD lcd.print("Deaccelerating"); //prints the command on LCD }
- In the main source inside the loop I am calling both of these Accelerate and Deaccelerate functions.
- The executed commands will also be printed on the LCD (Liquid Crystal Diode).
- The main source code is given below.
#include <LiquidCrystal.h>//Library for LCD #include <Stepper.h> //Library for Stepper motor const int stepsPerRevolution = 255; // initialize the stepper library on pins Stepper myStepper(stepsPerRevolution, 4, 5, 6, 7); char data; int count = 120; //LCD pins assigning LiquidCrystal lcd(8, 9, 10, 11, 12, 13); void setup() { // set the speed at 60 rpm myStepper.setSpeed(60); // initialize the serial port: Serial.begin(9600);// rate at which the arduino communicates lcd.begin(20, 4);//LCD type lcd.setCursor(3,0);//setting LCD cursor and printing on it lcd.print("Stepper Motor"); lcd.setCursor(6,1); lcd.print("Speed"); lcd.setCursor(5,2); lcd.print("Control"); lcd.setCursor(2,3); lcd.print("via Arduino UNO"); delay(3000); lcd.clear ();//Clearing the LCD screen lcd.setCursor(0,2); lcd.print("www.TheEngineering"); lcd.setCursor(4,3); lcd.print("Projects.com"); } void loop() { if(Serial.available()) { data = Serial.read(); //Reading the data from serial port } if(data == 'C'){Clockwise();} //Clockwise rotation if(data == 'A'){AntiClockwise();} //Anti-clockwise rotation if(data == 'S') //stopping the stepper motor { data = 0; lcd.setCursor(3,0); lcd.print("No rotation"); Serial.println("No rotation");//print on the serial } if(data == 'H'){Accelerate_Motor();} if(data == 'L'){Deaccelerate();} }
Complete Hardware Setup
- In this section of the tutorial, I will show you the complete hardware setup that I have used for this project.
- Hardware consists of 12V power supply, Arduino UNO, L298 motor controller.
- When you upload the code to the Arduino board the system will look like the figure shown below.

- When you pressHto increase the speed of the stepper motor, the statementaccelerating will be printed on the LCD.
- The printed executed command is printed on the LCD and is shown in the figure below.

- When you pressLto reduce the speed of the stepper motor, the statement Deaccelerating will be printed on the LCD.
- The printed executed command is printed on the LCD and is shown in the figure below.

Source: https://www.theengineeringprojects.com/2017/04/stepper-motor-speed-control-using-arduino.html
0 Response to "Control a Stepper Motor Using an Arduino"
Post a Comment