DC Motor is the equipment which converts electrical power to mechanical power. DC motors are fast and continuous rotation motors mainly used for anything that needs to rotate at a high rotation per minute (RPM). DC Motors are used in car wheels, fans etc.
In this project we will use L293D motor driver IC to control the motor and that allows the motor to rotate in both the direction. The L293D is designed to provide bidirectional drive currents of up to 600-mA at voltages from 4.5 V to 36 V.
The L293D motor IC uses two pins referred to as inputs to sense the desired direction of the output, and another pin called Enable to sense On/Off. So, in our code, with the Enable pin On, if we want the motor to spin forward, we'll set input 1 to 'True' or 'HIGH', and input 2 to 'False' or 'LOW'. And if we want it to spin backwards, we'll set input 1 to 'False" or 'LOW' and input 2 to 'True' or "HIGH'. If both inputs are True or both are False, the motor will not run.
The motor needs about 400 mA current to start, so use external power. Don’t connect motor directly to Raspberry-PI’s GPIO pins, otherwise your PI will be damage.
- Pin1 and Pin9 are "Enable" pins. If they pulled low (GND), then the outputs will be turned off regardless of the input states, stopping the motors.
- Pin4, Pin5, Pin12 and Pin13 are ground pins which should ideally be connected to Ground pin (Pin no. 6, 9, 14, 20, 25, 30, 34 or 39) of Raspberry-PI
- Pin2, Pin7, Pin10 and Pin15 are logic input pins. These are control pins which should be connected to Raspberry PI’s GPIO Pins. Pin2 and Pin7 control the first motor (left); Pin10 and Pin15 control the second motor(right).
- Pin3, Pin6, Pin11, and Pin14 are output pins. Tie Pin3 and Pin6 to the first motor, Pin11 and Pin14 to second motor.
- Pin16 powers the IC and it should be connected to +5 V Pin (Pin no. 2 or 4) of Raspberry-PI
- Pin8 powers the two motors and should be connected to positive lead of a secondary battery. As per the datasheet, supply voltage can be as high as 36 Volts.
import RPi.GPIO as GPIO
GPIO.setup(5,GPIO.OUT) #Left motor input A
GPIO.setup(7,GPIO.OUT) #Left motor input B
GPIO.setup(11,GPIO.OUT) #Right motor input A
GPIO.setup(13,GPIO.OUT) #Right motor input B
GPIO.setup(40,GPIO.OUT) # for enable
GPIO.setup(38,GPIO.OUT) # for enable
print("Rotating both motors in clockwise direction")
time.sleep(5) #five second delay
print("Rotating both motors in anticlockwise direction")