Arduino DC Motor Speed Control Potentiometer

Introduction: Arduino DC Motor Speed Control Potentiometer

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

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

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

  • Backyard Contest

    Backyard Contest
  • Silly Hats Speed Challenge

    Silly Hats Speed Challenge
  • Arduino Contest 2020

    Arduino Contest 2020

27 Discussions

1
goldenshuttle
goldenshuttle

1 year ago

your code will not work. this step is wrong
analogWrite(transistorPin, sensorValue
it should be output value not sensor value..sensor value you mapped it already..it is funny all these comments and no one paid attention!!

0
alameenusman92
alameenusman92

Reply 1 year ago

Thanks for spotting that mistake.

0
dane.allen001
dane.allen001

1 year ago on Step 7

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

0
SivaE3
SivaE3

1 year ago on Step 8

Code explaination pls

0
pubalan12
pubalan12

1 year 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
milton423
milton423

Question 1 year ago

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

0
AADHI SHRINI
AADHI SHRINI

Question 2 years ago

why NPN transistor is used?

0
mukhtar919003
mukhtar919003

2 years ago

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

0
QuestionsIns
QuestionsIns

2 years 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
Ilovecars_mukut
Ilovecars_mukut

4 years ago

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

0
Surya Krishnakumar
Surya Krishnakumar

Reply 2 years ago

Find me on fackebook

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

0
Ilovecars_mukut
Ilovecars_mukut

Reply 2 years ago

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

0
acheide
acheide

5 years ago on Introduction

Another nicely done Instructable.

Thanks

0
NiallM9
NiallM9

3 years ago

does the voltage on the motor matter

0
cjspurs21
cjspurs21

3 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
dimitrakis1992
dimitrakis1992

3 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.

0
Drask
Drask

Reply 3 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
SriramS21
SriramS21

3 years ago

can you please explain why we are using this line

sensorvalue=analogRead(analogPin)/4