H-Bridge

Overview

Here is an excellent tutorial on how to control your DC motor using an H bridge:

http://itp.nyu.edu/physcomp/Labs/DCMotorControl

We have several Texas Instruments SN754410 available in the supply locker. This allows you to drive your motors without needing to cannibalize a servo.

Parts

-Arduino microcontroller and carrier board

-LiPo battery

-Motor

-SN754410 (data sheet)

-Jumper wires

Prepare the breadboard

Program the Microcontroller

#define switchPin = 2    // switch input
#define motor1Pin = 12    // H-bridge leg 1 (pin 2, 1A)
#define motor2Pin = 11    // H-bridge leg 2 (pin 7, 2A)
#define enablePin = 9    // H-bridge enable pin
#define ledPin = 13      // LED
void setup()
{
  // set the switch as an input:
  pinMode(switchPin, INPUT);
  // set all the other pins you're using as outputs:
  pinMode(motor1Pin, OUTPUT);
  pinMode(motor2Pin, OUTPUT);
  pinMode(enablePin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  // set enablePin high so that motor can turn on:
  digitalWrite(enablePin, HIGH);
}
void loop()
{
  digitalWrite(motor1Pin, LOW);   // set leg 1 of the H-bridge low
  digitalWrite(motor2Pin, HIGH);  // set leg 2 of the H-bridge high
  delay(2000);
  digitalWrite(motor1Pin, HIGH);  // set leg 1 of the H-bridge high
  digitalWrite(motor2Pin, LOW);   // set leg 2 of the H-bridge low
  delay(2000);
}

3. Dual Motor Driver Carrier

Pololu TB6612FNG driver (Data Sheet)

Prepare the breadboard

Program the Microcontroller

/*----------------------------------------------------------------
Use PWM to drive a variable speed dc motor using an analog voltage
    to define the speed.
    Uses the Pololu TB6612FNG dual motor driver.
    Note: This is a first pass at coding for this chip:
       a) Can probably hardwire STBY high
       b) Could save a line since AIN1 and AIN2 are complements
          (Use a gate to invert)
         
 Derek Rowell  04/05/11      
---------------------------------------------------------------*/
#define stbyPin 3     // STBY
#define ain1Pin 4     // AIN1
#define ain2Pin 5     // AIN2
#define pwmaPin 6     // PWMA
#define potPin 0     // Pot connected to analog in A0
int Speed   = 0;
void setup()
{
  pinMode(stbyPin, OUTPUT);   
  pinMode(ain1Pin, OUTPUT);  
  pinMode(ain2Pin, OUTPUT);
  pinMode(pwmaPin, OUTPUT);
  digitalWrite(stbyPin, HIGH); 
  digitalWrite(ain1Pin, LOW); 
  digitalWrite(ain2Pin, LOW); 
}
void loop()
{  Speed = map(analogRead(potPin), 0, 1023, -255, 255);
   if (Speed > 0)
   {  digitalWrite(ain1Pin, LOW);
      digitalWrite(ain2Pin, HIGH);
      analogWrite(pwmaPin, Speed);
   }
   else
   {  digitalWrite(ain1Pin, HIGH);
      digitalWrite(ain2Pin, LOW);
      analogWrite(pwmaPin, abs(Speed));
   }
   delay(50);
}