I spent roughly $30 CDN on the Arduino branded Motor Shield V3 which uses the L293D darlington H bridge driver to provide control over 2 DC motors.
To provide this control, it consumes 8 pins of the Arduino. 6 Digital, and two Analog.
From http://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/ :
There are pins on the Arduino that are always in use by the shield. By addressing these pins you can select a motor channel to initiate, specify the motor direction (polarity), set motor speed (PWM), stop and start the motor, and monitor the current absorption of each channel .
The pin breakdown is as follows:
|Function||Channel A||Channel B|
|Direction||Digital 12||Digital 13|
|Speed (PWM)||Digital 3||Digital 11|
|Brake||Digital 9||Digital 8|
|Current Sensing||Analog 0||Analog 1|
It also provides a few handy headers for sensors.... but..... it is not an intelligent device, rather requiring all control code to be written in the Arduino Sketch.
For the same $30 CDN, I just purchased AdaFruit's Motor Shield V2 which uses a pair of Mosfet TB6612 H-Bridges for higher current capabilities to drive four DC motors, or two Stepper motors, or one Stepper and two DC motors...
These are controlled through the I2C interface.... so not taking up any other Arduino resources.
There are also pin headers that bring Arduino Pins 9 and 10 up for two 5v servos, but these are not I2C controlled... Maybe on the next revision??? Please Adafruit?
I know, I know, I can add a Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface or stack a Adafruit 16-Channel 12-bit PWM/Servo Shield - I2C interface on top of this one....
Anyway, I expect to have good results out of this controller by the weekend, and fully expect that by using the Servo Timer1 library, I will remove my timer0 issues regarding delay() and millis().