Home > Driving Displays, Exploring Ideas, Hardware testing > Arduino Rocket Launch Controller

Arduino Rocket Launch Controller

The schematic:

rocketlaunchersch

See it in YouTube:

Having fun:

Masking tape to do the yellow spray painting…

Some effort was needed to find the actual parts.( RadioShack, OfficeMax, Sparkfun, HomeDepot…)

Was difficult to organize all the parts, a bigger enclosure is recommended.

Finally a deeper  box was found,  (same cover dimensions).

Here is the final code used in the physical implementation:

-NewSoftSerial library was used to avoid random commands to the display during program downloading.

-The COM-09766 is connected to the pin 2 (software TX data).

/*RocketLauncher
ROCKET LAUNCHER CONTROLLER.
Arduining.com  05 Jan 2012 (hardware implemented version)

-A count-down TIMER is implemented.
-The potentiometer is used to set the TIMER.
-Two Push-Buttons: "ARM" to set the counter and "GO" to start the counter.
-Display: Sparkfun's Serial 4 Digit 7-Segment Display . COM-09766 (RED).
-NewSoftSerial library is used to avoid random commands to the display
 during program downloading.
*/
#define FuseTIME      1500  //Fuse current duration in milliseconds.

#include <NewSoftSerial.h>  //Usinf the NewSoftSerial library.

#define Fuss     7          //Pin connected to the Fuse relay.
#define GoButt   6          //Pin connected to the GO button.
#define ArmButt  5          //Pin connected to the ARM button.
#define BuzzPin  4          //Connected to the Speaker.
#define TXdata   3          //Conneted to Rx of the Display.
#define RXdata   2          //not used in this project
#define SetPot   0          //Analog Pin connected to the Pot.

NewSoftSerial mySerialPort(RXdata,TXdata);

void setup(){
  pinMode(TXdata,OUTPUT);
  pinMode(RXdata,INPUT);
  pinMode(Fuss,OUTPUT);
  pinMode(ArmButt, INPUT);        // set "ARM" button pin to input
  pinMode(GoButt, INPUT);         // set "GO" button pin to input
  digitalWrite(Fuss,LOW);         //OPEN the fuse circuit.
  digitalWrite(ArmButt, HIGH);    // turn on pullup resistor 
  digitalWrite(GoButt, HIGH);     // turn on pullup resistor 
  mySerialPort.begin(9600);
  delay(10);                      //Wait for Serial Display startup.
  mySerialPort.print("v");        //Reset the display.
  mySerialPort.print("z");        //Brightness Control.
  mySerialPort.print(0x40,BYTE);  //3/4 Intensity.
  mySerialPort.print("w");        //Decimal Point Control.
  mySerialPort.print(0x10,BYTE);  //turn on the colon ":".
}

int  DownCntr;                    // down counter (1/10 Secs.)
int  Go=0;                        // Stopped

//================================================================
void loop(){
  if(!digitalRead(GoButt)||!digitalRead(ArmButt)){
    Go=0;                         //ABORT!!!
    tone(BuzzPin, 440, 1500);
    delay(1500);
  }

  if(Go==0){
    WaitARM();  
    WaitGO();
  }
  ShowTimer();
  if (DownCntr > 50){
      if (DownCntr % 10 ==0)tone(BuzzPin, 1000, 50);  //Tone every second.
     }
  else if (DownCntr % 2 ==0)tone(BuzzPin, 1000, 50);  //Tone every 1/5 second.

  if (DownCntr ==0){
    //------------------ ROCKET LAUNCH! --------------------
    tone(BuzzPin, 440, FuseTIME);  //Launch audible signal
    digitalWrite(Fuss,HIGH);       //CLOSE the fuse circuit
    delay(FuseTIME);
    digitalWrite(Fuss,LOW);        //OPEN the fuse circuit.
    //------------------------------------------------------
     Go=0;
    }
  while (millis()% 100);        //Wait until the next 1/10 of second.
  delay(50);
  DownCntr--;
}

//----------------------------------------
void WaitGO(){
  ShowTimer();
  while(digitalRead(GoButt));
  Go=1;
  delay(20);
  while(!digitalRead(GoButt));  //Debounce GO button.
}

//------------------------------------------------------
void ReadTimer(){
  DownCntr = map(analogRead(SetPot), 0, 1023, 5, 60);
  DownCntr*=10;  
}
//------------------------------------------------------
void ShowTimer(){
  String seconds = String (DownCntr, DEC);
  while(seconds.length()<3)seconds= "0" + seconds;     //format to 3 numbers.
  mySerialPort.print(seconds);                         //Write to Display.
  mySerialPort.print(" ");                             //Last digit off. 
}

