DIY Arduino Motor Shield (L298N 2x4A)
by ASCAS in Circuits > Arduino
200484 Views, 567 Favorites, 0 Comments
DIY Arduino Motor Shield (L298N 2x4A)
Today, I'm going to show you how to make an Arduino motor shield (driver) at a low cost. It works splendidly, its posses almost all the characteristics of the original Arduino motor shield. It's almost considered as a clone. The original Arduino motor shield has the same motor driver chip (L298), the only difference with it, is the package type, my project contains the vertical version of the chip L298 (with a "N").
Structure:
It's controlled using 4 PWM pins. The connections are: 11&10 for the R-Motor and 6&5 for the L-Motor. With the help of eight fast recovery diodes (1N4937) it shows a very fast response of stopping/ braking, that's why I'm going to use it for the national SUMOBOT competition.
What Is A Motor Shield?
A motor shield is a circuit that drives different loads such as motors, lights and etc... The Arduino Board (Microcontroller) itself isn't designed to operate high current loads, that's why we use motor shields, it is a circuit that is controlled by your arduino board to drive high power accessories.
Cost:
It only cost me P363.75 (Converted: $8.87)! The prices would decrease to P262.50 (Converted: $6.40) if I sticked to the original plan, since it's for competitional purposes, I substituted some parts with a higher rate of response.
About The Guide:
The guide includes the datasheet, schematic diagram, PCB layout, Arduino test files and etc.... All you need is an hour and the 6 step instructable.
Specs:
____________________________________________________
Voltage Range: 5- 50 volts
Current Range: 2-4 Amperes
Power: 25w @75°C
Working Temparature: -40°C to 150°C
Board Compatibility: Arduino Uno
Motor Outputs: 2 Motors (Left & Right)
Possible Robot Movements: Left, Right, Forward, Backward & etc..
PWM Pins: [12&11] [6&5]
The PCB layout is my original design, it was created using Fritzing Software, please ask for permission if anyone is willing to modify and republish it.
This Instructable is dedicated to the: DB Makati ROBOTICS Team
(Merry Christmas & A Happy New Year!!)
Here's A Video Of My Sumobot Containing The DIY L298N Motor Driver Circuit:
Parts & Materials
Parts:
- L298N Motor Driver Chip
- 7806 Regulator Chip
- 1N4937 Fast Recovery Diode
- 1 Ohm ¼ watt Resistor
- Screw Terminal Blocks
- PCB Board (Regular or Photo-positive)
- Male or Female Pins (Used to connect to Arduino)
- Heatsink (Bought or DIY)
7806 Regulator Chip = (Substitute: 7805- 7809)
1 Ohm ¼ watt Resistor = (Substitute: Up to 10 Ohms)
1N4937 Fast Recovery Diode = (Substitute: 1N4007 or 4148)
PCB Making
In making the photo-positive PCB, it's better to stay in a dark area and have a 10W fluorescent lamp beside you, also use a kitchen timer to set a 5 minute alarm for counting the exposure time.
Soldering the Parts
The 7806 regulator chip was also bent for the whole circuit to fit in my robot. Since I could not find a heat sink that was thin and small enough for the whole circuit to fit, I made my own heat sink by using a small sheet of metal .
Almost everything is uniform in values. The diodes are all the same, and also the resistors.
Installation of Motor Driver
Anyways, the motor outputs doesn't have a label of polarity, it's all about your codes, it has a reverse function, that's why the output polarity is interchangeable.
For the power, the left side of the terminal block is the positive and the right is the negative. There's no need for connecting a power cable to your Arduino since the 6v regulated power supply of the Motor driver circuit is connected to the "vin" pin of your Arduino board. The power input should now be connected to your Motor Driver circuit instead of the Arduino's DC Jack.
Testing Your Motor Driver (Programming & Codes)
Movements After Observing:
1st.) Forward Clockwise Motor Movement (slow)
2nd.) Forward Clockwise Motor Movement (medium)
3rd.) Forward Clockwise Motor Movement (fast)
4th.) Complete Stop
5th.) Reverse Counter-clockwise Motor Movement (medium)
Here's A Video On How The Codes Would Work: (Use headphones to hear the motors)
int outPin = 5;
int outPin2 = 6;
int outPin4 = 10;
int outPin3 = 11;
void setup()
{
Serial.begin(9600); // setup serial
pinMode(outPin, OUTPUT);
pinMode(outPin2, OUTPUT);
pinMode(outPin3, OUTPUT);
pinMode(outPin4, OUTPUT);
}
void loop()
{
delay(3000);
analogWrite(outPin, 50);
digitalWrite(outPin2, LOW);
analogWrite(outPin3, 50);
digitalWrite(outPin4, LOW);
Serial.print(" ");
Serial.print("slow");
delay(3000);
analogWrite(outPin, 150);
digitalWrite(outPin2, LOW);
analogWrite(outPin3, 150);
digitalWrite(outPin4, LOW);
Serial.print(" ");
Serial.print("med");
delay(3000);
analogWrite(outPin, 255);
digitalWrite(outPin2, LOW);
analogWrite(outPin3, 255);
digitalWrite(outPin4, LOW);
Serial.print(" ");
Serial.print("fast");
delay(3000);
analogWrite(outPin, 0);
digitalWrite(outPin2, LOW);
analogWrite(outPin3, 0);
digitalWrite(outPin4, LOW);
Serial.print(" ");
Serial.print("stop");
delay(3000);
analogWrite(outPin2, 100);
digitalWrite(outPin, LOW);
analogWrite(outPin4, 100);
digitalWrite(outPin3, LOW);
Serial.print(" ");
Serial.print("backwards");
delay(3000);
analogWrite(outPin, 0);
digitalWrite(outPin2, LOW);
analogWrite(outPin3, 0);
digitalWrite(outPin4, LOW);
Serial.print(" ");
Serial.print("stop");
}