Interfacing DC motor with Arduino

Interfacing a DC motor with an Arduino allows you to programmatically control the motor’s speed and direction. This Answer will cover the basic hardware setup required to interface a DC motor with an Arduino using a motor driver (L293D).

Hardware required

To implement the circuit for the given Arduino code, you’ll need the following components:

  • Arduino board (e.g., Arduino Uno)

  • DC motor

  • L293D motor driver module

  • Power supply (battery or external power source) for the motor

  • Breadboard and jumper wires

L293D motor driver

The L293D is a popular motor driver IC that allows you to control the direction and speed of a DC motor using digital inputs from the Arduino. It provides H-bridge configurations to drive the motor in both forward and reverse directions. The pin-level description of L293D is given as:

pin description of L293D motor driver
pin description of L293D motor driver

Circuit connections

  1. Connect the DC motor to the L293D motor driver:

    1. The L293D motor driver has two outputs, Out1 and Out2, for controlling the motor in one direction (e.g., forward).

    2. Connect one terminal of the motor to Out1 of the motor driver.

    3. Connect the other terminal of the motor to Out2 of the motor driver.

  2. Connect the motor driver to the Arduino:

    1. Connect the motor driver's Enable 1 (ENA) input to a PWM-enabled digital pin (e.g., pin 6) on the Arduino. The ENA pin controls the motor’s speed.

    2. Connect the In1 and In2 inputs of the motor driver to two other digital pins (e.g., pins 7 and 8) on the Arduino. These pins control the motor’s direction.

  3. Power the motor and motor driver:

    1. Connect the Vcc1 pin of the motor driver to the Arduino’s 5V pin.

    2. Connect the Vcc2 pin of the motor driver to the external power supply’s positive terminal. This power supply should suit the motor’s voltage and current requirements.

    3. Connect the motor driver's GND pin to the Arduino’s GND and the external power supply’s negative terminal (common ground).

Circuit diagram

Circuit diagram
Circuit diagram

Code

Once you’ve wired up the hardware, you can control the motor in your Arduino code. Here’s a simple example of rotating the motor in one direction:

const int ENA = 6; // PWM-enabled digital pin connected to ENA of the motor driver
const int IN1 = 7; // Digital pin connected to IN1 of the motor driver
const int IN2 = 8; // Digital pin connected to IN2 of the motor driver
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
}
void loop() {
// Rotate the motor in one direction (forward)
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 150); // Adjust the value (0-255) to control the motor speed
}

Observations

In this setup, the L293D motor driver receives control signals from the Arduino through the IN1, IN2, and ENA pins. By setting the IN1 and IN2 pins to HIGH or LOW, you can control the motor’s direction, and by using PWM on the ENA pin, you can control the motor’s speed.

Remember that the speed may vary depending on the motor and the external power supply’s voltage and current ratings. Ensure the motor driver and external power supply can handle the motor’s current requirements to avoid damaging the components. Additionally, if you want to rotate the motor in the opposite direction, you can switch the states of the IN1 and IN2 pins.

The speed of the motor can be controlled by changing the ENA (PWM pin) value.

Overall, interfacing a DC motor with an Arduino using a motor driver provides a flexible and efficient way to control motor speed and direction, enabling you to create various robotics and automation projects.

For more exciting projects, check these out.

Copyright ©2024 Educative, Inc. All rights reserved