Candypult--Computer Controlled Candy Catapult
by MikeTheMaker in Living > Toys & Games
4925 Views, 45 Favorites, 0 Comments
Candypult--Computer Controlled Candy Catapult
![cover1.jpg](/proxy/?url=https://content.instructables.com/FWC/DMSP/HIGFG0EZ/FWCDMSPHIGFG0EZ.jpg&filename=cover1.jpg)
![schematic1.jpg](/proxy/?url=https://content.instructables.com/FQT/AC01/HIGF6QQ9/FQTAC01HIGF6QQ9.jpg&filename=schematic1.jpg)
Parts:
Arduino
(2) Hitec HS-311 servo motors (Amazon.com)
(1) Hitec HS-645MG servo motor (high torque)--Amazon.com
(1) mini Servo YKS SG90 (Amazon.com)
(1) Two channel remote control toy--I got a car for $11.99 at a local pharmacy
(3) 5 volt relays--Jameco.com #139977 (these are polarized so that positive voltage on one coil lead causes it to pick up, but the other polarity doesn't; you can produce the same result with a 5 volt relay and a diode. Relays "B" and "C" only operate one at a time--based on the polarity provided.)
1/4" x 3 1/4" x .025 spring (available at Lowes)
(6) 12" servo extension cables
Spring from a ballpoint pen
4" lazy susan http://www.amazon.com/Capacity-Bearing-Turntable-Bearings-VXB/dp/B002TIKEQ6/ref=sr_1_2?ie=UTF8&qid=1372692771&sr=8-2&keywords=lazy+susan+4+inch
9 volt, 500 ma DC power supply
6 volt, 1 amp DC power supply
3D printed parts, design and print files at:
http://www.thingiverse.com/thing:110350
Wood, screws,paint, wire, jumpers
![catapult06.jpg](/proxy/?url=https://content.instructables.com/FIB/IOYS/HIGFFQR1/FIBIOYSHIGFFQR1.jpg&filename=catapult06.jpg)
![catapult05.jpg](/proxy/?url=https://content.instructables.com/FS8/HQKI/HIGFFQR0/FS8HQKIHIGFFQR0.jpg&filename=catapult05.jpg)
Take a 4" x 15" x 1/2 inch piece of plywood and paint it orange. Diagonally wrap painters tape to make the stripes.
![catapult01.jpg](/proxy/?url=https://content.instructables.com/F77/05VB/HIGFAQ7P/F7705VBHIGFAQ7P.jpg&filename=catapult01.jpg)
![catapult04.jpg](/proxy/?url=https://content.instructables.com/FQY/BJIO/HIGFAQ7R/FQYBJIOHIGFAQ7R.jpg&filename=catapult04.jpg)
![catapult02.jpg](/proxy/?url=https://content.instructables.com/F7N/ITSW/HIGF952J/F7NITSWHIGF952J.jpg&filename=catapult02.jpg)
![catapult03.jpg](/proxy/?url=https://content.instructables.com/FH9/Q91U/HIGFAQ7Q/FH9Q91UHIGFAQ7Q.jpg&filename=catapult03.jpg)
![catapult07.jpg](/proxy/?url=https://content.instructables.com/FIT/80K9/HIGFAQ7S/FIT80K9HIGFAQ7S.jpg&filename=catapult07.jpg)
![catapult48.jpg](/proxy/?url=https://content.instructables.com/F24/ORRT/HIGFJIUE/F24ORRTHIGFJIUE.jpg&filename=catapult48.jpg)
![catapult49.jpg](/proxy/?url=https://content.instructables.com/FLH/5TCL/HIGFFQYI/FLH5TCLHIGFFQYI.jpg&filename=catapult49.jpg)
![catapult51.jpg](/proxy/?url=https://content.instructables.com/FW0/PIWA/HIGIL401/FW0PIWAHIGIL401.jpg&filename=catapult51.jpg)
![catapult10.jpg](/proxy/?url=https://content.instructables.com/FKI/V89I/HIGFFQR2/FKIV89IHIGFFQR2.jpg&filename=catapult10.jpg)
![catapult11.jpg](/proxy/?url=https://content.instructables.com/FTF/55AS/HIGEZ3KT/FTF55ASHIGEZ3KT.jpg&filename=catapult11.jpg)
![catapult14.jpg](/proxy/?url=https://content.instructables.com/FI4/GKKG/HIGFFQRX/FI4GKKGHIGFFQRX.jpg&filename=catapult14.jpg)
![catapult15.jpg](/proxy/?url=https://content.instructables.com/FF2/RATS/HIGFAQ7V/FF2RATSHIGFAQ7V.jpg&filename=catapult15.jpg)
![catapult19.jpg](/proxy/?url=https://content.instructables.com/FHK/07YP/HIGIL3ZN/FHK07YPHIGIL3ZN.jpg&filename=catapult19.jpg)
![catapult17.jpg](/proxy/?url=https://content.instructables.com/FFJ/ZOYM/HIGFAQ7X/FFJZOYMHIGFAQ7X.jpg&filename=catapult17.jpg)
![catapult18.jpg](/proxy/?url=https://content.instructables.com/FP0/7992/HIGF1E4K/FP07992HIGF1E4K.jpg&filename=catapult18.jpg)
![catapult16.jpg](/proxy/?url=https://content.instructables.com/FIO/7WQR/HIGFAQ7W/FIO7WQRHIGFAQ7W.jpg&filename=catapult16.jpg)
![catapult21.jpg](/proxy/?url=https://content.instructables.com/F55/N7T9/HIGIL3ZP/F55N7T9HIGIL3ZP.jpg&filename=catapult21.jpg)
![catapult20.jpg](/proxy/?url=https://content.instructables.com/FE0/9RFN/HIGFAQ80/FE09RFNHIGFAQ80.jpg&filename=catapult20.jpg)
![catapult29.jpg](/proxy/?url=https://content.instructables.com/F3Y/V28J/HIGFJNYY/F3YV28JHIGFJNYY.jpg&filename=catapult29.jpg)
![catapult30.jpg](/proxy/?url=https://content.instructables.com/FQH/0HJ4/HIGEYPRH/FQH0HJ4HIGEYPRH.jpg&filename=catapult30.jpg)
![catapult28.jpg](/proxy/?url=https://content.instructables.com/FY9/A518/HIGF958Y/FY9A518HIGF958Y.jpg&filename=catapult28.jpg)
![catapult52.jpg](/proxy/?url=https://content.instructables.com/FOT/59CL/HIGFFQYJ/FOT59CLHIGFFQYJ.jpg&filename=catapult52.jpg)
![catapult25.jpg](/proxy/?url=https://content.instructables.com/FSG/GJ71/HIGEZ3KU/FSGGJ71HIGEZ3KU.jpg&filename=catapult25.jpg)
Super glue the servo motor holder to the candy tower.
![catapult23.jpg](/proxy/?url=https://content.instructables.com/FVN/QTQU/HIGIL3ZQ/FVNQTQUHIGIL3ZQ.jpg&filename=catapult23.jpg)
![catapult45.jpg](/proxy/?url=https://content.instructables.com/F0D/Z31V/HIGF95BH/F0DZ31VHIGF95BH.jpg&filename=catapult45.jpg)
![catapult44.jpg](/proxy/?url=https://content.instructables.com/FRD/NRU1/HIGIL3ZW/FRDNRU1HIGIL3ZW.jpg&filename=catapult44.jpg)
![catapult53.jpg](/proxy/?url=https://content.instructables.com/FZY/UD9Q/HIGFAQ8G/FZYUD9QHIGFAQ8G.jpg&filename=catapult53.jpg)
![catapult55.jpg](/proxy/?url=https://content.instructables.com/F3L/SMZV/HIGF1E72/F3LSMZVHIGF1E72.jpg&filename=catapult55.jpg)
![catapult58.jpg](/proxy/?url=https://content.instructables.com/F7R/E6T2/HIGIL402/F7RE6T2HIGIL402.jpg&filename=catapult58.jpg)
![catapult57.jpg](/proxy/?url=https://content.instructables.com/FAV/C4V0/HIGF1E73/FAVC4V0HIGF1E73.jpg&filename=catapult57.jpg)
![catapult56.jpg](/proxy/?url=https://content.instructables.com/FYZ/ZMKK/HIGEZ3KV/FYZZMKKHIGEZ3KV.jpg&filename=catapult56.jpg)
![catapult60.jpg](/proxy/?url=https://content.instructables.com/F2I/K6WQ/HIGFFR13/F2IK6WQHIGFFR13.jpg&filename=catapult60.jpg)
![catapult59.jpg](/proxy/?url=https://content.instructables.com/FIC/OJHS/HIGIL403/FICOJHSHIGIL403.jpg&filename=catapult59.jpg)
![catapult67.jpg](/proxy/?url=https://content.instructables.com/FGE/5AYY/HIGF4JOA/FGE5AYYHIGF4JOA.jpg&filename=catapult67.jpg)
![catapult66.jpg](/proxy/?url=https://content.instructables.com/FXL/RF1Z/HIGF6LZ0/FXLRF1ZHIGF6LZ0.jpg&filename=catapult66.jpg)
Note the use of servo extension cords and a wire guide to protect the wires that move through the rotation process.
![catapult63.jpg](/proxy/?url=https://content.instructables.com/F01/OUZN/HIGFJO36/F01OUZNHIGFJO36.jpg&filename=catapult63.jpg)
Software:
#include <Servo.h>
Servo candy;
Servo rotate;
Servo latch;
Servo spring;
int fire=2;
int right=4;
int left=6;
int val=0;
int val1=0;
int val2=0;
int val3=0;
void setup()
{pinMode(fire,INPUT);
pinMode(right,INPUT);
pinMode(left,INPUT);
candy.attach(13);
rotate.attach(12);
latch.attach(8);
spring.attach(7);
rotate.write(45);
delay(500);
rotate.write(30);
latch.write(60);
spring.write(200);
candy.write(25);
candy.write(140);
delay(500);
candy.write(25);
}
void loop()
{
val=digitalRead(left);
val1=digitalRead(right);
val2=digitalRead(fire);
if(val==HIGH or val1==HIGH or val2==HIGH)
{
if (val==HIGH)
{val3=(val3+5);}
if (val3>=145)
{
val3=(val3-5);
}
if (val3<65)
{
val3=65;
}
rotate.write(val3);
delay(50);
}
else
val=digitalRead(left);
val1=digitalRead(right);
val2=digitalRead(fire);
if(val1==HIGH)
{val3=(val3-5);
if(val3<65)
{val3=(val3+5);
}
rotate.write(val3);
delay(50);
}
else
if(val2==HIGH)
{spring.write(50);
delay(1000);
latch.write(200);
delay(1000);
spring.write(200);
delay(500);
latch.write(60);
delay(1000);
rotate.write(50);
delay(500);
rotate.write(30);
candy.write(140);
delay(500);
candy.write(25);
val3=0;
}}
EXTRA CREDIT!
![catapult41.jpg](/proxy/?url=https://content.instructables.com/F6F/AM8K/HIGFAQ87/F6FAM8KHIGFAQ87.jpg&filename=catapult41.jpg)
This is about 60% reliable, so more work needs to be done (probably in shielding the microphones).
The concept is this--when a loud sound arrives, it will probably be louder at the microphone pointed in the direction of the sound.
![schematic2.jpg](/proxy/?url=https://content.instructables.com/FE4/9SPO/HIGFK25T/FE49SPOHIGFK25T.jpg&filename=schematic2.jpg)
Microphones are Jameco #320179
![catapult34.jpg](/proxy/?url=https://content.instructables.com/F7D/QJD9/HIGFAQ84/F7DQJD9HIGFAQ84.jpg&filename=catapult34.jpg)
![catapult39.jpg](/proxy/?url=https://content.instructables.com/FYG/75TB/HIGFJIU9/FYG75TBHIGFJIU9.jpg&filename=catapult39.jpg)
In a room without a lot of people and clutter, I can achieve very high accuracy; but I think the machine trained me instead of the other way around.
Software:
#include <Servo.h>
Servo candy;
Servo rotate;
Servo latch;
Servo spring;
int led2=3;
int val2=0;
int ledcenter=6;
int ledPin=5;
int valm=0;
int val1=0;
void setup()
{pinMode(ledPin, OUTPUT);
pinMode(led2,OUTPUT);
pinMode(ledcenter,OUTPUT);
candy.attach(13);
rotate.attach(12);
latch.attach(8);
spring.attach(7);
rotate.write(45);
delay(500);
rotate.write(30);
latch.write(60);
spring.write(200);
candy.write(25);
candy.write(140);
delay(500);
candy.write(25);
}
void loop()
{
valm=analogRead(0);
val2=analogRead(3);
val1=analogRead(1);
if(valm>400 || val1>400 || val2>400)
//val1=val1-60;
{if(valm>val2 && valm>val1)
{digitalWrite(ledPin, HIGH);
rotate.write(130);
delay(500);
rotate.write(145);
spring.write(50);
delay(1000);
latch.write(200);
delay(1000);
spring.write(200);
delay(500);
latch.write(60);
delay(1000);
rotate.write(50);
delay(500);
rotate.write(30);
candy.write(140);
delay(500);
candy.write(25);
digitalWrite(ledPin, LOW);
delay(1000);
valm=0;
val2=0;
val1=0;
}
else
{
if(val2>valm && val2>val1)
{digitalWrite(led2,HIGH);
rotate.write(75);
spring.write(50);
delay(1000);
latch.write(200);
delay(1000);
spring.write(200);
delay(500);
latch.write(60);
delay(1000);
rotate.write(40);
delay(500);
rotate.write(30);
candy.write(140);
delay(500);
candy.write(25);
digitalWrite(led2,LOW);
delay(1000);
valm=0;
val2=0;
val1=0;
}
else
{if(val1>valm && val1>val2)
{digitalWrite(ledcenter,HIGH);
rotate.write(110);
spring.write(50);
delay(1000);
latch.write(200);
delay(1000);
spring.write(200);
delay(500);
latch.write(60);
delay(1000);
rotate.write(40);
delay(500);
rotate.write(30);
candy.write(140);
delay(500);
candy.write(25);
digitalWrite(ledcenter,LOW);
delay(1000);
valm=0;
val2=0;
val1=0;
}}}}}