3 Simple Ways to
Share What You Make

With Instructables you can share what you make with the world — and tap into an ever-growing community of creative experts.

PhotosPhotos

Share one or more photos of a project, recipe, or whatever you've made, quickly and easily.

Step by StepStep-By-Step

Share your step-by-step photos with text instructions of what you made so others can do it too!

VideoVideo

Share your how-to video. You'll need your embed code from a video site such as YouTube.

Arduino Controlled Servo Robot (SERB)

Step 6Programming

Programming
The physical robot is finished time to start giving it a brain.

Before we get into the details of programming an Arduino Controlled Servo Robot - (SERB) - a few links to some excellent Arduino programming resources on the internet.

Arduino Starter Guide - A guide to help you start with Arduinos, from downloading the programming environment to writing your first program.

Arduino Programming Reference - A complete easy to reference guide to the Arduino programming language.

How Servos Work - A quick primer to how servo motors work.

Arduino Servo Library - How the Arduino Servo library works (how we control our servos).

Alright with the learning out of the way lets get programming. There are three ways to get started programing your Arduino Controlled Servo Robot - (SERB).

Option 1: (Modifying SERB_Test.pde)
Sometimes when programming the easiest thing to do is take a working program and start adding your own code to it. To do this download the SERB_Test zipped program (07-(SERB)- SERB-Test Arduino Program.zip). Proceed to unzip this in your Arduino sketch folder (default "My Documents\Arduino\"). Finally open the Arduino programming environment and download it to your Arduino. The code is well commented.
(or copy and paste the code from the appendix on this step to a new Arduino Sketch)

Option 2: (Adding SERB Routines to your program)
Add some simple routines to your pre-existing program (like goForward(), setSpeed(int) etc.). To do this download the routines in the text file (07-(SERB)- Simple Routines Text.txt).
1. Copy and paste the preamble portion to the beginning of your program.
2. Copy and paste the routine portion to the body of your program.
3. Add a call to serbSetup(); to your setup() routine.

Option 3: (Creating your own program from scratch)
This is not too difficult. All that is required is to familiarize yourself with the Arduino Servo Library. Then the right servo is connected to pin 9, and the left servo to pin 10.

note: Additional programs will be added here as they are developed; or if you develop something and would like it featured send me a private message and it can be added.

Appendix: (SERB_Test.pde Code)

/* * Arduino Controlled Servo Robot (SERB) - Test Program * For more details visit: http://www.oomlout.com/serb  *  * Behaviour: A simple test program which causes the SERB *            to turn randomly either left or right for a  *            random time period between 0.1 and 1 second. *            The SERB will then drive forward for a random  *            time period between 1 and 2 seconds. Finally *            pausing for 2 seconds before starting again. * * Wiring: Right Servo Signal - pin 9 *         Left Servo Signal - pin 10  * * License: This work is licenced under the Creative Commons  *          Attribution-Share Alike 3.0 Unported License. To  *          view a copy of this licence, visit  *          http://creativecommons.org/licenses/by-sa/3.0/  *          or send a letter to Creative Commons, 171 Second  *          Street, Suite 300, San Francisco, California 94105,  *          USA. *         */  //--------------------------------------------------------------------------// START OF ARDUINO CONTROLLED SERVO ROBOT (SERB) PREAMBLE#include <Servo.h>#define LEFTSERVOPIN  10  #define RIGHTSERVOPIN  9Servo leftServo; Servo rightServo; int speed = 100; //sets the speed of the robot (both servos)                  //a percentage between 0 and 100// END OF ARDUINO CONTROLLED SERVO ROBOT (SERB) PREAMBLE//--------------------------------------------------------------------------/* * sets pins to appropriate states and attaches servos. Then pauses * for 1 second before the program starts*/ void setup()                  {  serbSetup();                       //sets the state of all neccesary                                      //pins and adds servos to your sketch  randomSeed(analogRead(0));         //sets the random number seed with                                      //something mildly random  delay(1000);}/* * turns the robot either left or right (randomly) for a period between  * 0.1 and 1 second. Before going forward for a random time period  * between 1 and 4 seconds. Before pausing for two seconds then starting * again.*/void loop()                     {   turnRandom(100,1000);            //Turns randomly left or right for a                                     //randomtime period between .1 second                                     //and one second   goForwardRandom(1000,2000);      //Goes forward for a random time period                                     //between                                     //1 and 2 seconds   goStop();                        //Stops the robot   delay(2000);                     //pauses for 2 seconds (whilst stopped)}/* * turns the robot randomly left or right for a random time period between * minTime (milliseconds) and maxTime (milliseconds) */void turnRandom(int minTime, int maxTime){  int choice = random(2);                     //Random number to decide                                               //between left (1) and right (0)  int turnTime = random(minTime,maxTime);     //Random number for the pause                                               //time  if(choice == 1){ goLeft();}                 //If random number = 1 then turn                                               //left  else {goRight();}                           //If random number = 0 then turn                                               //right  delay(turnTime);                            //delay for random time                         }/* * goes forward for a random time period between minTime (milliseconds) * and maxTime (milliseconds) */void goForwardRandom(int minTime, int maxTime){  int forwardTime = random(minTime,maxTime);  //determine a random time to                                               //go forward  goForward();                                //sets the SERB forward  delay(forwardTime);                         //delays for random time period}//------------------------------------------------------------------------//START OF ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES/* * sets up your arduino to address your SERB using the included routines*/void serbSetup(){  setSpeed(speed);  pinMode(LEFTSERVOPIN, OUTPUT);     //sets the left servo signal pin                                      //to output  pinMode(RIGHTSERVOPIN, OUTPUT);    //sets the right servo signal pin                                      //to output  leftServo.attach(LEFTSERVOPIN);    //attaches left servo  rightServo.attach(RIGHTSERVOPIN);  //attaches right servo  goStop();}/* * sets the speed of the robot between 0-(stopped) and 100-(full speed) * NOTE: speed will not change the current speed you must change speed  * then call one of the go methods before changes occur.*/ void setSpeed(int newSpeed){  if(newSpeed >= 100) {newSpeed = 100;}     //if speed is greater than 100                                             //make it 100  if(newSpeed <= 0) {newSpeed = 0;}         //if speed is less than 0 make                                             //it 0   speed = newSpeed * 0.9;                   //scales the speed to be                                             //between 0 and 90}/* * sends the robot forwards */void goForward(){ leftServo.write(90 + speed); rightServo.write(90 - speed);}/* * sends the robot backwards */void goBackward(){ leftServo.write(90 - speed); rightServo.write(90 + speed);}  /* * sends the robot right */void goRight(){ leftServo.write(90 + speed); rightServo.write(90 + speed);}/* * sends the robot left */void goLeft(){ leftServo.write(90 - speed); rightServo.write(90 - speed);}/* * stops the robot */void goStop(){ leftServo.write(90); rightServo.write(90);} //END OF ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES//---------------------------------------------------------------------------
« Previous StepDownload PDFView All StepsNext Step »
2 comments
Apr 23, 2009. 7:12 AMznunez says:
I need major help!!!!....I'm trying to add an additional servo with a ultrasonic range finder (SRF 05) to this robot but i need the program to control all servos combined together... i have a program to control just the servo and the sensor but i would love to combine it all together!! Thanks
May 21, 2009. 9:33 PMrobsummitt says:
Your probably going to need a servo controller shield or controller. I believe the Arduino servo library only supports 2 servos.
Oct 2, 2011. 6:13 PMGelfling6 says:
This reply is coming a bit latyer (2 years).. But, the most recent library (included with 0.22 ) is capable of up to 8, dependant on how you identify them. (It took me a few hours to figure how to address them as servo1 and servo2)

Pro

Get More Out of Instructables

Already have an Account?

close

All Steps Viewing
View all steps of an Instructable on the same page when you're a Pro Member.

Upgrade to Pro today!
408
Followers
14
Author:oomlout