Introduction: 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




Step 1: 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

Step 2: 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.


Step 3: 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.



Step 4: Stand

I attached two wire spikes to my talcapults so they could be pushed in the ground to stay in place.

Step 5: 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;
}









Step 6: 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.