Driving a DC motor with an Arduino and the L293D motor driver 
Tags: beginners, iot, motor, tutorial
Published: 2018-06-07 14:37:54

---
title: Driving a DC motor with an Arduino and the L293D motor driver 
published: true
description: In this tutorial, we'll be looking at how to power and drive a DC motor with an L293D and an Arduino
tags: #beginners #iot #motor #tutorial
---
![alt text](https://s3-eu-west-1.amazonaws.com/wia-flarum-bucket/2018-06-07/1528381887-132077-dc-motor-arduino-2.png)
In this tutorial, we'll be looking at how to power and drive a DC motor with an L293D and an Arduino (we're using the Arduino MKR 1000 here, but you can use any Arduino that provides enough voltage for your motor, and has 2 digital output pins). 
The L293D is a 16-pin Motor Driver IC which can control up to two DC motors simultaneously, in any direction.


###**You will need**

* Arduino board of your choice
* Micro USB cable
* L293D motor driver
* DC motor
* Breadboard
* Jumper wires
* [Arduino IDE](https://www.arduino.cc/en/main/software)

###**Connecting the components**

First, let's hook up the components on the breadboard. Below you'll see a pin diagram of the L293D - note the location of each of the pins, relative to the notch at the top.

![alt text](https://files.readme.io/850b98a-L293D-pinout.png)

Since we're just driving one motor for this tutorial, we won't be using all of the motor driver's pins.

* Start by plugging your Arduino into a power source (such as your computer)
* Connect `GND` and `5V` on the Arduino to one side of the breadboard, and extend to the other side with jumper wires
* Place the L293D in the center of the breadboard, with half of the pins on either side of the breadboard
* Connect `5V` to `Enable 1`, `Vss`, and `Vs` on the L293D
* Connect digital output pins (we're using 6 and 7) to `input 1` and `input 2` on the L293D
* Connect your Arduino's `GND` to both `GND` pins on the same side of the L293D
* Finally, connect `output 1` and `output 2` of the L293D to your motor pins

*Note: The `Vs` pin on the motor driver supplies power to the motor. If your motor requires more voltage than your Arduino can provide, you can hook up an external battery or battery pack. Simply connect the negative lead to `GND` on the breadboard, and the positive lead to the `Vs` pin of the L293D.*


Once that's all connected, it should look a little something like this:
![alt text](https://files.readme.io/d45570e-IMG_20180601_132215-2.jpg)

###**The Code**

Note: If you are completely unfamiliar with the Arduino IDE, watch [this video](https://www.youtube.com/watch?v=nbD_V4QtNvY) to give you a better understanding of how it works.

In the Arduino IDE:

* Make sure the correct port is selected under `Tools > Port`
* Make sure the correct Arduino board is selected under `Tools > Board`
* Click on File > New to create a new Sketch
* Copy and paste the code below, replacing the `motorPin1` and `motorPin2` values if you're using output pins other than 6 and 7 on your Arduino
```
// Define the pin numbers
int motorPin1 = 6;
int motorPin2 = 7;

void setup() {
  // Set the pin modes of the above IO pins to OUTPUT
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
}

void loop() {
  // Turn the motor in one direction
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
}
```
* Go to `Sketch > Upload` to upload the code to your Arduino

Once the sketch is uploaded successfully, the motor will turn in one direction. 
If you want to change the direction, simply reverse `HIGH` and `LOW` in the `loop` function.

To take this one step further, [connect your device to Wia](https://developers.wia.io/docs/getting-started-add-a-device) and add [Commands](https://developers.wia.io/docs/add-a-command) and [Flows](https://developers.wia.io/docs/getting-started-build-a-flow). If you have any questions, reach out to us using the chat icon at the bottom right hand side of [our site](https://www.wia.io/)!