Introduction: ICBob - a Bob Inspired Biped Robot

We are the Teen Imagineering Club from the Bridgeville Delaware Public Library. We make cool projects while learning about electronics, computer coding, 3D design and 3D printing.

This project is our adaptation of BoB the BiPed an Arduino based robot. We redesigned the body to take advantage of our favorite Arduino power source, the Powerbot phone power bank. This inexpensive rechargeable 5 volt power source is great for powering our Arduino projects and it recharges with any USB wall charger. We also adapted the 3 toed feet from the Arduped biped robot just because they look AWESOME. We will show you where to get the parts you need, how to assemble the robot and even give you some easy Arduino code to get it walking.We had a great time making our eleven ICBob robots. Keep reading if you want to learn how to make one for yourself.

Step 1: Parts and Tools You Will Need

ICBob is designed for the following set of parts. While substitutions are possible you may need to modify the body to make them work. Our favorite supplier is Yourduino.com but for some items you will need to go to Amazon or Ebay.

Product Availability Update- Yourduino no longer carries the Micro Magician and says they are being discontinued by Dagu. The Dagu website still has them available http://www.dagurobot.com/goods.php?id=137 and if they are not available the S4A EDU controller is a drop in replacement and operates at 5 volts.

Parts

3D prints - The stl files are available on Thingiverse thing:1313344

  • 1x- body
  • 1x- shell
  • 2x- knee
  • 1x- left foot
  • 1x- right foot

Tools

  • computer with Arduino IDE
  • Arduino add on library VarSpeedServo
  • MICRO Magician Driver (needed for some operating systems)
  • 3D printer (or have the parts made)
  • 3D part cleaning tools
  • Soldering kit (only for the pins on the USB adapter)
  • Hot glue gun
  • Small Philips screwdriver
  • usb charger

This Instructable assumes you have a basic knowledge of Arduino use. If you are new to Arduino you can learn more at https://www.arduino.cc/ .

For the MICRO Magician choose Board - Arduino Pro or Pro Mini(3.3V, 8MHz) w/ ATmega328

You will need Korman's VarSpeedServo library to use our sketches. You can find out more about his library here but use our download below which is compatible with the newer IDE. Download the VarSpeedServo.zip file below and unzip to your arduino/libraries folder.

You may need to install the MICRO Magician CP210x driver if your system does not recognize the controller. This site may help with the driver install https://www.pololu.com/docs/0J7/all

Step 2: Let's Start Building - Assemble the Legs

For this step you will need 2 - 3D printed knees and 4 servo packages.

Start by cleaning the knees. The 2 servo horn holes need to fit the single sided servo horns. We cleaned them with a letter L (.290) sized drill bit.The one pivot hole needs to fit the pivot on the foot. We cleaned them with a # 2 (.220) sized drill bit.

Fit the 4 servo horns into the knees. Attach the horn using one of the larger screws that came with the servo package. Put the screw through from the knee side and tighten into one of the small holes on the servo horn. For the one screw you will have to tighten with the screwdriver at an angle but it is doable. You can clip the screw points that stick out with side cutter pliers if you want.

The 4 servo spindles have to be centered before they are attached to the knees. You can do this manually by gently moving the spindle through its rotation to find the half way point. A better way is to attach a servo to pin 12. Download the icbob_servo_center.zip file below. Unzip to your Arduino directory. Then run this Arduino sketch for each servo.

Start by assembling the hip (upper) servos to the knees. Without moving the spindle attach the hip servo parallel to the knee with the wires facing the other servo horn (front). Secure with one small screw from the servo package. Repeat for other knee.

Now for the ankle servos. REMEMBER you are going to have right and left ankles so the legs will be mirror images of each other. You will have to spread the knee slightly to assemble the ankle servo so orient the servo as in the photo before squeezing it in. Remember not to rotate the spindle. Secure with a small screw. Repeat with other knee so you finish with a right and left leg.

Step 3: Building - Attach Legs to Body

You will need the 2 leg assemblies and the 3D printed base for this step. You will also need (4) 2-56x3/8 self tapping screws or hot glue.

