Arduino DC Motor Speed and Direction L293D





Introduction: Arduino DC Motor Speed and Direction L293D

This instructable will guide you through the parts and steps to control a Dc motor's speed and direction with the help of a dual H-Bridge L293D motor driver for arduino.

The motor driver has two channels which means that it can controll the direction of two Dc motors simultaneously.

Let me walk you through the parts required to do this...and then the steps with codes.

Step 1: Part List

1) Arduino uno.. Original version cheaply available at

2) L293D... 5pcs available for 1.59 euros at

3) Tactile push button.. 100pcs for .99 euros at

4) 10K potentiometer...

5) Breadboard..

6) Jumper wires...

7) Computer with arduino IDE... I cannot provide link to this u know.

Step 2: L293D Pin Layout

Step 3: Breadboard Layout

NOW lets get working.

Step 4: Attach the L293D, Potentiometer and the Button Onto the Breadboard..


PIN1(Enable1) -- DigitalPin11(PWM)

PIN2(INPUT1) -- DigitalPin10(PWM)


PIN4(GND1) -- Gnd


PIN7(INPUT2) -- DigitalPin9(PWM)

PIN8(12v) -- 5v

PIN9(Vss3.3v) -- 5v/// the pin says 3.3v but u can connect it to 5v also.


Pin1(positive)-- 5v

Pin2(signal) -- analogPIN0

PIn3(negative) -- Gnd


1PIN= Gnd

2PIN = DigitalPIN7

Step 5: Arduino Code



int enablePin = 11;

int in1Pin = 10;

int in2Pin = 9;

int switchPin = 7;

int potPin = 0;

int statusPin= 13;

void setup()


pinMode(in1Pin, OUTPUT);

pinMode(in2Pin, OUTPUT);

pinMode(enablePin, OUTPUT);

pinMode(switchPin, INPUT_PULLUP);



void loop()



int speed = analogRead(potPin) / 4;

boolean reverse = digitalRead(switchPin);

setMotor(speed, reverse);


void setMotor(int speed, boolean reverse)


analogWrite(enablePin, speed);

digitalWrite(in1Pin, ! reverse);

digitalWrite(in2Pin, reverse);


Step 6: That's It Your Done!!

Turn the potentiometer to control the speed of the motor and press the button to change the direction.



  • Epilog Challenge 9

    Epilog Challenge 9
  • Gluten Free Challenge

    Gluten Free Challenge
  • First Time Author Contest 2018

    First Time Author Contest 2018

We have a be nice policy.
Please be positive and constructive.




how can we operate it in such a way that once the button is pressed it remains in reverse and if its pressed again it goes back to forward? and do we need to debounce the button for this case?

You will need to use an external interrupt + hardware (or software, if you prefer) button debounce. Take a look at the attachInterrupt method.

Feel free if u have some doubt.. i will try to clarify it..

sir why you used statusPin in the program? What is the use of that pin?

But you are not connected that pin to the arduino.

First of all, i apologize for the very late reply. And the statuspin is Pin13 on the Arduino, which drives the inbuilt Led

You don't need to worry about that, just follow the steps and you will be good to go . Enjoy :D

Hello sir,

I am driving a 24V DC motor using arduino uno. No any special motor driver i am using.motor drives only by SPDT relay for more current requirement.but i can not control the speed of please tell me how i control the speed of motor using relay itself.or send me code of that.


Vinod Kumbhar.

Hi Surya,

Thanks for this. I have very limited or no knowledge about electronics. I am doing a DIY project just by reading stuff and using my common sense. So my questions may be ... you know :-)

I am using a 12v DC motor. I have completed the project with no electronics (relays, limit switches etc). I want to re-do the project using electronic components so that I can get more control over the working.

I read in some other place that if I use 12V motor, I need to use transistors, diodes and capacitors to manage the current without damaging the Arduino.

Can you confirm this and if possible, can you send me a connection diagram? Thanks.

-- Senthil