Explosion Effect - Talcapult
Name:
Talcapult
(Because its a small catapult that launches talcum-powder).
What does it do
Creates a mini mushroom cloud effect.
Intended to have the visual impact of small scale pyrotechnics without the cost or danger.
Its not that I don't love blowing stuff up its just that it is not always convenient.
Why
Personally I use the talcapults as targets for duino tag (arduino laser tag games), and hope to use them with more laser tag systems in the future, just to make things a bit more visually impressive.
System might have some uses as part of low budget special effects set ups.
Talcapult Video
Talcapult
(Because its a small catapult that launches talcum-powder).
What does it do
Creates a mini mushroom cloud effect.
Intended to have the visual impact of small scale pyrotechnics without the cost or danger.
Its not that I don't love blowing stuff up its just that it is not always convenient.
Why
Personally I use the talcapults as targets for duino tag (arduino laser tag games), and hope to use them with more laser tag systems in the future, just to make things a bit more visually impressive.
System might have some uses as part of low budget special effects set ups.
Talcapult Video
You Will Need
Parts you will need:
Servo - preferably a big powerful one (note: there is no provision for preventing the servo from excessive force and could potentially damage it so use an old or cheap one).
Thin ply wood.
Screws or small bolts for mounting parts
Spring / Springy material.
Thick wire e.g. coat hanger wire.
A few scraps of card or thin plastic.
Strong Tape.
Talcum powder (Talc).
Some means of controlling the servo:
e.g. Standard RC electronics
Good old Arduino
Almost any Micro-controller
Tools you will need:
Drill
Pencil
Ruler
Coping saw
Sand Paper
Pliers
Servo - preferably a big powerful one (note: there is no provision for preventing the servo from excessive force and could potentially damage it so use an old or cheap one).
Thin ply wood.
Screws or small bolts for mounting parts
Spring / Springy material.
Thick wire e.g. coat hanger wire.
A few scraps of card or thin plastic.
Strong Tape.
Talcum powder (Talc).
Some means of controlling the servo:
e.g. Standard RC electronics
Good old Arduino
Almost any Micro-controller
Tools you will need:
Drill
Pencil
Ruler
Coping saw
Sand Paper
Pliers
Backing Plate
Backing Plate Layout
Some basic woodwork.
Layout roughly as shown below but you will need to adjust measurements to suit the components you have.
Drill holes to mark the corners of the servo mounting hole, use a coping saw to cut out the servo mounting hole.
Drill more holes for:
Stand attachment.
Servo mounting servo screw holes.
Holes to allow the catch to be screwed on.
Some basic woodwork.
Layout roughly as shown below but you will need to adjust measurements to suit the components you have.
Drill holes to mark the corners of the servo mounting hole, use a coping saw to cut out the servo mounting hole.
Drill more holes for:
Stand attachment.
Servo mounting servo screw holes.
Holes to allow the catch to be screwed on.
Mechanism
Attach the spring to the servo.
The catch must be placed as to catch the spring arm for a while but as soon as a bit of force builds up the spring arm should push past the catch.
Too much force and the servo will be damaged, too little and the catapult won't have much power.
The catch must be placed as to catch the spring arm for a while but as soon as a bit of force builds up the spring arm should push past the catch.
Too much force and the servo will be damaged, too little and the catapult won't have much power.
Stand
I attached two wire spikes to my talcapults so they could be pushed in the ground to stay in place.
Test / Control
The easiest method of controlling the talcapults is manually with via RC car electronics, but there are plenty of other methods that can be used to control the talcapult.
Here is some arduino code I have used to control two talcapults, it uses IR sensors like the type described in my duino tag instructable.
Code:
(Not my best work, but may give you ideas)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include
Servo servo1; // create servo object to control a servo
Servo servo2;
int pos = 90; // variable to store the servo position
int pos2 = 90; // 2nd servo
int limits = 90;
int sensor = 5;
int sensor2 = 4;
int inputPin = 12;
int active = 0;
int led = 2;
int val = 0;
int whichServo = 0;
int route[10];
int i = 0;
void setup()
{
Serial.begin(9600);
servo1.attach(9); // attaches the servo on pin 9 to the servo object
servo2.attach(8);
pinMode(sensor, INPUT);
pinMode(sensor2, INPUT);
pinMode(inputPin, INPUT);
pinMode(led, OUTPUT);
digitalWrite(inputPin, HIGH);
Serial.println("ready");
}
void loop(){
val = digitalRead(inputPin);
if (val == LOW){
if(active == 1){
active = 0;
delay(300);
val = HIGH;
route[0] = 90;
route[1] = 120;
route[2] = 120;
route[3] = 120;
route[4] = 120;
route[5] = 120;
route[6] = 120;
route[7] = 120;
route[8] = 120;
route[9] = 120;
servoroute1();
servoroute2();
Serial.println("safe");
}
else{
active = 1;
delay(300);
val = HIGH;
route[0] = 120;
route[1] = 120;
route[2] = 120;
route[3] = 120;
route[4] = 120;
route[5] = 120;
route[6] = 120;
route[7] = 120;
route[8] = 120;
route[9] = 90;
servoroute1();
servoroute2();
Serial.println("active");
}
}
if (digitalRead(sensor) == LOW && active == 1){
whichServo = 2;
if (digitalRead(sensor2) == HIGH){
whichServo = 1;
}
Serial.print("HIT. Fire servo: ");
Serial.println(whichServo);
fireTalcapult();
delay(30);
}
servo1.write(pos); // tell servo to go to position in variable 'pos'
servo2.write(pos2);
if (active == 1){
digitalWrite(led, HIGH);
// Serial.println("active1");
}
else{
digitalWrite(led, LOW);
// Serial.println("safe1");
}
}
void fireTalcapult(){
Serial.println("fire");
//Subroutine for smooth movement of a servo over a complex route
route[0] = 20;
route[1] = 120;
route[2] = 130;
route[3] = 100;
route[4] = 90;
route[5] = 90;
route[6] = 90;
route[7] = 90;
route[8] = 90;
route[9] = 90;
if(whichServo == 1){
//Fast initial jump
pos = route[0];
servo1.write(pos);
delay(300);
//Allows for smooth movement
servoroute1();
}
if(whichServo == 2){
//Fast initial jump
pos2 = route[0];
servo2.write(pos2);
delay(300);
//Allows for smooth movement
servoroute2();
}
}
void servoroute1(){
while( i < 10 ){
if(pos > route[i]){
pos = pos - 1;
}
if(pos < route[i]){
pos = pos + 1;
}
if(pos == route[i]){
i = i + 1;
}
servo1.write(pos);
delay(10);
}
i = 0;
}
void servoroute2(){
while( i < 10 ){
if(pos2 > route[i]){
pos2 = pos2 - 1;
}
if(pos2 < route[i]){
pos2 = pos2 + 1;
}
if(pos2 == route[i]){
i = i + 1;
}
servo2.write(pos2);
delay(10);
}
i = 0;
}
Here is some arduino code I have used to control two talcapults, it uses IR sensors like the type described in my duino tag instructable.
Code:
(Not my best work, but may give you ideas)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include
Servo servo1; // create servo object to control a servo
Servo servo2;
int pos = 90; // variable to store the servo position
int pos2 = 90; // 2nd servo
int limits = 90;
int sensor = 5;
int sensor2 = 4;
int inputPin = 12;
int active = 0;
int led = 2;
int val = 0;
int whichServo = 0;
int route[10];
int i = 0;
void setup()
{
Serial.begin(9600);
servo1.attach(9); // attaches the servo on pin 9 to the servo object
servo2.attach(8);
pinMode(sensor, INPUT);
pinMode(sensor2, INPUT);
pinMode(inputPin, INPUT);
pinMode(led, OUTPUT);
digitalWrite(inputPin, HIGH);
Serial.println("ready");
}
void loop(){
val = digitalRead(inputPin);
if (val == LOW){
if(active == 1){
active = 0;
delay(300);
val = HIGH;
route[0] = 90;
route[1] = 120;
route[2] = 120;
route[3] = 120;
route[4] = 120;
route[5] = 120;
route[6] = 120;
route[7] = 120;
route[8] = 120;
route[9] = 120;
servoroute1();
servoroute2();
Serial.println("safe");
}
else{
active = 1;
delay(300);
val = HIGH;
route[0] = 120;
route[1] = 120;
route[2] = 120;
route[3] = 120;
route[4] = 120;
route[5] = 120;
route[6] = 120;
route[7] = 120;
route[8] = 120;
route[9] = 90;
servoroute1();
servoroute2();
Serial.println("active");
}
}
if (digitalRead(sensor) == LOW && active == 1){
whichServo = 2;
if (digitalRead(sensor2) == HIGH){
whichServo = 1;
}
Serial.print("HIT. Fire servo: ");
Serial.println(whichServo);
fireTalcapult();
delay(30);
}
servo1.write(pos); // tell servo to go to position in variable 'pos'
servo2.write(pos2);
if (active == 1){
digitalWrite(led, HIGH);
// Serial.println("active1");
}
else{
digitalWrite(led, LOW);
// Serial.println("safe1");
}
}
void fireTalcapult(){
Serial.println("fire");
//Subroutine for smooth movement of a servo over a complex route
route[0] = 20;
route[1] = 120;
route[2] = 130;
route[3] = 100;
route[4] = 90;
route[5] = 90;
route[6] = 90;
route[7] = 90;
route[8] = 90;
route[9] = 90;
if(whichServo == 1){
//Fast initial jump
pos = route[0];
servo1.write(pos);
delay(300);
//Allows for smooth movement
servoroute1();
}
if(whichServo == 2){
//Fast initial jump
pos2 = route[0];
servo2.write(pos2);
delay(300);
//Allows for smooth movement
servoroute2();
}
}
void servoroute1(){
while( i < 10 ){
if(pos > route[i]){
pos = pos - 1;
}
if(pos < route[i]){
pos = pos + 1;
}
if(pos == route[i]){
i = i + 1;
}
servo1.write(pos);
delay(10);
}
i = 0;
}
void servoroute2(){
while( i < 10 ){
if(pos2 > route[i]){
pos2 = pos2 - 1;
}
if(pos2 < route[i]){
pos2 = pos2 + 1;
}
if(pos2 == route[i]){
i = i + 1;
}
servo2.write(pos2);
delay(10);
}
i = 0;
}
Auto Reload
I tried several different methods to getting an auto reload function working and this proved the most effective, it may seem a bit crude, but its simplicity is what made it reliable.
A gravity hopper is carried on the catapult arm and feeds into a small cup which will clog when full.
This might take a bit of adjusting to get it to work but here are some pictures of what worked well for with my system, it reliably gave 3 firings before it needed refilling. To give an idea of scale the pipe is 22mm diameter.
A gravity hopper is carried on the catapult arm and feeds into a small cup which will clog when full.
This might take a bit of adjusting to get it to work but here are some pictures of what worked well for with my system, it reliably gave 3 firings before it needed refilling. To give an idea of scale the pipe is 22mm diameter.