You are on page 1of 8

Arduino Motors and Drivetrain

Lets get started on the double gearbox and motor. First open up the double gearbox kit and
check that you have all the needed parts.





You have several different options as far as assembly goes. There are 4 different gear ratios
you can use. I started with a gear ratio of 38.2:1, this means the small motor shaft will turn
roughly 38 times for every time the drive gear on the track turns. Once I got to testing the
motors with the tracks mounted I could tell it was too low of a gear ration, the tracks would
barely move at low speed and then quickly came up to a fast speed. I changed to 344.2:1 and
the speed range was much better, but the top speed was pretty low. I would recommend you
start with 114.7:1 or 344.2:1, but feel free to experiment (more on gear ratios later). Any setting
should be able to make tracks move under no load, to at least see if things are working.



Now to get those motors turning get familiar with the Arduino motor shield.


The Arduino Uno by itself is capable of controlling a motor through any of its PWM (pulse width
modulation) ports which are ports ( 3, 5, 6, 9, 10, 11), but the board by itself cannot supply
enough current for our robot. The Uno is rated to deliver 40 mA per port (5V) and total of 200
mA for the whole board. This wont be enough for our robot. The motor shield uses up 8 ports
from our Uno, and provides 2 output channels ( A and B ) one for each motor, with these we can
get up to 2 amps per channel. The following pins are used.
(http://arduino.cc/en/Main/ArduinoMotorShieldR3 ).

Function Ch. A Ch. B
Direction D12 D13
PWM D3 D11
Brake D9 D8
Current Sensing A0 A1

We cannot use these ports for the remote control, ultrasonic sensor, or any function other than
driving the motors, but there are still plenty of free ports to do those things.
Lets start with something simple and just get a single motor working. I always try to think in the
context of an application add a little something interesting when figuring out how to do
something. Lets use our motor to demonstrate the stroboscopic effect. All we need is a piece of
heavy paper like an index card or postcard and some glue or tape. One example of the
stroboscopic effect is is known as the wagon wheel effect , which is an optical illusion where a
wheel or propeller of some kind appears to spin at a frequency different from the actual rotation
frequency, which you have probably observed looking at another vehicles tire while driving on a
highway.

Start with a postcard and draw some lines on it like so.


Then cut the two pieces out and glue them to the motor so that light and dark regions are
opposite to one another. I used hot melt glue and it worked just fine, scotch tape should work
fine too, this is just for fun, it doesnt need to be strong or last for long.


The hot melt glue dries pretty fast, and the pieces of heavy paper are so light it can be tricky to
glue them together, I found it worked best to first tape the paper to the table, then lift one piece,
place the glue and then press them together using something beside your finger. ( so you dont
burn it). After this, use the glue or tape again to attach the little propeller to the motor shaft,
youll need to devise some way of holding the motor, I used a clamp and it worked great, if you
dont have a clamp, you can probably just get by with wedging it between two heavy books.


In order to observe this effect we want to hook up the motor and then gradually increase the
speed every 2 seconds or so. First attach the motor shield and hook up the motor to channel A.
You can do this with only the usb cable attached, it should provide enough power . I went ahead
and attached the battery pack since well be using it for the robot. Note that we need 5 to 12V to
run the motor shield, these 4 AA batteries will produce about 6V, but they wont run it for very
long when we use it to run two motors and power the robot.
In order to set the speed of the motor, we need to call analogWrite() passing pin3, and the
speed we want to run the motor at, this value can be any value between 0 and 255, with 255
corresponding to the max speed. (http://www.instructables.com/id/Arduino-Motor-Shield-
Tutorial/?ALLSTEPS )

analogWrite(3, 255); //Spins the motor on Channel A
We also need to establish the direction we want the motor to turn ( this also depends on how
you have it wired). This is done with digitalWrite(), the direction for channel A is set with pin 12.
The direction the motor spins doesnt really matter for this.

digitalWrite(12, HIGH); //Establishes forward direction of
Channel A
and we need to disengage the brake for channel A, this is also done with digitalWrite().

digitalWrite(9, LOW); //Disengage the Brake for Channel A
Here is the complete code I used to gradually increase the speed and observe the stroboscopic
effect.
void setup()
{
//Setup Channel A
pinMode(12, OUTPUT); //Initiates Motor Channel A pin
pinMode(9, OUTPUT); //Initiates Brake Channel A pin
Serial.begin(9600);
}

void loop()
{
for(int i=60; i < 150; i++)
{
//forward @ full speed
digitalWrite(12, HIGH); //Establishes forward direction of
Channel A
digitalWrite(9, LOW); //Disengage the Brake for Channel A
analogWrite(3, i); //Spins the motor on Channel A
Serial.println(i);
delay(2000);
}
}

You might also like