I have to say thanks to Deshipu for making μBoB. Your tiny rendition of BoB inspired me to build this project. Thank you.
K120189 A.K.A. the BoBfather, thanks for making such a cute bot that has inspired a great many to try out a biped build.
Protowrxs and his great little TED the BiPed.
FrankNeon's sharp looking Arduped.
Cevinius and his many awesome biped creations.
And last but not least David Buckley for his research into minimal designs for bipeds. Most notably Loki, the great grandfather of all these simple biped designs.
I started this project with the intent to make the smallest biped I could manage, also I wanted to design it to print on my Printrbot Simple. I collected all of the parts together and after taking measurements, drew up the design in CAD. I tried to replicate K120189's BoB, but on a smaller scale.
BoB Jr.'s head was designed to have a hinge so that I could free-form the components inside, allowing room to solder things as I went. I made some changes to the legs and feet, most notably I reversed the orientation of all of the servos by 180 degrees. This puts the servo output shafts to the rear of the bot. I also enclosed servos in the feet, mainly for cosmetic reasons but also for space savings. The legs were designed to be printed with the servo spline so that they can simply be attached to the servos without using the standard horns. This took a couple revisions to get right because of the tiny size of the spline. In order to get the tooth size and spacing I scanned the spline end and imported the photo into CAD to measure the dimensions.
The components and circuit:
Given the 1" cubed interior clearance inside BoB Jr.'s head everything was a tight fit and I had to file off a couple mm from each end of the 20 pin Picaxe 20M2 DIP chip to get it to fit inside. First I drew up a schematic of the circuit layout and inserted the (5) 3mm LED's into the mouth, then I inserted the DIP to that the legs of the IC aligned with the LED leads and I soldered those. For space savings, I only used one current limiting resistor for all 5 LED's. My camera was missing in action at that point so I don't have pictures from early in the build process. =/
Next I added (2) LTH-1550 IR sensors for the eyes. In order to save pins (and power), the phototransistors are wired in series from an output pin to ground, with the center tap going to an ADC input. To read the eyes, turn the output pin high and take an ADC reading. The nice thing about wiring the eyes in this fashion is that the readings are not affected by overall light level, only the difference between the sensors is read. The inbuilt IR LED's are wired in parallel but reversed in relation to each other. The two leads are then attached to two output pins, allowing either IR LED to be on or both to be off, but not both on at the same time. This reduced pin count and allowed me to use a single current limiting resistor.
There is a tiny piezo element inside to give Jr. a voice. Currently the beeps he makes are in direct relation to readings from the eyes. This will change as I finish up the programming.
Last, I added the servos. I used a tiny standoff with a nylon screw to act as a spacer between the servos to keep them aligned and locked into place.
The battery is a tiny 100mAh LiPo rated for 20C. The charger circuit is external to the bot.
At the top inside of the head I added a tiny strip of brass to use as a touch sensor... which has proven problematic. I am having a hard time getting consistant readings from it and am still testing but may not end up using it in the end. I have a feeling that the issue is it's close proximity to all the other wires and components.
The hardest part for me has been the programming, as I am no programmer.
I was looking around on the Picaxe forums and found a great looking robot arm made by erco. http://www.picaxeforum.co.uk/showthread.php?20480-Work-in-Progress-6-DOF-Arm-Uses-PICAXE-20M2 He kindly provided his code for the project, and it helped me out a great deal. I pared off his simple servo movement code, which moves all the servos required slowly at 'the same time', and incorporated it into my program. I ended up using the table memory in the Picaxe to store the servo positions without taking up precious program memory. All servo positions are then edited at the beginning of the program by tweaking the values in the table memory.
For now the mouth is a simple larson scanner with beeps at the end relating to the eye readings. I have bigger plans for the LED mouth and piezo... I will cover this further in a future update.
Every now and again it checks the LiPo's voltage, and if it drops too low, goes into standby. I might tweak this to sound an alarm as well. It also checks to see if it's charging, and if so, goes into standby. I'm still very much working on the code. I am tweaking the walking gait and adding turning. I have a function already that will play back walking/turning but in reverse. I plan to add some dancing moves too, because... well... just because!
Here are some pics: