Introduction: RC Rocket Launch System

About: I am a human being that enjoys to build things. I also say GNU/Linux instead of just Linux. Yeah, I'm that kind of person.
This instructable will show you how to make an RC launch system for your Estes rocket, which can be operated with a TV remote. What it does is it allows you to press the center button on your TV remote, and it'll automatically launch your rocket. In this way it is basically a wireless version of the standard launch controller. But this is not all it does. You can use the up and down arrows on your remote to set a delay, and you can use its count-down feature to ignite it like a time-bomb. It works with just about every TV remote, and uses standard rocket igniters.

INSTRUCTIONS FOR OPERATION:
1. Clip alligator clips to igniter.
2. Plug 9v battery into Arduino.
3. The screen should say "0 delay"
4. Press up and down on your remote until it says the exact number of seconds you want it to countdown from.
5. When ready to launch, walk away from the rocket (without worrying about how far the cable stretches) and press the center button on your TV remote.
6. It'll countdown from the number you chose (displaying the countdown on the bottom row of the LCD) and your rocket will be up in the air!

Here is a poor quality video showing the device activating an igniter. Just imagine that the igniter is inside a rocket.

Step 1: Supplies

Here are all the supplies you'll need:
1 Estes Launch Controller
1 Arduino
1 5v Relay
1 LCD screen (for displaying countdown)
1 IR receiver diode
1 NPN transistor
1 10k resistor
1 diode
The IRremote library

Step 2: Remove Controller Back

You should hopefully know how to do this. Flip the launch controller over, and remove the screws on the back. Then take off the back.

Step 3: Open It Up Even Further

Now you will open it up to see the inner workings of it. I don't think that Estes condones doing this, but who cares? Look at the pictures and pry the pictured panel off.

Step 4: Solder

You will now solder two wires to it, look at the pictures for more details. These wires will later be plugged into a relay to over-ride the key and button system, while still allowing you to use that if you wanted to.

Step 5: Set Up Relay on Breadboard

This part is tricky. A relay switch is simply a switch that in not controlled by pressing a button, or sliding switch, but is controlled by current. If it has current running through it, it will throw a switch. I'm no electrical engineer, so I can't explain this as well as some people, but wiring a relay directly to a micro controller will drawn infinite current, and will fry your micro controller. There are many ways to stop this from happening, each person has there own strategy, but I would use the one found here: 
http://blog.makezine.com/2009/02/02/connecting-a-relay-to-arduino/

Step 6: Wire Up IR Receiver

This is pretty easy. Wire pin 1 on the IR receiver (far left) to Arduino pin 3, wire pin 2 (middle) to ground, and pin 3 (far right) to 5v.

Step 7: Wire Up LCD

I needed another breadboard for this. Look at the second picture for reference, make sure to discard the buttons, those are leftover from another project (I've been reusing the same picture).

Step 8: Plug Launch Remote Into Breadboard

Take the two wires that are soldered to the launch controller. Connect one of them to the common pin of the relay, and the other to the normally open pin of the relay. It doesn't matter which wire is which.

Step 9: Determine Remote Codes

TV remotes work by sending out a binary code that is picked up by a receiver. Depending on what code it sends, the receiver will do something different. Run the following code on your Arduino:

#include "IRremote.h"

int RECV_PIN = 3;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    irrecv.resume();
  }
}

While this code is running, open up your serial monitor. Press your remote's center button, and write down the number that shows up. Now repeat for the up and down buttons.

Step 10: Code

Here is the code, commented for your convenience:

#include <IRremote.h> //For IR remotes
#include <LiquidCrystal.h> //For the display
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //Creates the display
int RECV_PIN = 3; //Receiver hooked up to pin 3
int seconds = 0;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  pinMode(2, OUTPUT); //Relay pin
  lcd.begin(16, 2); //16x2 lcd
  irrecv.enableIRIn();
}

void loop ()
{
  lcd.setCursor(0,0);
  lcd.print(seconds); //Shows the delay
  lcd.print(" delay");
  if (irrecv.decode(&results))
  {
    if (results.value == 2672) //Your center button    CHANGE THIS LINE!!!!!!!!!!!
    {
      if (seconds > 0)
      {
        int loops = 0;
        while (loops != seconds) //Countdown
        {
          lcd.setCursor(0,1);
          lcd.print("          ");
          lcd.setCursor(0,1);
          lcd.print((seconds-1)-loops);
          delay(1000);
          loops++;
        }
        digitalWrite(2, HIGH);
        delay(1000);
        digitalWrite(2, LOW);
        delay(200);
        digitalWrite(2, HIGH); //Tries a few times in case it doesn't work the first time
        delay(700);
        digitalWrite(2, LOW);
        delay(200);
        digitalWrite(2, HIGH);
        delay(700);
        digitalWrite(2, LOW);
        delay(200);
        digitalWrite(2, HIGH);
        delay(700);
        digitalWrite(2, LOW);
        delay(200);
        digitalWrite(2, HIGH);
        delay(700);
      }
      else
      {
        digitalWrite(2, HIGH);
      }
    }
    if (results.value == 752)  //Your up button        CHANGE THIS LINE!!!!!!!!!!
    {seconds++; lcd.clear(); delay(200);}
    if (results.value == 2800) //Your down button                CHANGE THIS LINE!!!!!!!!!!
    {seconds--; lcd.clear(); delay(200);}
  }
  else
  {
     digitalWrite(2, LOW);
  }
  irrecv.resume();
  delay(100);
}

Step 11: Launch Some Rockets!

You're finished and ready to launch some rockets. Remember to always take safety precautions, and if you have a short range remote, to stretch out some of the wire, or to use a delay. I hope your new launch system will greatly improve your rocket launching experience, I know it'll improve mine.

If you have any questions, comments, or angry rants, feel free to post them in the comments and I'll get back to you pretty quickly. Have fun and happy rocketeering!