Introduction: Yogy - the Arduino Powered Robot Made for Kids
In this Instructable I will show you how to make a cute and kid friendly Obstacle Avoiding Robot I like to call Yogy.
Yogy gets his name from the Yoghurt tub body he is made from. I am a sucker for seeing the best in trash and this Yoghurt tub looked too good to be thrown away. I salvaged it and decided to give it a new life, a better life, a life as a robot!
You can follow through with me and make Yogy by following the written steps or pictures, which are pretty self explanatory.
Or if you don't feel like reading through and clicking with your mouse, you can check out the videos of the build with commentary!
Step 1: Parts List
Electrical Parts:
• Arduino Uno
• Prototyping Shield + Mini Breadboard
• 2 * Continous Rotation Servos + 2 * Wheel Servo Horns
• HC-SR04
• 8 Ohm Speaker
• Male and Female Breadboarding Jumper Cables
• 4 * AA Batteries + Pack
• 9V Battery
• LED
• Power Switch
Construction Parts:
• Yoghurt Tub
• Acrylic or a CD (or any other material you can make a base from)
• Small Square Bracket
• Small Screws
• Coke Bottle Lids
Tools:
• Coping Saw
• Screwdriver
• Stanley Knife
• Hot Glue Gun + Glue Sticks
• Wire Cutters
• Wire Strippers
• Double Sided Foam Tape
Optional Extras:
• 2 * APC220 RF modules
• Soldering Iron + Solder
• Scrap Pieces of Cardboard
• Electrical Tape
Step 2: Marking the Layout
First you will need to trace the outline of your yoghurt tub onto the material that you wish to use as the base of the robot. This particular tub is 12.5 cm in diameter and 10 cm tall. If you can’t find something similar in size go larger, as any smaller and all the components won’t fit.
Next you will want to place your continuous rotation servos onto the template and arrange them so that the output splines are in the centre of the circle. This is important as it keeps the centre of rotation in the centre of the robot, meaning the robot can turn around on a point. Once you have them where you would like trace around the servos with a marker.
Next grab the circular servo horns and mark around them. You do this because we will have to cut holes in the base to allow the wheels to poke through. Make sure you have sufficient room and mark the holes you need to cut out.
Step 3: Preparing the Drivetrain
One method to cut out the wheel holes is to drill two holes either end of the wheel hole with a drill bit the same diameter as that of the width of the hole. Using a Coping Saw connect the two holes together. Once this is done double check to make sure there is enough clearance between your wheel and the hole as you don’t want the two to rub against each other.
Once you are happy that your two servos and wheels are going to fit nicely you can peel the protective sheet off the acrylic.
Attach a strip of Double Sided Foam Tape to the side of the servo, this will be used to attach it to the base.
Attach another strip of Double Sided Foam Tape to the bottom of the servo, this will be used to join the two servos together.
Step 4: Attaching Drivetrain and Power
Peel the protective sheet off the bottom strip of tape and join the two servos together. Press them together quite firmly and hold for a few seconds to ensure the bond is adequate.
Then peel the protective sheets of the two sides of tape and press them against the base. Again it is important to press and hold to make sure they are really well stuck together. The next stage is to mount the batteries. In my case I am using a 4.8V rechargeable battery pack so first I need to see if it can fit.
Placing the battery pack at the back of the servos and placing the yoghurt tub over them all makes it clear that it will all fit together nicely. You can then begin to attach Double Sided Foam Tape to the back of the battery pack.
Peel the protective sheet off the tape and attach it to the two servos.
Step 5: Attaching Arduino
Next attach another bit of Double Sided Foam Tape to one servo and attach the Arduino Uno to it on the flat section of the underside. (The bit where the Arduino logo is)
After doing this, your robot should look a little something like this.
Step 6: Sensor Mounting and Wiring
Next grab a scrap bit of cardboard and create a template for the Ultrasonic Sensor. Cut out the template and the holes for where the ‘eyes’ will go.
Tape the template to the yoghurt tub where you would like the sensor to go and trace around the ‘eye’ holes with a marker. You can then cut or drill out these holes and insert your sensor into it. Using a combination of Female and Male Breadboarding Jumper Cables connect the Trigger of the sensor up to Digital pin 6 of the Arduino. Connect the Echo to Digital pin 7. Connect the Vcc up to the 5V and connect the GND up to the Ground of the Arduino. Next you will need to connect your two continuous rotation servos shown in the included diagram.
Step 7: Checkpoint
Now your robot should be looking something a little like this.
Step 8: Giving the Arduino Power
Next we will need to give power to the Arduino, we will be doing this with a 9V battery. The 9V battery will be placed underneath the Arduino and in-between the two mounting brackets on the Continous Rotation Servos. We will need a power switch as so we don’t need to keep pulling the robots lid off to turn it on and off, so we need to mount it on the body. Measure the travel distance of your switch.
Mark an appropriately sized hole on the body large enough for the travel distance of your switch and cut it out. Test your switch to make sure it has enough room to move.
Step 9: Mounting Switch and Battery
Now attach the the switch to the body using some small screws. You can use a metal scewer to poke holes in the yoghurt tub to allow the screws to go through. Next measure up the Aluminium Square Bracket along the 9V battery to see how much you will need to hold it in place.
Mark on the body where it will go and mark on the bracket how much you will need. Cut it to shape using a Coping Saw and attach it to the body using Hot Glue. There should only be just enough room to allow your 9V battery to slide in as you want it to be a tight fit to hold it in place. Connect the 9V battery up to the switch and connect the positive end of the switch to the Vin pin of the Arduino and the ground to the GND pin on the Arduino.
Step 10: Attaching Wheels and Castors
Now you will want to attach your wheels to your servos using the screws that come with your servos. Next grab two coke bottle lids and place them alongside your robot, these will act as castors to prevent your robot from wobbling too much.
Mark how much you need to cut off with a marker and cut it with wire cutters.
Grab the two smooth ends of the coke bottle lids and hot glue them to the underside of your robot.
Now you can drill some small holes around the perimeter of your bot and screw the body in place.
Step 11: Coding
Now I have attached two code files here. One is for basic obstacle avoidance use and is heavily commented. The other code is for more advanced users and offers a lot of cool features with no commenting.
The more Advanced code uses some speaker functions and some serial control.
Basic Code: https://www.dropbox.com/sh/z30enwcpb96gr1n/cZ8jOGxW3u
Advanced Code: https://www.dropbox.com/sh/grtgno84hgk5teo/KeqeLq5I_M
Step 12: Finished!
Have fun!

