Controlling a DC Motor With Raspberry Pi4

by sarful in Circuits > Raspberry Pi

21 Views, 0 Favorites, 0 Comments

Controlling a DC Motor With Raspberry Pi4

dht11_bb.jpg

Introduction

In this tutorial, I will show you how to connect some motors to your Raspberry Pi4. DC Motor with Raspberry Pi lies with the Motor Driver. What is motor Driver: A Motor Driver is a special circuit or IC that provides the necessary power (or rather the current) to the motor for smooth and safe operation.

we should never connect a motor directly to Raspberry Pi

Circuit Diagram

dht11_bb.jpg

Components Required

  1. Raspberry Pi 4 Model B
  2. L298N Motor Driver Module
  3. Lipo Battery 3300mAh
  4. Connecting wires (Jumper Wires)
  5. 5V – 2A Power Supply for Raspberry Pi
  6. 5V DC Motor

with Motor Driver Module-L298N, we can actually control two motors. For simplicity reasons, I’ll demonstrate the circuit, working, and program for controlling a single DC Motor with Raspberry Pi4.
Short Brief Motor Driver Module-L298N :

From this Datasheet, This dual bidirectional motor driver is based on the very popular L298 Dual H-Bridge Motor Driver Integrated Circuit. The circuit will allow you to easily and independently control two motors of up to 2A each in both directions.It is ideal for robotic applications and well suited for connection to a microcontroller requiring just a couple of control lines per motor. It can also be interfaced with simple manual switches, TTL logic gates, relays, etc. This board equipped with a power LED indicators, onboard +5V regulator, and protection diodes.

Python Program for Controlling a DC Motor with Raspberry Pi

import RPi.GPIO as GPIO
from time import sleep

# Pins for Motor Driver Inputs 
Motor1A = 21
Motor1B = 20
Motor1E = 16
 
def setup():
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)              # GPIO Numbering
    GPIO.setup(Motor1A,GPIO.OUT)  # All pins as Outputs
    GPIO.setup(Motor1B,GPIO.OUT)
    GPIO.setup(Motor1E,GPIO.OUT)
 
def loop():
    # Going forwards
    GPIO.output(Motor1A,GPIO.HIGH)
    GPIO.output(Motor1B,GPIO.LOW)
    GPIO.output(Motor1E,GPIO.HIGH)
    print("Going forwards")
 
    sleep(5)
    # Going backwards
    GPIO.output(Motor1A,GPIO.LOW)
    GPIO.output(Motor1B,GPIO.HIGH)
    GPIO.output(Motor1E,GPIO.HIGH)
    print("Going backwards")
 
    sleep(5)
    # Stop
    GPIO.output(Motor1E,GPIO.LOW)
    GPIO.output(Motor1B,GPIO.LOW)
    print("Stop")

def destroy():  
    GPIO.cleanup()

if __name__ == '__main__':     # Program start from here
    setup()
    try:
            loop()
    except KeyboardInterrupt:
 	destroy()