DC Motor Starter Using Arduino Uno Board

A. Samiuddhin is B.Tech in electrical and electronics engineering. His interests include LED lighting, power electronics, microcontrollers and Arduino programming

- Advertisement -

Motor starter reduces the load, torque and current surge of a motor during startup. On starting, the motor takes more than five times the normal running current. This overheats the motor’s armature winding and creates a sudden voltage dip in the power supply, which can be avoided by using a motor starter. There are many types of motor starters. Here we describe an electronic DC motor starter using Arduino Uno board. This circuit controls both soft-start and soft-stop timings through pulse-width modulation (PWM).

Circuit and working

Circuit diagram of the DC motor soft-starter is shown in Fig. 1. In addition to Arduino Uno board (Board1), it uses PIC817 optocoupler (IC1), p-channel IRF9530 MOSFET (T1), 1N4007 rectifier diode (D1), 12V DC motor (M1) for testing, bi-colour LED (LED1) and a few other components.

Circuit diagram of DC motor starter using Arduino Uno

- Advertisement -

Fig. 1: Circuit diagram of DC motor starter using Arduino Uno

Arduino Uno board is an important part of the circuit that generates PWM signals. Pushbuttons (S1 and S2) are used to soft-start and soft-stop the motor. The bi-colour LED indicates whether the motor is in soft-start or soft-stop mode.


When the circuit is switched on, the motor is at rest and LED1 off. When push button S1 is pressed momentarily, the voltage across the motor increases gradually and attains maximum voltage after the predetermined soft-start timing. So the motor first starts at a slow speed. In this state, LED1 emits green light. After the soft-start time, i.e., in running condition, LED1 emits orange light, indicating that the motor is running at the rated speed.


If pushbutton S2 is pressed momentarily while the motor is running at the rated speed, the voltage across the motor decreases gradually and becomes zero after the soft-stop time. So the motor speed also decreases gradually and it finally stops after the soft-stop time. In this state, LED1 emits red colour. After the soft-stop time, LED1 doesn’t glow, indicating that the motor is at rest.

Arduino Uno is programmed such that if switch S1 or S2 is pressed more than once before the timing ends, it executes only once. This prevents the motor from restarting suddenly.
The circuit is isolated by an optocoupler (IC1) so that any disturbance in the motor power supply doesn’t affect the Arduino Uno board. The freewheeling diode (D1) gives additional protection over induced voltage when the motor is turned off.

The circuit’s operation is controlled using the software program loaded into the internal memory of Arduino Uno board. The program (softs.ino) is written in Arduino programming language sketch. Arduino IDE is used to compile and upload the program to the Arduino board.

parts list

Construction and testing

A PCB layout of the DC motor soft-starter is shown in Fig. 2 and its components layout in Fig. 3. After assembling the circuit on a PCB, connect CON2 to Arduino Uno board through external male-to-male jumper wires. After uploading the code to Board1, enclose the assembled PCB along with Board1 in a suitable plastic box.
The circuit works off the 5V USB power supply used for Arduino Uno board. Regulated 12V power supply is used to operate the DC motor.

PCB layout of the DC motor soft-starter

Fig. 2: PCB layout of the DC motor starter using Arduino Uno

Fig. 3: Components layout for the PCB

Download PCB and component layout PDFs: click here

Further application

The circuit can be converted into an AC motor soft-starter by using thyristors in place of MOSFET T1. It can be used along with device control projects. Additional protection and closed-loop control can be included, if required. Different timings and PWM values can be set for both soft-start and soft-stop.

Download source code



  1. Hello,
    I need to build this project but I want one more function on it.
    I need with a potentiometer to preselect the max PWM value and when hit the start button gradually reach that preselect max value.
    Any idea for that?

    Thank you

    • Here’s the reply from author A. Samiuddhin: “Thank you for giving interest in my article. Let us assume the potentiometer wiper is connected to analog input A0, 5V and ground on both ends of the potentiometer. Replace the pwm values with a variable to store the analog input A0 value. Change the maximum and minimum value on the “for” loop on both “on()” and “off” function.
      Simply follow the below steps:
      1. Replace the int soft[] = {0,25,50,75,100,125,150,175,200,225}; line with a variable as unsigned int,
      to store the A0 value. (Here I mention the variable as maxPWM)
      2. In the void loop function, add the below two lines.
      maxPWM = analogRead(A0);
      maxPWM /= 4;
      3. Change the for loop as indicated below on both on() and off() function
      for (n=0; n0; m–) in off() function,”

  2. “I established Stepdown transformer to design own power supply to led lights design
    I used Stepdown 12 volts tarnsformer and lm317 100 l variable resistor I connected the lights from transformer and other side I connected Arduino Uno with 5 volts charger but the program is executed in l board but other transformer side light was not blinking my doubt is both grounds are commonly not connected is that problem I feared about short circuit please give any answer how to turn on power supply thank you.”



What's New @ Electronicsforu.com

Most Popular DIYs

Electronics Components

Truly Innovative Tech