Participated in the
Arduino Contest

Participated in the
Weekend Projects Contest
31 Comments
10 years ago on Introduction
I get an error on "NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); / / Create Ultrasonic sensor object" what exactly should I enter?...
Reply 10 years ago on Introduction
Have you installed the newping library?
Reply 4 years ago
I still had errors
Reply 5 years ago
yes but still had errrors.
10 years ago on Introduction
hi there, i'm having a blast building the yogy. when i try to compile the code, i get a series of error messages revolving around a "redefinition of 'Servo leftServo'. ideas?
Reply 5 years ago
no
Question 5 years ago
I always get problems uploading on arduino uno
pls help
Question 5 years ago
I tried all the help from the replies but I still get
avrdude: stk500_getsync() : not in sync: resp=0x00
on arduino, pls help because i searched all over the web but none of the suggestions or videos helped
7 years ago
The links are broken and I can not get the code. Tried this link too, which is ALSO down.
http://www.duino-robotics.com/yogy.html.
Can anyone help we to get the code?
Reply 7 years ago
#include <NewPing.h>
#include <Servo.h> //Inclue Servo Library
Servo leftServo; //Create Left Servo object
Servo rightServo; //Create Right Servo object
#define TRIGGER_PIN 6 //Trigger pin of Ultrasonic sensor connected to pin 6
#define ECHO_PIN 7 //Echo pin of Ultrasonic sensor connected to pin 7
#define MAX_DISTANCE 100 //The maximum distance we want the sensor to look for is 1m
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); //Create Ultrasonic sensor object
unsigned int time; //Variable to store how long it takes for the ultrasonic wave to come back
int distance; //Variable to store the distance calculated from the sensor
int triggerDistance = 30; //The distance we want the robot to look for a new path
int fDistance; //Variable to store the distance in front of the robot
int lDistance; //Variable to store the distance on the left side of the robot
int rDistance; //Variable to store the distance on the right side of the robot
void setup()
{
leftServo.attach(9); //Left servo connected to pin 9
leftServo.write(90); //Write the neutral position to that servo
rightServo.attach(8); //Right servo connected to pin 8
rightServo.write(90); //Write the neutral position to that servo
}
void loop()
{
scan(); //Get the distance retrieved
fDistance = distance; //Set that distance to the front distance
if (fDistance < triggerDistance) { //If there is something closer than 30cm in front of us
moveBackward(); //Move Backward for a second
delay(1000);
moveRight(); //Turn Right for half a second
delay(500);
moveStop(); //Stop
scan(); //Take a reading
rDistance = distance; //Store that to the distance on the right side
moveLeft();
delay(1000); //Turn left for a second
moveStop(); //Stop
scan(); //Take a reading
lDistance = distance; //Store that to the distance on the left side
if (lDistance < rDistance) { //If the distance on the left is smaller than that of the right
moveRight(); //Move right for a second
delay(1000);
moveForward(); //Then move forward
}
else {
moveForward(); //If the left side is larger than the right side move forward
}
}
else {
moveForward(); //If there is nothing infront of the robot move forward
}
}
void scan() {
time = sonar.ping(); //Send out a ping and store the time it took for it to come back in the time variable
distance = time / US_ROUNDTRIP_CM; //Convert that time into a distance
if (distance == 0) { //If no ping was recieved
distance = 100; //Set the distance to max
}
delay(10);
}
void moveBackward() {
rightServo.write(180);
leftServo.write(0);
}
void moveForward() {
rightServo.write(0);
leftServo.write(180);
}
void moveRight() {
rightServo.write(0);
leftServo.write(0);
}
void moveLeft() {
rightServo.write(180);
leftServo.write(180);
}
void moveStop() {
rightServo.write(90);
leftServo.write(95);
}
thats the basic code you need to install the newping library as well also im havin an isssue where yogi only moves backwards can anyone help
Reply 5 years ago
This code doesn't work for me
Sending 3020: receiveData timeout after 400ms
error :(
5 years ago
so close to building it!
5 years ago
I keep on getting this message
Sending 3020: receiveData timeout after 400ms
Please help!
5 years ago
I need help!
I keep on getting this error : 3020 timeout after 400ms
Please help!
5 years ago
amazing design .
I keep on getting this error when uploading
3020 timeout after 400ms
Please help!
8 years ago on Introduction
Is there a way that I could control its movements via a smartphone or tablet?
Reply 8 years ago on Introduction
Sure! You need a Bluetooth Module and there's an app for Android named BlueTerm.
Let me show you some links:
https://play.google.com/store/apps/details?id=es.p...
http://g02.a.alicdn.com/kf/HTB1FCeoIFXXXXa6XFXXq6x...
I love Yogy, btw :3
8 years ago
the links are down... so i have the robot but no code..
Reply 8 years ago on Introduction
Go to http://www.duino-robotics.com/yogy.html and the code download link is near the bottom
9 years ago on Introduction
I had problems with the library so, i add it
http://playground.arduino.cc/Code/NewPing#.Uzq_SVc...
and the connection diagram of the HC-SR04 is missing, I know is obvious but is missing.
Thanks for the proyect t!!!