//------------------------------------------------------
void WaitARM(){
  while(digitalRead(ArmButt)==1){
     ReadTimer(); 
     mySerialPort.print(" ");    //Turn Off Digits.
     delay(50);
     ReadTimer(); 
     ShowTimer();                   //Show Digits.
     delay(150);
  }

  Go=0;
  ShowTimer();
  tone(BuzzPin, 2000, 150);
  delay(200);
  tone(BuzzPin, 2000, 150);
  delay(200);
  tone(BuzzPin, 2000, 150);

  delay(20);
  while(!digitalRead(ArmButt));  //Debounce ARM button.

}
Advertisements
  1. benoit
    June 27, 2012 at 10:47 AM

    Thank you, it’s great. How have you built your relay?

  2. benoit
    June 27, 2012 at 11:24 AM

    Also, Why have you got 2 batteries? thanks

    • July 7, 2012 at 12:04 AM

      The 9V battery is to power the Arduino board (7~12V is recomended to feed the internal 5Volts regulator). The 6 Vols pack (4 x AA) is used to power the relay and to blow the fuse (ignitor). Is possible to power everithing with 7-12 volts. The 9V batt is too small to blow the ignitor.

  3. Russell Davis
    July 6, 2012 at 2:02 AM

    Can you supply me with a list of all the parts included? I’m teaching my son how to build model rockets, and thought this was a great project.

  4. Benoit
    July 8, 2012 at 5:33 AM

    Thanks a lot. I have built it but my 7-Segment Display. COM-09766 is getting mad, just giving random figures, and can’t adjust it with the potentiometer, any idea?
    Thanks

    • July 9, 2012 at 9:06 AM

      NewSoftSerial library was used to avoid random commands to the display during program downloading. The pin 2 was used as TX data. I’ll be posting the final (hardware) code.

  5. Benoit
    July 9, 2012 at 2:21 PM

    Thank you so much,I am looking forward!

  6. Benoit
    July 9, 2012 at 2:41 PM

    Thanks for the code, I’ve tried it but it says the NewSoftSerialdoes not have a name….any idea?

  7. Abdul Samad
    September 10, 2012 at 10:45 AM

    error: overriding ‘virtual size_t Print::write(uint8_t)’ … I am getting this compiling error. Please help

    • Alan N5ILN
      December 28, 2012 at 5:53 PM

      No errors seen using Arduino 1.0.3 and compiling for Uno R3. Perhaps a fresh install of the Arduino IDE and libraries will eliminate the error.

  8. Alan N5ILN
    December 28, 2012 at 5:56 PM

    Arduino v1.0.3 reports “BYTE obsolete”. Fix (untested): remove BYTE clause from myserial.print() statements in setup().

  9. Mike S.
    February 17, 2013 at 1:09 AM

    For the code to compile without any errors in Arduino V1.0.3:

    1. Change all references for NewSoftSerial to SoftwareSerial.

    2. Change mySerialPort.print(0x40,BYTE); to mySerialPort.write(0x40);

    3. Change mySerialPort.print(0x10,BYTE); to mySerialPort.write(0x10);

  10. May 8, 2013 at 12:37 AM

    Great project. This weekend we had good fun at my son’s cub scout rocket launch. That got us interested and me and my son would like to build this controller. can you please provide part list , the simulation software used and circuit diagram. New to DIY electronics, Arduino but have played around with electronic kits and good at programming. any details would really help.

    • Matt
      May 13, 2013 at 1:31 PM

      I had created a list with a spreadsheet. I will see if I can find it. I’ll post a download link (if allowed)

      • May 20, 2013 at 1:16 AM

        Are you able to email it to me please?

      • Sterling
        August 30, 2013 at 3:19 PM

        Hi Matt,
        Do you happen to have a list of parts for this project and possibly more detailed instructions/insight on the build?
        Thanks a lot,
        Sterling

  11. Matt
    May 13, 2013 at 1:30 PM

    Just built a modified version of this box. Still part of the way through it. It is complete except for the launch circuit. The logic and controls are running beautifully.

    For those using the Sparkfun COM-11441 display. Remark out the following line in the WaitARM method. It causes the numbers to jump about the display randomly… removing it solved the problem for me.

    mySerialPort.print(” “); //Turn Off Digits.

    • June 1, 2014 at 3:02 PM

      use four spaces in mySeialPort.print() message. The publishing sofware only shows one space.

  12. sam
    July 20, 2013 at 4:58 AM

    hi sir, im very interested and excited to build a rocket launch controller using arduino ..can you give me the list of all components that will be use for making this project thanks 🙂 .. please email me

  13. Sterling
    August 30, 2013 at 2:59 PM

    I think this is a fantastic project and very well made!
    Would it be possible to email me the list of parts so I can build one myself please?
    Thanks in advance,
    Sterling

  14. Jason lim
    September 6, 2013 at 11:52 PM

    what software you used to draw your schematic ????

  15. Ron Struewing
    October 7, 2013 at 10:58 AM

    Do you have the parts list available specifically for D2, D3, and the Relay or have I missed it earlier? Thank you.

    • October 7, 2013 at 1:15 PM

      D2 is the 1N4004 diode, the D3 is a Light Emiting Diode inside the Safety Switch.
      The relay can be any 5Volts (coil) capable of driving more than 1Ampere.
      You can replace R5, D2, Q1 an the relay with the module in Amazon, look for:
      5V 1 One Channel Relay Module Expansion Board For Arduino
      Also in DX.com , Ebay, Aliexpress …

  16. Nick
    October 21, 2013 at 8:26 PM

    Hey ardunaut, do you think you could post a video or tutorial for people who are not good on the electronics side of this project. That would be great, Thanks in advance!

  17. December 28, 2013 at 6:42 PM

    @ardunaut, I love this setup and have been looking trying to find a way to adjust your code to make it where I can do just seconds or minutes and seconds…Do you happen to know what I should do to make this happen? My reasoning for this is because we are using this system for an airsoft simulation and need a longer timer on the system.

    Thanks in advance!!!

  18. lewis
    June 1, 2014 at 12:15 AM

    Help My daughter and I decided to do this for a school project but will not work. the final code is giving multiple errors.

    • June 1, 2014 at 2:38 PM

      Change both ocurrences of “NewSoftSerial” by “SoftwareSerial”, is the new library name. Change also the instructions using “BYTE”:
      mySerialPort.print(0x40, BYTE); change to mySerialPort.write(0x40);
      mySerialPort.print(0x10, BYTE); change to mySerialPort.write(0x10);
      Also correct the instruction in waitARM() function:
      mySerialPort.print(” “); to mySerialPort.print(” “); write a four spaces message to the display. Sometimes the publishing application removes spaces and only one space apears in this response.

  19. June 25, 2014 at 11:10 AM

    How would i go about using minutes and seconds for the countdown?

    Thanks

  20. robbie
    July 9, 2014 at 9:31 PM

    could some one help with this error
    Arduino: 1.5.6-r2 (Windows 7), Board: “Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)”
    sketch_jul10d:14: error: ‘SoftwaerSerial’ does not name a type
    sketch_jul10d.ino: In function ‘void setup()’:
    sketch_jul10d:25: error: ‘mySerialPort’ was not declared in this scope
    sketch_jul10d.ino: In function ‘void ShowTimer()’:
    sketch_jul10d:87: error: ‘mySerialPort’ was not declared in this scope
    sketch_jul10d.ino: In function ‘void WaitARM()’:
    sketch_jul10d:95: error: ‘mySerialPort’ was not declared in this scope
    sketch_jul10d:111: error: expected `}’ at end of input
    This report would have more information with
    “Show verbose output during compilation”
    enabled in File > Preferences.

    • July 11, 2014 at 5:22 PM

      ‘SoftwareSerial’ not ‘SoftwaerSerial’

  21. August 17, 2014 at 5:33 PM

    Hi there, My sons and I are getting into model rockets and your launch controller looks like a great project for us to work on. Do you happen to have a full parts list? I have never built something like this before or use arduino. Any help would be appreciated.

  22. Mark
    December 5, 2014 at 2:32 PM

    Hi Ardunaut, I’m working with No Starch Press on a new Arduino book and would love to use your code as an example if possible. Would you be willing to give permission with an attribute to you and link to your site? Best wishes, Mark

    • December 6, 2014 at 8:09 AM

      You have my permission, glad to be of help…

  23. sevendeadlysinz
    February 28, 2015 at 7:10 PM

    What changes to the code need to be made to show it show all 4 digits? 2 digits of seconds and 2 digits of milliseconds

  24. Curtiss
    March 14, 2015 at 4:21 AM

    I just built a simple, although very cool rocket launch controller using simple switches, leds and resisters. It was fun and it does look way cooler than anything you can buy in the store. As an “old hack” that’s been programming for over 30 years I’m seriously considering a project like this. I think my 8 year old son would get a serious kick out of it.

    Model rocketry is something I loved as a kid and I’m having a blast introducing my son to it. I wrote my first BASIC program at age 13 (so, over 30 plus 13 means I am “older”) and in that computer camp using TRS-80 Model 2’s we wrote a countdown program for the engineering summer camp building rockets. 🙂 My love of programming didn’t change, but rockets were cool too.

    Very cool build sir.

    • John
      June 29, 2015 at 4:45 PM

      In regards to R5…is 2k4 correct or it a 24k resister? I haven’t worked with electrical components.

      • June 30, 2015 at 12:30 AM

        R5 = 2.4k

  25. John
    July 5, 2015 at 3:19 PM

    My display has the connections +, -, SDA, SCL. Correct me if I’m wrong. The + will go to 5V on the Arduino, – Ground on the Arduino. Where do I connect the SDA and SCL?

    This is my first time using a relay. I understand the VCC and Ground. Is the relay Normally Closed or Normally Open?

    Thank you

    John

    • July 5, 2015 at 5:49 PM

      Your display has an I2C interface, the one used in this project has a serial interface. You’ll need the Wire Library to use it.
      Normally OPEN contacts were used in the relay.

  26. fernando soares
    August 15, 2015 at 8:40 PM

    Hi ! how can i use 8-digit seven segment LED display module using MAX7219 ?

    Thank you!

  27. manjula
    September 12, 2015 at 3:11 AM

    could some one help with this error
    Arduino: 1.5.6-r2 (Windows 7), Board: “Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\mega C:\Users\APPLEM~1\AppData\Local\Temp\build7914549900261659929.tmp\buzzer.cpp -o C:\Users\APPLEM~1\AppData\Local\Temp\build7914549900261659929.tmp\buzzer.cpp.o
    buzzer_1.ino: In function ‘void setup()’:
    buzzer_1.ino:18:6: error: redefinition of ‘void setup()’
    buzzer.ino:18:6: error: ‘void setup()’ previously defined here
    buzzer_1.ino: At global scope:
    buzzer_1.ino:32:6: error: redefinition of ‘int DownCntr’
    buzzer.ino:32:6: error: ‘int DownCntr’ previously declared here
    buzzer_1.ino:33:6: error: redefinition of ‘int Go’
    buzzer.ino:33:6: error: ‘int Go’ previously defined here
    buzzer_1.ino: In function ‘void loop()’:
    buzzer_1.ino:36:6: error: redefinition of ‘void loop()’
    buzzer.ino:36:6: error: ‘void loop()’ previously defined here
    buzzer_1.ino: In function ‘void WaitGO()’:
    buzzer_1.ino:68:6: error: redefinition of ‘void WaitGO()’
    buzzer.ino:68:6: error: ‘void WaitGO()’ previously defined here
    buzzer_1.ino: In function ‘void ReadTimer()’:
    buzzer_1.ino:77:6: error: redefinition of ‘void ReadTimer()’
    buzzer.ino:77:6: error: ‘void ReadTimer()’ previously defined here
    buzzer_1.ino: In function ‘void ShowTimer()’:
    buzzer_1.ino:82:6: error: redefinition of ‘void ShowTimer()’
    buzzer.ino:82:6: error: ‘void ShowTimer()’ previously defined here
    buzzer_1.ino: In function ‘void WaitARM()’:
    buzzer_1.ino:90:6: error: redefinition of ‘void WaitARM()’
    buzzer.ino:90:6: error: ‘void WaitARM()’ previously defined here
    redefinition of ‘void setup()’

    • September 13, 2015 at 1:30 AM

      Looks like the code is pasted twice …

      • manjula
        September 15, 2015 at 8:27 PM

        Yess sir,
        thnz so much.
        I want to this tutorial with push button,LCD,manually counter,and key pad or send quntity

  28. December 21, 2015 at 7:50 PM

    Any one know if i can use this display please …4 Digit Red 7 Segment Serial LED Module TMHC74HC595 4-bit Arduino

    http://www.ebay.co.uk/itm/121694709448?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
    Thanks folks

  29. February 21, 2016 at 12:34 PM

    Anyone get a list of parts? I would really like to duplicate this build ina nice Shiny aluminum housing. But I dont know what version of the Arduino controller to get. A parts list would be awesome if possible thanks.

  30. Andrew
    April 12, 2016 at 4:04 AM

    hello … and if you wanted to use a TM1637 display? maybe I don’t need the serial port, but can not handle the single digits … can someone help me? thank you

  1. April 22, 2012 at 1:59 PM
  2. July 17, 2012 at 3:36 PM
  3. February 16, 2013 at 1:43 AM

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: