Arduino DC Motor Speed Control Potentiometer

144,686

76

25

This instructable will guide you on how to controll the speed of a Dc motor with a potentiometer and an arduino...

Step 1: Part List

1) Arduino

2) D.C. motor

3) NPN transistor TIP120

4) Rectifier Diode

5) 3* 220 ohms resitors

6) 10K Potentiometer

7) Breadboard

8) Jumper wires

9) Green led

10) Red led

11) Computer with Arduino IDE

Step 2: Connect the Potentiometer

1) Connect the negative pin of the potentiometer to GNDPIN on the arduino.

2) Connect the signal pin of the potentiometer to AnalogPIN0 on the arduino.

3) Connect the positive pin of the potentiometer to 5VPIN on the arduino.

Step 3: Connect the Leds

1) Connect a 220ohm or any ressitor below 1komhs to the anode of the red led and connect the end of the resistor to DIGITALPIN8 on the arduino.

2) Connect the cathode of the red led to GNDPIN.

3) Connect a 220ohms resistor to the anode of the green led and connect the end of the resistor to DIGITALPIN9 on the arduino.

4) Connect the cathode of the green led to GNDPIN.

Step 4: Connect the Transistor,diode,resistor and the D.C.motor

1) Connect the BASE of the transistor to a 220ohms resitor and connect the end of the resistor to DIGITALPIN3 on the arduino.

2) Connect the COLLECTOR of the transistor to a negative of a diode and connect the end of the diode to GND.

3) Connect the EMITTER of the transistor to GND.

4) Connect a pin of the motor to 5v and another to negative of the Diode.

Step 5: TIP 120 NPN Transistor Pinout

Step 6: Breadboard Layout

Step 7: Arduino Code

int analogInPin = A0;

int sensorValue = 0;

int outputValue = 0;

int transistorPin = 3;

void setup()

{

Serial.begin(9600);

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

pinMode(transistorPin, OUTPUT);

}

void loop()

{

sensorValue = analogRead(analogInPin)/4;

outputValue = map(sensorValue, 0, 1023, 0, 255);

analogWrite(transistorPin, sensorValue);

if (sensorValue >= 160)

{

//example

digitalWrite(8, HIGH);

digitalWrite(9, LOW);

}

else

{ digitalWrite(9, HIGH);

digitalWrite(8, LOW);

}

delay(10); }

Step 8: You're Done!!

3 People Made This Project!

Recommendations

  • Trash to Treasure

    Trash to Treasure
  • Tape Contest

    Tape Contest
  • Arduino Contest 2019

    Arduino Contest 2019

25 Discussions

0
None
dane.allen001

4 weeks ago on Step 7

The code dont work. Could you give me insight on what to do

0
None
SivaE3

2 months ago on Step 8

Code explaination pls

0
None
pubalan12

3 months ago

Bro I have a motor driver (MD10-POT) is able to control the speed and direction of your DC motor without using a microcontroller or writing a single line of programming code. Very easy installation. No need wiring so much. The product link below :

https://www.cytron.io/p-md10-pot

MD10-POT potentiometer switch control motor driver-800x800.jpgsoBIJaFB-dI0wHRounH0C-Q.png
0
None
milton423

Question 4 months ago

would you mind explaining the code. just most important parts.

0
None
AADHI SHRINI

Question 11 months ago

why NPN transistor is used?

0
None
mukhtar919003

1 year ago

Do you have Proteus Simulation of this Project ... ? I need to simulate this circuit in Proteus ?

0
None
QuestionsIns

1 year ago

I might have read it wrong but the diode should go in parallel with the motor. Cathode (negative end) to voltage source (same connection motor pos) and anode (positive end) to the collector on the bjt. The diode provides a place for current to do when power is cut off. This circuit works (doesn't break) due to the low current, voltage, small motor, and durability of the arduino. A motor acts like an inductor and when current stops flowing an inductor tries creating a current, the current it creates has to go somewhere.

0
None
Ilovecars_mukut

3 years ago

surya bhaii.....I have to do the same thing with my Raspberry Pi.....can u tell how to do?

2 replies

Find me on fackebook

https://www.facebook.com/profile.php?id=100009289167675 and we will discuss there :D

Thanks for replying mate! I actually have been able to do this with my Raspi. Anyways, thanks for this lovely instructable!

0
None
NiallM9

1 year ago

does the voltage on the motor matter

0
None
cjspurs21

2 years ago

Hello sir. I have a question. We have a project called jar tester and it runs on a 24v dc motor. We want to control its speed but at the same time display the rpm accordingly. How can it be done sir? thanks ahead.

0
None
dimitrakis1992

2 years ago

Hello sir.I have a question.Why we use trnsistor,diode and resistor?If we use only the pot and the dc motor it doesn't work?What is the purpose of this?Thank you for your time i am newbie.Please answer.

1 reply
0
None
Draskdimitrakis1992

Reply 2 years ago

Yes, it will work if you just hook one end of the motor to ground and the other to the PWM from the arduino, but then you are limited to the amount of power the arduino can source and run a chance of damaging the arduino.

Hooking one end of the motor to +V and using the transistor to allow power to flow through allows you to use any voltage and much higher current.

The diode prevents backflow when the motor turns off. It's usually not a problem with small toy motors, but with a heavy enough motor it will generate electricity as it is slowing down in reverse of the flow you were using to push it and can overload a circuit. It's just a good habit to get into.

The resistor is also just a good habit when working with motors.

0
None
SriramS21

2 years ago

can you please explain why we are using this line

sensorvalue=analogRead(analogPin)/4

1 reply
0
None
wbarrows1

2 years ago

Correct me if I am wrong, but if I want a program on the arduino to control the speed of the motor, then the potentiometer is completely irrelevant? I say this, because another instructable shows how to control DC motor speed with a potentiometer, but no arduino. I'm not sure what is gained by directly controlling the motor speed using an arduino AND a potentiometer.