Introduction
A DC Motor Speed Controller is an electronic system used to control the speed of a DC motor according to user requirements. Speed control is an essential feature in many industrial, domestic, and robotic applications where precise motion control is required.
This project demonstrates how the speed of a DC motor can be varied using electronic techniques such as voltage control and Pulse Width Modulation (PWM).
Objective of the Project
The main objectives of this project are:
- To control the speed of a DC motor smoothly.
- To understand PWM (Pulse Width Modulation) technique.
- To design an efficient motor control circuit.
- To reduce power loss compared to traditional methods.
Working Principle
There are two main methods to control DC motor speed:
1. Analog Method (Using Potentiometer)
- The voltage supplied to the motor is varied using a potentiometer.
- Higher voltage → higher motor speed.
- Lower voltage → lower motor speed.
2. Digital Method (Using PWM – Arduino)
- PWM controls motor speed by rapidly switching the motor ON and OFF.
- The average voltage applied to the motor depends on the duty cycle.
- Higher duty cycle → faster motor speed.
- Lower duty cycle → slower motor speed.
PWM is more efficient and widely used in modern motor controllers.
Components Required
Basic DC Motor Speed Controller
- DC Motor
- Potentiometer (10kΩ)
- Transistor (TIP122 / BC547) or MOSFET
- Diode (1N4007 – flyback protection)
- Resistors
- Power Supply (9V–12V)
- Breadboard & wires
Arduino-Based DC Motor Speed Controller
- Arduino Uno
- DC Motor
- Motor Driver (L298N / L293D) or MOSFET
- Potentiometer (10kΩ)
- Jumper wires
Circuit Diagram
Basic Circuit (Without Arduino)
+Vcc ---- Motor ---- Collector (Transistor)
Emitter ---- GND
Potentiometer ---- Base (via resistor)
Diode across motor (Reverse biased)
Arduino-Based Circuit
Potentiometer ---- A0
Motor Driver ENA - Arduino PWM Pin (9)
Motor Driver IN1/IN2 - Direction Control
Motor ------------ Motor Driver Output
Arduino Code for DC Motor Speed Controller
int potPin = A0;
int motorPin = 9;
void setup() {
pinMode(motorPin, OUTPUT);
}
void loop() {
int potValue = analogRead(potPin);
int motorSpeed = map(potValue, 0, 1023, 0, 255);
analogWrite(motorPin, motorSpeed);
}
Code Explanation
- Potentiometer value is read using
analogRead(). - The value is mapped to PWM range (0–255).
- PWM signal controls motor speed using
analogWrite().
Advantages
- Smooth and precise speed control
- Energy efficient
- Simple and low-cost design
- Easy to upgrade and modify
Applications
- Robotics and automation
- Fans and pumps
- Conveyor belts
- Electric vehicles (basic models)
- Industrial motor control
Conclusion
The DC Motor Speed Controller is a highly practical electronics project that demonstrates efficient motor control techniques. By using PWM, this project achieves smooth speed variation with minimal power loss. It is an ideal project for students and serves as a foundation for advanced motor control and robotics applications.
