Introduction: Simple, Cheap Motor Driver Board for Arduino
Many projects with Arduino often need motors, whether it is a car or a vacuum cleaner or anything else. But the problem is that you cannot connect a motor directly to Arduino as the output current is very low. So, you can use an H-bridge circuit to operate the motors. The H-bridge circuit can operate the motors in both directions (clockwise and anti clockwise), but in many projects you don't need a motor to turn in both directions (e.g. fan). In such cases, it is a waste of money to buy an H-bridge circuit. So, in this instructable I'm going to show you how to make a motor driver board using transistors which can power two motors. This motor driver board will be able to operate the motors only in one direction, but would be cheaper than an H-bridge (E.g. For me, H-bridge would cost about Rs 150+ , whereas I could make this board in about Rs 30); and more importantly it's fun to do it.
Step 1: Components and Tools Needed
COMPONENTS:
2* BC-547 Transistor (NPN)
2* 1k Ohm resistor
2* capacitor (between 1 and 5 uF) (I used 2.2 uF)
Stack headers
Perf board (Any size you like, you can cut it later)
Bread Board (for prototyping)
Single stranded wire
TOOLS:
Soldering iron
FOR TESTING;
Arduino (Any will do)
9v Battery
Step 2: The Circuit
Now, for the circuit. There are two transistors which do the same thing, have the same connections except the motors they power are two different ones, and their bases are connected to two different pins on Arduino, one is connected to pin 10 and the other 11 (refer to first picture).
When either of the transistor's base goes HIGH, it forms connectivity between the collector an the emitter (refer to the second picture) . As +9v is connected the collector and the motor is connected to the emitter the motor starts spinning (refer to the first picture). The capacitor is connected to protect the Arduino from noise created by the motor.
Now assemble the circuit on your breadboard, as it is not a good idea to do it on the perf board before making sure that your circuit is working (diagram shown in first picture). To make sure that your circuit is working upload the sketch given below. Connect the battery as shown in the first picture.
If your circuit works, then the motor would be stationary at the beginning then will gradually increase its speed then stop again (the same thing would keep repeating).
Step 3: Perf Board It!!
If your circuit works then it's ready for perf boarding. I haven't made it as a shield because it uses very few pins of the Arduino so, it is much harder to make it as a shield. Instead I have made it as a separate board with wires sticking out of it which you have to connect to the Arduino. But if you like, you can make it as a shield (here is a link to help you on how to make shields - https://www.instructables.com/id/How-to-Make-Custom...) .
To create a circuit board, solder all components shown in the fritzing image above to your perf board (except for the Arduino, of course). If you don't know how to solder on perf board watch the video below (This is not my video, of course).
After you have finished soldering on the perf board, test it out and your motor driver is ready!

Participated in the
Robotics Contest 2016
16 Comments
7 years ago
Another remark: in your circuit you first put your load, and then your transistor or mosfet. Otherwise you won't have 9V over your motors as you can see in the link below
http://goo.gl/vSLRCM
Reply 7 years ago
Thanks for telling me. I saw the simulation but I did not understand why that happens and how it makes a difference. Could you tell me?
Thanks.
Reply 7 years ago
The voltage at the emitter can maximum be 0.7V below the voltage at the base. So in the case where the load is connected to the emitter, the load only sees 4.3V approx. Over a 1k resistor, you have 4.3mA. The transistor is a current amplifier (x100 approx.) So the current flowing thru the base is 4.3/100 = 43µA. Over the 1k resistor at the base, you have a voltage loss of 43µA*1k=43mV. (so in reality there is only 4.957V at the base)
When the load is connected to the collector, you can see that the emitter is grounded (0V) So in theory, when you have 4.3V over a 0 ohm resistor, you have infinite ampere. So the resistor at the base counts. There you have 5V-0.7V (from the transisitor) over a 1k resistor. this gives 4.3mA. The transistor amplifies this to maximum 0.43A. With the load of 1k and a voltage of 9V, you need around 9mA. Which is a lot less than the maximum that the transistor can deliver.The full power is released to the load.
Hope this helps, if not, just ask...
Reply 7 years ago
Thanks. It was really help full. If you have any more suggestions please tell me.
7 years ago
easy project. but i think using breadboard is a good idea for prototyping. see how i started from breadboard and shifted to box here https://www.instructables.com/id/Arduino-Based-Sola...
Reply 7 years ago
Thanks, I saw your intructable and it is great. It is a really nice idea to use a old router as a case. Please tell me if you have any more suggestiones.
Reply 7 years ago
You are welcome :) if you need any help with arduino i will be there :)
7 years ago
Nice project. I like seeing folks still making one-off circuits. Days past so many folks were into making circuits, but it seems computer tech has removed so much of the basic component ideas these days.
It seem like you are basically using the NPN transistor(s) for on/off switching transistors. If that is all you are doing, a relay would work equally well. But you could use the Arduino to drive the motors through a variable speed circuit using transistors or even MOSFETS. Just a thought. Nice project anyways and glad you are into electronics. A very good field to be into by the way!
Reply 7 years ago
I guess MOSFET's would be the better option since they can handle higher current for larger motors.
Reply 7 years ago
You could use a MOSFET, but it isn't necessary for small motors like the ones I used in the picture. BTW if you have any suggestions please tell me.
Reply 7 years ago
Thank you. Yes of course you can use relays instead of transistors which will work fine. But as I'm not using any heavy duty motors and I'm using a simple 200 mah 9v battery it is not really necessary to use MOSFETS or relays. But if you are using a high power battery or power hungry motors you could use them.
Reply 7 years ago
I fully agree.
However, though I built many circuits in my days, it seems we have come to a point that at least financially it isnt worth building various things anymore, seeing what the price for e.g. a motordrive module is nowadays.
I know some people critcise me for remarks like this, but it is just a fact. Still buying a module doesnt beat the satisfaction of indeed grabbing a few components, soldering them together and see it work.
Well done
7 years ago
Just curious: instead of capacitors to reduce noise, could you use diodes between the Arduino and the motors? It seems like that would protect the Arduino from noise and from stray currents.
Reply 7 years ago
Yes you can, like like the person above mensioned you can use Fly back diodes instead of a capacitor.
7 years ago
I'd suggest using flyback diodes to prevent current surge from motors
https://en.wikipedia.org/wiki/Flyback_diode
Reply 7 years ago
Thanks. I am pretty new in electronics so please continue giving such suggestions. I checked the Wikipedia page and I think a fly back diode will work