The leg assembly attaches to the base by way of the hip servos. First route the 2 servo wires up through the bottom of the base. Mind the rights and lefts. As the drawing shows the ankle wire ends up in the half moon cutout but you have to have the ankle wire in before the servo is attached. You have to tilt the servo so that the hip wire (where it enters the servo) goes through the rectangular hole first (to the front). Its a tight fit but the back end should just slip in. Now turn the base over and secure the servo with 2 screws or alternatively hot glue should work. Repeat the process for the other leg.

Step 4: Building - Attach the Feet

For this step you will need a left foot and right foot to add to your assembly. They are hot glued on so fire up the glue gun.

Make sure you clean the slots in the feet well. Gently test fit the servo to the foot after cleaning. Make sure the pivot hole in the knee fits into the pivot pin on the foot. It is best to use a thin screwdriver between the servo and foot to pry the foot back off if it is tight. After you get a good test fit place a dime size glob of hot glue on the foot then press the servo to the foot. Avoid getting glue near the pivot area. Repeat for the other side so that your bot can stand on its own two feet.

Step 5: Wiring - Servos and Power

In this step you will need the MICRO Magician controller, the micro USB adapter board with header pins, the flat cable and your standing bot. You will be soldering and hot gluing in this step so have those tools ready.

The Powerbot power bank comes with a short USB to micro USB cable. For charging the battery the micro USB is plugged into the charging slot on the battery and the USB goes to the wall charger. You will reuse this cable to power the ICBob. Battery output is through the USB so we connect through the micro USB adapter board to get power to the bot.

First lets get the adapter assembled. Refer to photo for the next steps. You will only use the 2 outside pins (gnd and V+) to power the bot. Carefully slide the 2 outside pins in the header so the short side protrudes about 3/16 in. With pliers bend the 2 long pins 60 degrees or so. Bend before soldering as the boards are fragile. Insert header as shown and solder all pins on back for strength. Clip all unused pins as short as possible both front and back. Before we glue the adapter to the barrel attach the micro USB cable so that you end up with enough clearance. Put a large glob of hot glue on the back of the adapter then place it in the position shown on the barrel. Hold until it hardens.

Next attach the 4 servo connectors to the controller. We like the MICRO Magician because it has the 3 pin connectors onboard for easy servo wiring. The darker color wire (brown?) goes toward the board edge. The included Arduino sketches use the following pins.

  • Right Hip (RH) - pin 9
  • Right Ankle (RA) - pin 10
  • Left Hip (LH) - pin 11
  • Left Ankle (LA) - pin 12

For the power connection to the board pull off a pair of wires from the flat cable. You will use more of this flat cable for sonar wiring. Connect one end of the pair to the micro USB adapter. The pin that is closer to the front of the bot is ground and the other V+. The other end attaches to the controller near the switch. The V+ wire connects to the pin labeled 'Battery IN' in the documentation. Connect the ground wire to the 'gnd' pin just a little above the 'Battery IN' pin.

IMPORTANT! - There is a 'V+ select' jumper just above the D1 pin set. This jumper has to be on the INSIDE set of pins or the servos will not work.

Finally clean the controller slot on the base so that the controller has a snug fit. You can attach the battery and switch 'on' the controller to make sure it powers up.

Step 6: Programming - Home Calibration Code

A few words about our programming choices

When we built the prototype for this project we used the How to teach your BoB Biped to move tutorial over at Let's Make Robots. The Bob Poser software was cool and we had fun playing with it. The problem was the 600+ lines of code in the Navigation sketch were well above the teens knowledge level. To make this project more of a learning experience for them we decided to glean a few ideas from the Poser code and then start over with a blank page. The teens had already been using the VarSpeedServo library while learning about servos in our Arduino labs. We decided to see if VarSpeedServo could handle the timing and speed duties for the servos so that we could just concentrate on the positions. The resulting code works great and the full walk_avoid_turn sketch has less than 100 lines of code. The only new concepts the teens needed to learn about were 2 dimensional arrays and how to access that data with code. Enjoy!

Home Calibration

