CokeBot
A robot character made from empty coke cans along with servo motors. We made a prototype back in the summer (2017) and thought it would make a great robot character. We went out and bought a case of coke* and as they are emptied we kept the cans ready for construction. In order, to make the cans safe for children to handle, ring pulls can slice little fingers, we have designed inserts that pop onto the top of the cans as well as parts that house servo motors. We use three servos to control the movements, of the CokeBots arms and neck. There is also the instructions to build a non-animated version which does not use servos.
* Other brands are compatible :)
Supplies
For this Instructable you will require:
23 Cans,
Strong glue
The 3d printed joiners, of which the files are freely available at Booting
For the animatronic version you will also require:
An Arduino Uno,
3 Servos (metal gear recommended),
It is also recommended to use a servo driver board.
Preparation
Drink all your cans, wash cans and allow to dry.
Print all the 3d parts. Quantities as per the table above,
Then once you have printed the required amount of each connector you can then start the build process.
Create CAN1
Create Parts CAN2 & CAN3
Create Part ARM
Create the Parts LEG
Create the Part TORSO
Create Part HIPS
Create the Part SHOULDERS
Create Part HEAD
Time to Build - Putting Him Together.
So through the process of making the individual parts we have fabricated sections that can now be glued together a piece at a time. Working from bottom to top we glue each part to the next as follows:
Glue LEG (x2) to HIP, allow to dry.
Glue TORSO to HIP, allow to dry.
Glue SHOULDER to TORSO, with part CB_07 (cups), allow to dry.
Glue part CB_05 (shoulder joints) one to each of the SHOULDER servos, the part should cup the servo with the rest of the part facing downward, allow to dry. Then glue ARM to each of the CB_05 (shoulder joints), allow to dry.
Finally we glue part HEAD to the neck servo to finish the build.
*** If you do not want an animatronic version you just reframe from adding the servos and print two extra CB_03, and connect the arms in the same way as the legs, posing the arms according to your desired look ***
Time to Wake Him Up
Now we have him built it is time to get him animated. We will need an Arduino Uno, a servo driver board and of course some code to make the magic happen. In my version of code I've just opted to leave out the servo driver board as with 3 servos we can get away without it. In my code I've also added lights to the eyes for an added effect. If you stick to the standard version, without lights, then comment out the LED control in the code.
/* /\\\\\\\\\\\ /\\\\\\\\\\\ /\\\\\\\\\\\ /\\\\\\\\\\\\\\ /\\\\\\\\\\ /\\\ /\\\ /\\\\\\\\\\\ /\\\/////////\\\ /\\\/////////\\\ /\\\/////////\\\ \/____/\\\____/ \/__/\\\__/ \/\\\\ \/\\\ /\\\/////////\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\\\\\ \/\\\ \/\\\ \/// \/\\\\\\\\\\\\\/ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ /\\\\\\ \/\\\/////////\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \////\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ \/\\\ __\/\\\__ \/\\\ \/\\\\/\\\ \/\\\ \/\\\ \/\\\\\\\\\\\\\/ \/\\\\\\\\\\\\\/ \/\\\\\\\\\\\\\/ \/\\\ /\\\\\\\\\\ \/\\\ \/\\\\\\\ \/\\\\\\\\\\\\\/ \//////////// \//////////// \//////////// \/// \////////// \/// \////// \///////////// ----- www.booting.co.uk ----- Coded by Gary Talman Date: 06-01-2021 Version: 1.00 */ #include <Servo.h> #include "FastLED.h" //############################### servo connections ################################# Servo head_servo; Servo left_arm_servo; Servo right_arm_servo; //############################### constant values ################################### #define eyes 3 //############################### variables values ################################## CRGB eye_data[2]; //############################### function defs ##################################### void move_right_up(); void move_right_down(); void right_wave(); void move_left_up(); void move_left_down(); void left_wave(); void move_head_right(); void move_head_left(); void move_head_centre(); void eyes_on(); void eyes_off(); void eyes_flash(); void setup() { FastLED.addLeds<WS2812, eyes, RGB>(eye_data, 2); // set up fast led library with2 leds for the eyes head_servo.attach(9); left_arm_servo.attach(10); right_arm_servo.attach(11); } void loop(){ move_head_centre(); eyes_flash(); eyes_on(); right_wave(); delay(2000); eyes_off(); move_head_left(); delay(1000); move_head_right(); delay(1000); eyes_on(); move_left_up(); delay(1000); move_left_down(); move_head_centre(); delay(5000); } void move_right_up() { right_arm_servo.write(0); } void move_right_down() { right_arm_servo.write(130); } void right_wave() { right_arm_servo.write(30); delay(200); right_arm_servo.write(90); delay(200); right_arm_servo.write(30); delay(200); right_arm_servo.write(90); delay(200); move_right_down(); } void move_left_up() { left_arm_servo.write(180); } void move_left_down() { left_arm_servo.write(30); } void left_wave() { left_arm_servo.write(180); delay(200); left_arm_servo.write(120); delay(200); left_arm_servo.write(180); delay(200); left_arm_servo.write(120); delay(200); move_left_down(); } void move_head_right() { head_servo.write(0); } void move_head_left() { head_servo.write(180); } void move_head_centre(){ head_servo.write(90); } void eyes_on() { eye_data[0]=CRGB::White; eye_data[1]=CRGB::White; FastLED.show(); } void eyes_off(){ eye_data[0]=CRGB::Black; eye_data[1]=CRGB::Black; FastLED.show(); } void eyes_flash(){ for (int i=0;i<4;i++) { eye_data[0]=CRGB::White; eye_data[1]=CRGB::White; FastLED.show(); delay(200); eye_data[0]=CRGB::Red; eye_data[1]=CRGB::Red; FastLED.show(); delay(200); } }
This code is provided as an example of one way to control him, I'm sure you can get creative and get him responding in other ways. Also it is worth checking your servo minimum and maximum values, and changing the values, in the code, so you do not get chattering, or indeed burn out your servos.