DC Motor Speed Control using Arduino in Proteus,DC Motor Speed Control, speed control dc motor, speed control of dc motor, control speed of dc motor, dc motor in proteus, dc motor proteus, dc motor arduinoHello friends, hope you all are fine and having fun with your lives. Today, I am going to share a tutorial on DC Motor Speed Control using Arduino in Proteus ISIS. In my previous post, we have seen How to design a DC Motor Direction Control Project using Arduino in Proteus ISIS and if you haven’t checked it out then I would recommend you to have a look at it first. Because, in today’s tutorial, I am gonna extend that tutorial and will add the DC Motor Speed Control in it. So, today, we will control both the direction as well as speed of the DC Motor. Moreover, you should also have a look at How to use Arduino PWM Pins if you are not much familiar with PWM control.

In the previous tutorial, we have seen How to control the direction of a DC Motor, which is important when you are working on some robot and you need to move that robot in both forward and reverse direction. So, in such cases you need to do the direction control of DC motor. But in most projects, along with direction, we also need to control the speed of DC motor so that we can implement some PID algorithm on the motors. So, in such cases, there comes a need for DC Motor Speed control, which we are gonna cover in today’s post. So, let’s get started with it.

DC Motor Speed Control using Arduino in Proteus

  • As I have explained earlier, I am gonna take it further from our previous tutorial. So, in previous tutorial, what we have done is, we have controlled the direction of DC Motor using Serial Terminal.
  • When we send commands on the Serial Terminal the motor moves in clockwise or Anti-clockwise direction.
  • So, now the above mentioned functionality will remain the same but an addition will be of speed control.
  • I have placed a LDR sensor in the simulation and depending on the value of that LDR sensor our DC motor speed will either increase or decrease.
  • So, you can download the complete simulation of DC Motor Speed Control by clicking the below button:

Download DC Motor Simulation

  • As I always recommend, design this simulation on your own so that you learn most of it.
  • So, first of all, design a circuit as shown in below figure:

DC Motor Speed Control using Arduino in Proteus,DC Motor Speed Control, speed control dc motor, speed control of dc motor, control speed of dc motor, dc motor in proteus, dc motor proteus, dc motor arduino

  • As you can see in the above figure, its exactly the same as we designed for Direction Control of DC Motor in Proteus ISIS with a slight difference.
  • The difference is NPN transistor which is used for DC Motor speed control.
  • The base of this NPN transistor is connected with PWM pin of Arduino board.
  • So, I am generating a PWM pulse on this pin which is then applied on the base of transistor.
  • Now if I increase the duty cycle of this PWM pulse then the transistor induction will increase and thus the speed of the DC motor.
  • Now in order to control this PWM pulse I have used the LDR sensor, now depending on the LDR sensor the speed of DC motor will increase or decrease.
  • Now upload the below code in your Arduino software and Get the hex file from Arduino software.
int Motor1 = 2;
int Motor2 = 3;

int PWMControl= 6;

int PWM_Input = A0;

int PWM_Value = 0;
void setup() {
  pinMode(Motor1, OUTPUT);
  pinMode(Motor2, OUTPUT);
  pinMode(PWMControl, OUTPUT);
  pinMode(PWM_Input, INPUT);

void loop() {
  PWM_Value = analogRead(PWM_Input);
  PWM_Value = map(PWM_Value, 0, 1023, 0, 255);
  analogWrite(PWMControl, PWM_Value);
    char data = Serial.read();
    if(data == 'C'){MotorClockwise();}
    if(data == 'A'){MotorAntiClockwise();}
    if(data == 'S'){MotorStop();}

void MotorAntiClockwise()
  digitalWrite(Motor1, HIGH);
  digitalWrite(Motor2, LOW);

void MotorClockwise()
  digitalWrite(Motor1, LOW);
  digitalWrite(Motor2, HIGH);

void MotorStop()
  digitalWrite(Motor1, HIGH);
  digitalWrite(Motor2, HIGH);
  • So, now I am starting the simulation and then will send the commands via virtual Terminal and it will start moving and then by changing the LDR position DC motor speed control will take place.

DC Motor Speed Control using Arduino in Proteus,DC Motor Speed Control, speed control dc motor, speed control of dc motor, control speed of dc motor, dc motor in proteus, dc motor proteus, dc motor arduino

  • I know its not clear from above figure so that’s why I have designed this video. In the below video you will get the clear idea of DC Motor speed motor.

So, that’s all for today. I hope you have got the idea of DC Motor Speed Control. Take care and have fun !!! 🙂



  1. Pls help me sir for writing program for my project.It deals with sensors(temperature LM35.Humidity DHT11,Heart beat rate).
    As mentioned above the sensor sensed value is display in LCD 16 x 2 display.In my project am fix the threshold value .if the measured value is decreased or increased ithe information will b send to mobile phone via GSM SIM900A .PLEASE HELP TO DEVELOP A PROGRAM FOR THE SAME. And also i include the program i had written.pls take action to correct my pgm or ur send the exact pgm to ma mail

    LiquidCrystal lcd(12,11,5,4,3,2);
    SoftwareSerial mySerial(9,10);
    void setup()
    lcd.begin(16, 2);
    void loop()

    int x=analogRead(A2),Y=analogRead(A3),z=analogRead(A4);

    case ‘s’:
    case ‘r’:
    void SendMessage()
    mySerial.println(“Medical aid needed”);
    void ReceiveMessage()

  2. I have copied the code and simulation file. when i run the simulation, the motor gets on but when i give the input in virtual terminal , motor is not rotating. it shows a warning msg as “Simulation is not running in real time due to excessive CPU load.” . What should i do? pls help.

Leave a Reply

Your email address will not be published. Required fields are marked *

Post comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.