You centered the servo spindles when you assembled them. Now you will see how close you got and fine tune their home positions. Make sure you have the VarSpeedServo library from step 1 installed. Download the icbob_home_calibration.zip file below and unzip to your Arduino directory. Open the sketch in the Arduino IDE. Power up the MICRO Magician with the battery. Connect the computer to the board and upload code. Chances are the servo home positions will not be perfect. Find the following section in the code. Continue to adjust and upload until you get it right.

//.............................................................
// Start with the 4 hm array memmbers set to 90 deg. then adjust
// these setting so the knees are straight forward and the feet are flat
int hm[4] = {90,90,90,90}; //array to hold home position for each servo RH,RA,LH,LA
//.............................................................

If any of your numbers are less than 50 or greater than 130 you need to backtrack and disassemble the legs and get the spindles closer to center.

Once you have a good home position, write the numbers down. You will need these numbers for the rest of the sketches.

Step 7: Programming - Move Generator Code

Now to get your bot moving. Download the icbob_move_generator.zip file below and unzip to your Arduino directory. Open the sketch in the Arduino IDE. Find the following section of code. Put the home positions you recorded for your bot in the sketch.

//set the members for the array hm to the home positions for your robot
//they can be found by using the icbob_home_calibration sketch
const int hm[4] = {95,95,85,90}; //array to hold home position for each servo RH,RA,LH,LA

The following section of code is where the move sequences are entered. Each line has positions for the 4 servos (RH,RA,LH,LA) relative to the home position.

//mv array data. Each line is a 'frame' or position set for the 4 servos
//Multiple lines create a group of movements that can be looped to
//create walking, turning, dance or other movements
const int mvct = 6;  //Make this number equal to the number of lines in the array
const int mv[mvct][4] =  
{
  {0,-40,0,-20},        //These preloaded numbers should give a forward walk
  {30,-40,30,-20},
  {30,0,30,0},
  {0,20,0,40},
  {-30,20,-30,40},
  {-30,0,-30,0},
};

This is the code that turns the mv array data into servo slowmoves

void loop()  //loop repeats forever
{ 
  // Do move sequence
  for(int x=0; x<mvct; x++) {                   //cycle through the number of   
    RH.slowmove (hm[0] + mv[x][0] , svsp);      //lines 'frames' in the array
    RA.slowmove (hm[1] + mv[x][1] , svsp);
    LH.slowmove (hm[2] + mv[x][2] , svsp);
    LA.slowmove (hm[3] + mv[x][3] , svsp);
    delay(framedelay);
  }
}

Upload to the bot. The bot will go to the home position for 2 seconds then start a walk forward loop. It works best if the table is not too slippery.

Once you get tired of seeing him walk you can try your own moves. Use 'save as' to rename the sketch. Then play with the numbers and see what you can do. Keep the numbers between +50 and -50 or you may strain the servos. Remember if you add or subtract lines you have to change the mvct value to reflect the change. Have fun!

Step 8: Wiring - HC-SR04 Sonar Sensor (Eyes)

For this step you will need the icbob_shell 3D print, the HC-SR04 ultrasonic sensor, the female flat cable and one 10k ohm resistor. This should finish up the parts on our list. Yeah!

First clean the sensor holes in the shell for a medium tight fit. Don't put too much pressure on the sensor when test fitting. Remove from shell for wiring.

Next pull off 4 strands from the flat cable. Plug the 4 wires into the HC-SR04 sensor pins.

The MICRO Magician internally works on 3.3 volts and the pins can only take a 3.3 volt signal. The problem is the HC-SR04 operates at 5 volts. It can use a 3.3 volt input as the 'trigger' signal but when it sends an 'echo' signal it is 5 volts and it will damage the controller input if hooked up directly. We need to put a 10k ohm current limiting resistor on the 'echo' wire to protect the input.

UPDATE: Although we have not had any issues with just the 10K resistor inline, it was pointed out in the comments that best practice indicates a voltage divider circuit should be used here. In addition to the 10K resistor a 15K resistor should be placed between 'echo' and 'ground'.

Cut the resistor leads to .5 inches. The resistor goes into the 'echo' wire on your flat cable. We put a drop of super glue on the connection to help it stay put.

