DIY Arduino Motor Shield (L298N 2x4A)

199K568104

Intro: 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:

STEP 1: Parts & Materials

I bought my parts from ALEXAN, a local electronic store with tons of branches (Found Only In The Philippines). Everything is cheap here, the links that I gave are only alternative for online purchases. My real price list and spending is a lot different and cheaper. If you live in the Philippines, you can buy parts from DEECO, Alexan, E-Gizmo or Raon.

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)

STEP 2: PCB Making

In this step, I will show you the schematic diagrams, datasheets and PCB layouts. Just download the files below. If you don't know how to make a PCB, please visit my other instructable guide "DIY Customized Circuit Board (PCB Making)". I used a Photo-postive PCB board instead of the traditional toner transfer. The photo-postive PCB is a bit rare in the U.S. that's why some should stick with the toner transfer method. Also don't forget to drill holes on them :)))

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.


STEP 3: Soldering the Parts

I've bent the L298N chip with a pair of long nose pliers to fit into my robot (sumobot). Please pay particular attention to the part placement. The diodes should be soldered with their proper polarity. Please do not throw the leads that you have just cut since you are going to use them for your jumpers (recycle!).

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.

STEP 4: Installation of Motor Driver

The whole thing should fit snugly on top of your Arduino board, before powering it, be sure to check that nothing protrudes on your board that could cause short circuiting between both boards (crystal, Atmega Chip, IDE, USB, Pins & etc...)

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.

STEP 5: Testing Your Motor Driver (Programming & Codes)

Here's an Arduino code used to TEST the motor driver circuit. There are two options, it's either your copy and paste it or just download the Arduino file below, please do not remove the file from the folder after extracting, since the file will corrupt.

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");
}

STEP 6:

Your'e Done!!Enjoy your DIY made motor driver! Have fun making Robots!

Troubleshooting:
- Repair damaged Foil layout
- Wrong Part Placement
- Damaged Chip (L298N/ 7806)
- Burnt Diode and Resistors
- Short Circuiting 
- Missing Jumpers
- etc.......... Please leave a comment or contact me if you are having trouble with your motor driver circuit. Be sure to rate the ible' 

Merry Christmas and a Happy New Year !!! (12/24/12)

95 Comments

First of all, thank you for the great instructable!!
Unfortunately, I have a problem- my motor shield only drives the motor when the usb cable of the arduino is connected. I really can't understand why this is happening.. Can you think of a possible reason?

I just reviewed the PCB board layout and it does appear to connect Vin and GND correctly on the pins. If you use a 7805 voltage regulator - it may be the problem. Follow my logic. The Vin goes through the Arduino on board voltage regulator and if it is getting 5 volts, it won't be able to supply 5 volts. Based on the datasheet of the 7805 - you should have at least 2 volts higher then the voltage out. So it needs to be at least 7 volts. So they may keep the arduino from running correctly. I don't know the tolerances of the Vin voltage and from arduino to ardunio, it may also very.

If the pictures - he show a 7806.

That happened to me several times, I also felt frustration before, but I solved the problem. I manufactured 10 of these shields for the school. Be sure to read my instructions below thoroughly, and inspect your PCB carefully!

1st.) Power source should be connected to the Motor shield
2nd.) You forgot to solder the 7805 regulator chip
3rd.) The 7805 Regulator's pins aren't connected properly
4th.) You forgot a jumper (the short one in the lower right)
5th.) There's a broken line in your PCB

If this doesn't work try to contact me again. Thanks!



Hi, excellent instructable.
If you put a silicon diode (1N4001) in forward mode between pin 2 of 7805 and ground you will have aprox 5.7 volts at the output pin.

Regards
I'm not sure. I only use the circuit with PWM pins coming from the Arduino. Probably it will work, but i don't think the output pin will retain the voltage from the input pin.
Indeed I was impressed by your heat sink
Very interesting instuctable. I was surprised how well your pcb came out. All the ones I make turn out rubbish! Any special tricks? :) Thank you again and ill be reading this in depth later!
I print only one time on glossy paper. Transfer that to a clean piece of copper pertinax board, put a hot iron ont for 3 min, then use the point of the iron to really press down the edges and then throw it in water and rub off the paper.
Etching in HCl H2O2. No real problems
Thanks! The trick is in the toner ink transfer method is to use a sheet of acetate then, over lap them three times :)))
you mean print it 3 times on the same sheet?
looks great!!
Did not know Alexan. May come in handy
Great Instructable for the Robotics Community !
Merry Christmas to you as well and a most prosperous new year

Great Ible well done
Nice to find a kababayan here, and also a fellow Lasallite! (ECE cum CompSci)
Just started on Arduino/RaspPi last year.
Hope you are doing well by now :)
I have a 1.7V, 0.8A rated (6wire) stepper motor.....which driver is suitable for this motor?
Hi! May I ask. What type of sensor you used for the floor and face? Thanks!
Hello po. Ask ko lang if what kind of sensor you used for the floor sensor and for the face sensor? Thanks!

Hi great tutorial is the test coding above for only one motor?

what power supply is needed

More Comments