Introduction: CHIP-E 2.0 a Dancing Robot
I was really taken with the CHIP-E robot from RobotGeek (featured in MAKE magazine). Most of my robots have wires hanging out everywhere and don't have that sleek, futuristic look. I also thought that the square cubist look was really cute. The fact that he can do a sideways moonwalk was all I needed to jump into making my own dancing robot.
Since RobotGeek has such a great set of instructions I thought that I could create my own and make a few changes. I redesigned his feet to match standard servos. I also designed legs in PLA instead of the metal legs included in RobotGeek's kit. I also wanted to have more expressive eyes and a unique controller.
If you are new to robotics or just don't have a bin of servos and electronics, I suggest that you purchase the RobotGeek kit, which has all of the things you'll need.
Step 1: The Servos
The servos from RobotGeek have an interesting flange all the way around them. This allows them to be attached all the way around the perimeter instead of just at the two ends.
I used MG-995 servos because I happened to have 4 of them and they have worked well for me in the past. I know there are articles out there about their poor construction, but I have yet to demolish one. They are also cheap. A quick check and I found them available for about $5.00 USD each. They have good torque and seemed perfect for this little guy.
The 3D design shows half of the servos positioned in the lower body and the foot. I used small M-sized bolts to hold them in place.
I did adapt the lower body with a couple of mounting pieces (which I superglued in) so I could screw down the middle body piece, and I enlarged the center hole to match my piezo speaker.
Step 2: Center the Servos
First you need some brains.
I used an Arduino Uno as the main brain, and an Adafruit 16 Channel Servo Driver. The Uno is available is dozens and dozens of places. You can find the servo controller on the Adafruit site. It used I2C communication, so the hookup goes like this:
"Classic" Arduino wiring:
+5v -> VCC (this is power for the BREAKOUT only, NOT the servo power!)
GND -> GND
Analog 4 -> SDA
Analog 5 -> SCL
Their "Learn" section has a great tutorial on hooking it up and getting it working. They also have the Arduino library you'll need to get it functioning. I used the attached sketch to center the servos. You need to do this so that when you attach the legs and feet the servo positions start centered.
Step 3: Feets Don't Fail Me Now
The RobotGeek kit uses aluminum leg pieces. Since I have a 3D printer - THANK YOU MAKERBOT! I decided that the forces wouldn't be great enough to break PLA. So far I have been correct. The first image shows the leg. A circular servo horn is attached to one side. A 608 bearing fits in the side and a bearing mount gives a rotation point for it. Maybe having a bearing was overkill, but the RobotGeek servos have a mounting cylinder on their back side to give a rotation point for the ankle joint. A bearing was the best solution I could come up with.
Because I wasn't using the RobotGeek servos, I had to re-design the "shoes" that fit over the servo and hold it to the foot base. I could have done a better job with it. To keep the foot plate flat I ended up hot glueing the shoe and the bearing support to the foot plate....hardly elegant.
Oh, the standard stl files are available on the RobotGeek site. I have attached my altered pieces.
Step 4: I Ain't Got No Body
You will need to print the two lower body parts.
BUT - no 3D printer? Don't let that stop you. You could make this robot out of many materials. Check out a store for a plastic box about the right size. You could cut it up and make a similar robot. I imagine foamcore could be glued and reinforced to make the box. Cardboard, sheet plastic, recycled containers....who says he has to be square? You just need a solid attachment for the servos, and then use the star servo horns to attach to the legs.
Put pieces of tape on the servo leads and mark each. Then run the wiring up through the bottom of the lower body. Next attach the middle body with a couple of small screws or you could glue it if you feel bold.
Step 5: Electronics
I am using two small LiPo batteries. I believe I got them from MiniInTheBox. They are lightweight and have 3.7 volts each. So I connected them in series to get 7.4 volts. That power goes through a switch to the Arduino, but I was worried that the servos wouldn't like it, so I used a buck transformer to change the voltage to 6 volts for the servo power.
I used the Arduino's 5 volt pin to power the servo controller.
The HC-06 bluetooth slave is connected to 5 volt power. There is an excellent article on how to connect two Arduinos using the HC-05 master and HC-06 slave. If you don't want to use bluetooth, you could just re-program him to be autonomous or use a different communication mode.
5 volt power also goes up to the NeoPixel eyes.
And finally, there is the connection to the piezo speaker.
I think that's it: Arduino - Servo Controller - transformer - bluetooth - piezo - neopixel eyes
Step 6: Putting CHIP Together
The instructions on the RobotGeek kit, site are great. If you add the "mouth" piece you'll need the attached 3D file. Or you could use black foamcore and just make a triangular piece to fit. I also tried an oled display for eyes, but ran out of Arduino memory, and didn't really like it. Instead I re-designed the top head and used the clear plastic from the packaging of ping pong eyes for the eyes. I designed a rear half-sphere to allow for the neopixels to reflect light and fill the eyes better.
I have also included the current Arduino code for my CHIP. Your servos may behave differently and you'll probably have to play around with adjustments. You can comment out the code that reads the bluetooth and run each subroutine to walk or turn or dance separately and adjust values till you get the moves that you want. That's what I did.
Step 7: Controller
I used an Arduino Mega because the oled display uses a lot of memory. I wanted something very different for a controller. I had purchased the Sparkfun Gesture Sensor a while back and was looking for a project to use it in. It operates at 3.3 voltage, and the Mega runs at 5 volts, so I needed a way to accurately communicate between them. So I used the Sparkfun logic level converter to get the two voltages to play nice.
The Adafruit oled gets 5 volt power, but the data runs on 3.3 volts, so it also needs the logic level converter to talk to the Arduino.
The controller also uses a HC-05 bluetooth module. Look back at a previous step for the link to directions on how to get the 05 and 06 to talk to each other. The module also needs to be sending data to the Arduino via 3.3 volt data, so it goes through the logic level converter too.
Again, you could use IR communication and a Sony TV remote, or have the robot on autonomous mode and walk around by himself. This is just how I constructed him, not the definitive way. Instead of the gesture sensor, you could use joysticks or a Wi Nunchuck or buttons to send data.
Once I had all of the pieces working, I designed a box for 3D printing. The box has mounting points for the Mega, so it sits nicely in there. There's an opening for the oled and four bolt places to secure it. The gesture sensor sits in a little recessed spot with the wires running through a hole in the cover down into the controller. I had printed a handle for some project that was never used, so I attached the handle to the bottom.
The whole hookup schematic is attached.