The sketch uses pin 13 for trigger and pin 3 for echo. Use the pin 13 group on the controller for the 'gnd', 'vcc', 'trig' in that order working from the edge toward the center. You will have to crisscross some wires here to get it right. The 'echo' wire with the resistor plugs into the female pin 3 socket.

If you want to check out the sensor before you move on to the next step you can use the first sketch on this page http://arduino-info.wikispaces.com/UltraSonicDistance to test it out.You will need the battery connected. You can see the distance readout on the serial monitor. Make sure you set the 'trigger_pin' to 13 and the 'echo_pin' to 3 in the sketch.

The best way to install the sensor in the shell is with the pins pointing toward the top and the wires folded and routed between the sensor 'eyes' and the shell.

Step 9: Programming - Walk_Avoid_Turn Code

Putting it all together. All the parts are assembled. We are ready load the full code, put the shell on and watch it do its thing.

You know the routine. Download the icbob_walk_avoid_turn.zip file below and unzip to your Arduino directory. Open the sketch in the Arduino IDE. Find the following section of code. Put the home positions you recorded for your bot in the sketch.

//set the members for the hm array to the home positions for your robot
//they can be found by using the icbob_home_calibration sketch
const int hm[4] = {95,95,85,90}; //array to hold home position for each servo RH,RA,LH,LA

This sketch adds a second move array and a second set of slow move code for the 'turn' move.

//forward array data
const int fwdmvct = 6;  //Make this number equal to the number of lines in the array
const int fwdmv[fwdmvct][4] =  
{
  {0,-40,0,-20},        //walk forward move frames
  {30,-40,30,-20},
  {30,0,30,0},
  {0,20,0,40},
  {-30,20,-30,40},
  {-30,0,-30,0},
};
//turn array data
const int trnmvct = 5;  //Make this number equal to the number of lines in the array
const int trnmv[trnmvct][4] =  
{
  {-40,0,-20,0},        //turn move frames
  {-40,30,-20,30},
  {0,30,0,30},
  {30,0,30,0},
  {0,0,0,0},
};

We added sonar obstacle detection code as well as a 'if' 'else' statement to decide if we are going straight or turning.

Final Assembly and start-up

Leave the battery unplugged and upload the sketch. Disconnect the programming cord. Make sure the power switch on the controller is in the down 'on' position. Carefully slide the shell onto the base with the USB power cord sticking through the top hole. Put in the battery. Plug it in. Your ICBob should start moving and turning to avoid obstacles closer than 7 inches.

Step 10: Wrap-up

We hope you have as much fun building your ICBob as we did building ours. Let us know if you have any questions or comments. If you build one let us know here or over on Thingiverse.

Comments

author
Slk_Stephane (author)2016-02-16

So do I upload the code via Arduino to the Micro Controller?

author

I have the Dagu version

author
blic19933 (author)Slk_Stephane2016-02-16

The Micro Magician is a Arduino board. Connect via USB and run the Arduino IDE. Select board (Arduino Pro and Pro Mini 3.3 v 8MHz ATMega 328) and select your port. Then you can upload the sketches to the Micro Magician. You might want to upload 'Blink' first just to see if the connection is good. Let us know how it goes.

author
Slk_Stephane (author)blic199332016-02-17

The Arduino IDE doesn't detect my DAGU Micro Controller

author
blic19933 (author)Slk_Stephane2016-02-17

We had that trouble with some our computers. You will need to add the CP210x driver on your computer. It is discussed at the bottom of step number one above. The link to the Pololu tutorial should help.

author
Slk_Stephane (author)blic199332016-02-17

I installed everything but still nothing

author
blic19933 (author)Slk_Stephane2016-02-17

did you restart your computer after the install? What operating system are you using? The driver install went ok on 4 computers running win 7. Our Win 8 and Win 10 computers recognized the Micro Magician right off.

author
Slk_Stephane (author)blic199332016-02-22

Win 8.1 64 BIT

author
blic19933 (author)Slk_Stephane2016-02-23

OK. This site says you might need to go into the device manager to update that driver. http://www.chinstruments.com/USB_440.shtml

Hope this helps

author
blic19933 (author)blic199332016-02-23

