Is there an Arduino Shield to drive 3 servo simoltaneously?

I'd like to build a robot with 2 360° rotate servo for wheels and one standard for a ping sensor. Thanks

There are shields to drive many servos simultaneously. But, for three, you don’t need a shield.

Id like to place a shield to have a more compact hardware group, however can you say me exactly what i have to use please? Which arduino shields drives more servo toghether? Thanks for all

The servo control wires just plug into digital pins. No shield is required.

Yes but i have three wires:, ground, vc, signal for each servo? The signal into an arduino pin ok, but i need extra power, i suppose 6v, an more ground. if i use a breadboard perhaps can do this, doesnt it so? For this i ask about a shiled. Thanks again

Try this:

Thanks for reply

Cello, sorry I couldn’t get back to you sooner… Life has been absolute bonkers for me the past month. (work, more work, and… Did I mention more work? the life of a school bus driver never ends.)

This is the modified code from the instructable:

PingBot-II  By Stephen Griswold (

The code is from a project on Instructables, called the PingBot, using
the Adafruit Motor Controller.  I, however, use a pair of modified Futaba
S3004 servos, converted to constant rotation servos by redirecting the
position potentiometer out the side, and removing the stop tab from the
main drive gear.  I removed the code for the motor control board, and added
the two servo values to the left & right wheels.  With this, I had to divide
the wait time for the servos, because the servos were actually running a little
faster than the motors would.

The body, is a knock-off of a Lock-N-Lock food container, power is provided by a
7.2V RC battery, and power is regulated down to +5V for the servos & PING)), through
a 7805 voltage regulator. The placement of the board & battery are loose inside the
container, but slow movement doesn't jostle it around. The pivot wheel on the back, is
a movable model aircraft wheel, and yes, it is oversized. This provided a little extra
angle for detecting obstacles that are lower. It's not perfect, but it's working!

#include <Servo.h> // Enables the Servo library

Servo PingServo;  // Servo for the PING)) sensor position
Servo LeftWheel;  // Servo for the Left Wheel
Servo RightWheel; // Servo for the Right Wheel

int minSafeDist = 11 ; // Minimum distance for ping sensor to know when to turn, 11-Inches
int pingPin = 7; // Ping sensor is connected to port 7
int centerDist, leftDist, rightDist; // Define variables center, left, right distance
long duration, inches; // Define variable for Ping sensor

void setup() {
PingServo.attach(10); // Servo is attached to pin 10 in the motor shield
PingServo.write(90); // Center the Ping sensor (puts it at 90 degrees)
LeftWheel.attach(9); //  Left Wheel Servo
RightWheel.attach(8); // Right Wheel Servo

Serial.begin(9600); // Enables Serial monitor for debugging purposes
Serial.println("Serial test!"); // Test the Serial communication


void AllStop() {
LeftWheel.write(90); // Stop Left Servo
RightWheel.write(90); // Stop Left Servo

void AllForward() { // Makes the robot go forward
LeftWheel.write(180); // Motor 1 goes forward
RightWheel.write(0); // Motor 2 goes forward
Serial.println("Going forward"); // Prints a line in the serial monitor
void turnRight() { // Makes the robot go right
RightWheel.write(180); // Turns motor 2 backward
LeftWheel.write(180); // Motor 1 goes forward
delay(800); // Time required to turn right (0.8 seconds)
Serial.println("Motors going Right"); // Prints a line in the serial monitor
void GoBack(){ // Makes the robot go back
RightWheel.write(180); // Motor 2 goes back
LeftWheel.write(0); // Motor 1 goes back
delay(800); // Time Required to go back (0.8 seconds)
Serial.println("Backward"); // Prints a line in the serial monitor
void turnLeft() { // Makes the robot go Left
RightWheel.write(0); // Motor 2 goes forward
LeftWheel.write(0); //  Motor 1 goes backward
delay(800); //Time Required to turn left (0.8)Seconds
Serial.println("Motors going Left");// Prints a line in the serial monitor

// Starts the loop to decide what to do
void loop()
Serial.println(" inches"); // Prints a line in the serial monitor
if(inches >= minSafeDist) /* If the inches in front of an object is greater than or equal to the minimum safe distance (11 inches), react*/
AllForward(); // All wheels forward
delay(110); // Wait 0.11 seconds
}else // If not:

AllStop(); // Stop all motors
LookAround(); // Check your surroundings for best route
if(rightDist > leftDist) // If the right distance is greater than the left distance , turn right
}else if (leftDist > rightDist) // If the left distance is greater than the right distance , turn left
}else if (leftDist&&rightDist<minSafeDist) // If the left and right distance is smaller than the min safe distance (11 inch) go back

//Send a signal from the PING))), and see where we are?

unsigned long ping() {
pinMode(pingPin, OUTPUT); // Make the Pingpin to output
digitalWrite(pingPin, LOW); //Send a low pulse
delayMicroseconds(2); // wait for two microseconds
digitalWrite(pingPin, HIGH); // Send a high pulse
delayMicroseconds(5); // wait for 5 micro seconds
digitalWrite(pingPin, LOW); // send a low pulse
pinMode(pingPin,INPUT); // switch the Pingpin to input
duration = pulseIn(pingPin, HIGH); //listen for echo

/*Convert micro seconds to Inches

inches = microsecondsToInches(duration);

long microsecondsToInches(long microseconds) // converts time to a distance
return microseconds / 74 / 2;

void LookAhead() {
PingServo.write(90);// angle to look forward
delay(175); // wait 0.175 seconds

void LookAround(){
PingServo.write(0); // turn ping)) right
delay(320); // wait 0.32 seconds
rightDist = inches; //get the right distance
PingServo.write(180); // look to the left
delay(620); // wait 0.62 seconds
leftDist = inches; // get the left distance
PingServo.write(90); // face straight ahead
delay(275); // wait 0.275 seconds

// Prints a line in the serial monitor
Serial.print("RightDist: ");
Serial.print("LeftDist: ");
Serial.print("CenterDist: ");

the power for the servos, are drawn off a 7805 regulator, which is fed in parallel with the Arduino’s power socket, from a 7.2V RC car battery pack. Nothing drastic, just simple changing the code from the Adafruit motor controller board, to simple 0-180 control of the servos, with 90 being a dead-stop position. (using the potentiometers, fed out the side as trimmers, simply sending a servo.write(90) to the servo, and tweaking it till it dead stops (no humming, and zero movement of the drive gear.)

You might have to tweak the delay times for movement, as I recently increased the box (and wheel) size, and the original values (in this code) needed to be increased to compensate… A quick demo of the original design, is at

I’m still working on it from time to time, but not getting as much time as I’d like… I just recently picked-up some tips from another Instructable, on how to program the Arduino to be a stand-alone web server, Using the Wiz-5100 ethernet shield w/SD card… trying to jot-down a small HTML page to control the robot from remote. (plenty of room in the new box, to put a small WiFi router, and it runs off the same battery!)

Stephen (gelfling6)

Thank you for your courtesy. Drive the typical school bus that we see in Italy in the movies? Yellow and students inside that scream? ;-)

I love the robot, all the best ones have a bit of personality about them.

Duane B