Just do the device manager part of the page I referenced above.

author
Slk_Stephane (author)blic199332016-03-05

It still not detecting the DAGU Driver so I cannot do the part in the DEVICE MANAGER.

author
blic19933 (author)Slk_Stephane2016-03-06

Sorry, I am at a loss concerning your problem. You may want to try to contact this guy https://www.instructables.com/member/OddBot . His profile says he works for Dagu but it looks like he has not posted in a while. Good luck.

author
Slk_Stephane (author)blic199332016-03-14

His not active.

author
blic19933 (author)Slk_Stephane2016-03-14

It looks like the same guy is the administrator on the Dagu forums. It looks like he has posted recently. Here is the link- http://forum.dagurobot.com/forum.php

author
Slk_Stephane (author)blic199332016-07-22

He did not reply

author
CristianR33 (author)2016-04-25

Hi!

thank you very much for your advices.

I have been triying your values. I have created a source file but it doesn't works...

I don't understand movements.. In this code you will see that I try next:

- Move forward

- Turn right

- Move forward

- Turn left

With this code I want to see how these movements are.. and then I will code bluetooth code.. In this point I dont have problems..

Could you see my code and compare it with yours please?

I will start my workshop this Friday with students and their families and Im afraid with this problem...

When I have all done, my idea will be to create a new instructable from yours with our modifications :-)

Thank you very much!!!

icbob_move_generator.ino
author
blic19933 (author)CristianR332016-04-25

Cristian,

You almost have it. You are only doing 4 moves (2 steps) before moving to the next direction so you are just getting a staggering walk. You need to put the moves inside another loop to get a longer turn or straight sequence. Something like 20 loops for each.

for(int y=0; y< 20); y++) {

for(int x=0; x<mvct; x++) { //cycle through the number of

RH.slowmove (hm[0] + mv[x][0] , svsp); //lines 'frames' in the array

RA.slowmove (hm[1] + mv[x][1] , svsp);

LH.slowmove (hm[2] + mv[x][2] , svsp);

LA.slowmove (hm[3] + mv[x][3] , svsp);

delay(framedelay);

}

}

When you do the BT you can just loop until you send a new direction.

author
blic19933 (author)blic199332016-04-25

Oops... take out the extra ) in the first line

author
blic19933 (author)blic199332016-04-25

Cristian,

Also be careful with the mvct variable in your code. Move Count (mvct) has to equal the number of lines in your array. They all have 6 right now in this code but the avoid turn move in the full code only has 5 lines. I would use a new variable for each move array (fwdmvct, leftmvct, rightmvct, trnmvct) for cleaner programming

author
CristianR33 (author)2016-04-20

Hi, I love your robot and now I want to create a new one but with a modification: do a appinventor app to control my robot from my android phone

I have calibrated and move_generator works fine! But i need to do the next:

- when arduino receives a "L" key, turn left

- when receive "R" key, turn right

- when receives "B" key, turn back

I know how to code this. I only don't know how is movements array to build every movement...

I have been reading "walk-avoid-turn" but I don't understand array logic to do turns...

Could you help me please?

Thank you very much!!!

author
blic19933 (author)CristianR332016-04-22

Hi CristianR33,

I have not had time to test this but if you load the move_generator sketch and try changing the 30 values in the array to all positive or all negative you should get a turn left and right. Give it a try and let us know if it works

{0,-40,0,-20},

{30,-40,30,-20},

{30,0,30,0},

{0,20,0,40},

{30,20,30,40},

{30,0,30,0},

author
blic19933 (author)blic199332016-04-22

OK I was curious so I played with the array. The above did NOT work. I found changes that did.

Right turn

{0,-40,0,-20},

{60,-40,30,-20},

{60,0,30,0},

{0,20,0,40},

{-30,20,-30,40},

{-30,0,-30,0},

Left Turn

{0,-40,0,-20},

{30,-40,30,-20},

{30,0,30,0},

{0,20,0,40},

{-30,20,-60,40},

{-30,0,-60,0},

You will have to make arrays and move code for each. Maybe put the move codes in separate functions that are called based on bluetooth input.

Hope this helps

author
CristianR33 made it! (author)blic199332016-04-25

Hi!

thank you very much for your advices.

I have been triying your values. I have created a source file but it doesn't works...

I don't understand movements.. In this code you will see that I try next:

- Move forward

- Turn right

- Move forward

- Turn left

With this code I want to see how these movements are.. and then I will code bluetooth code.. In this point I dont have problems..

Could you see my code and compare it with yours please?

I will start my workshop this Friday with students and their families and Im afraid with this problem...

When I have all done, my idea will be to create a new instructable from yours with our modifications :-)

Thank you very much!!!

icbob_move_generator.ino
author
CristianR33 (author)blic199332016-04-25

Hi!

thank you very much for your advices.

I have been triying your values. I have created a source file but it doesn't works...

I don't understand movements.. In this code you will see that I try next:

- Move forward

- Turn right

- Move forward

- Turn left

With this code I want to see how these movements are.. and then I will code bluetooth code.. In this point I dont have problems..

Could you see my code and compare it with yours please?

I will start my workshop this Friday with students and their families and Im afraid with this problem...

When I have all done, my idea will be to create a new instructable from yours with our modifications :-)

Thank you very much!!!

icbob_move_generator.ino
author
loic13 (author)2016-03-05

Hi, that's a nice robot. I made one. I have a question about the hc-sr04 sonar sensor wiring. You wrote "As per the MICRO Magician instructions we need to put a 10k ohm current limiting resistor on the 'echo' wire to protect the input.". But it's a voltage divider with a 10k and 15k resistor that is needed. Does it work without frying the board with only the 10k resistor for you ?

Thank you.

author
blic19933 (author)loic132016-03-06

Ioic13,

After re-reading the docs I think the voltage divider is the way to go. That said the eleven bots we made have not had any issues with just the 10K resistor in line. I will update if there is a problem.

author
loic13 (author)blic199332016-03-06

Hi blic19933,

Thank you for your answer. I was afraid to blow the board. I looked around on the web and found this:

http://www.bytecreation.com/blog/2013/10/13/raspbe...

Look at Adam's comment arround the end of the page(search for "Hydraulic Analogy"). He explained a bit about current and voltage and made some test. It seems that, even thought it would be recomended to use a voltage divider, it is safe to use just a resistor as you did.

author
blic19933 (author)loic132016-03-06

Ioic,

Thanks for the investigative work. I have updated the instructable to indicate best practice.

We would love to see some photos or video of your bot.

Thanks

author
wold630 (author)2016-02-11

They are so cute!! Do you have a video of them working?

author
blic19933 (author)wold6302016-02-17

We added a couple of videos today. Thanks for the suggestion. We are quite happy with our first Instructable.

author
blic19933 (author)wold6302016-02-11

We plan to take some video at our 2/17 club meeting. I will add it as soon as possible.

author
Adamik (author)2016-02-12

OMG this is Amazing!!!

author
blic19933 (author)Adamik2016-02-12

Thanks!........times 4

author
Marcelotom (author)2016-02-12

E aí Galera? Parabéns pelo ótimo trabalho em equipe.

Marcelo

author
blic19933 (author)Marcelotom2016-02-12

Thank you. We are having fun in our club every week.

author
Adamik (author)2016-02-12

OMG this is Amazing!!!

author
Adamik (author)2016-02-12

OMG this is Amazing!!!

author
Adamik (author)2016-02-12

OMG this is Amazing!!!

author
Slk_Stephane (author)2016-02-11

What is the dimension for the power bank? In iinches or cm, please?

author
blic19933 (author)Slk_Stephane2016-02-11

Hi,

The Powerbot we use is .860 in. diameter x 4.260 in. length The inside diameter of the tube is .875 so it is a snug fit. The diameter of the 3000 mAh Powerbot is .905 in.

Hope this helps.

About This Instructable

7,713views

83favorites

Bio: The Imagineering club is a teen group focused on learning about wiring and programming Arduino micro-controllers, 3D design and printing, and designing projects.
More by blic19933:3D printed maze controlled by your Android deviceICBob - A Bob Inspired Biped Robot
Add instructable to: