NerdKits - electronics education for a digital generation

You are not logged in. [log in]

NEW: Learning electronics? Ask your questions on the new Electronics Questions & Answers site hosted by CircuitLab.

Sensors, Actuators, and Robotics » Model Rockets

April 13, 2009
by ranger
ranger's Avatar

Anyone ever fooled around with model rocket igniters? I'm thinking a fun afternoon project might be a more advanced control system than the ones that come with most kits... like maybe a 10 second countdown with flashing LEDs to match. Next time I'm at a hobby store I'll pick up some and test a few things, but I figure if someone else has done this before it could save me some time.

April 18, 2009
by Kevin
Kevin's Avatar

I have used a time delay relay to do something similar. Press the button, red light comes on, counts down and ignites rocket motor. I had a kill switch to abort the launch. Never did it with a micro controller though.

April 18, 2009
by mrobbins
(NerdKits Staff)

mrobbins's Avatar

I'm not familiar with how much current the model rocket igniters need to light, but depending on that you could certainly use either a relay or a MOSFET to complete the circuit and fire the igniter, just like we used the 2N7000 transistors in the Servo Squirter project. If you have some igniters, measure the resistance with a multimeter, and that should give you a clue.

Unrelated -- I was involved in designing and building a liquid fuel rocket engine -- see this video. But we used a spark plug and car ignition coil to get those started. Also, if you watch the clip segment for the "Home Depot Engine", those guys (Carl and Sam) now have a company called Terrafugia and are building a roadable aircraft!

Mike

May 23, 2009
by andy_b1986
andy_b1986's Avatar

that company Terrafugia i swear i have seen them on Dragons Den in the uk!!

June 08, 2009
by PyroMO
PyroMO's Avatar

I am familiar with standard electric igniters for pyrotechnics, but much less so with those for model rocketry. I could not find the ratings of what is called "all-fire" current for model rocket engine igniters, the current at which there is reliable ignition of the device. I did find mention of 400mA, but this may be misleading. Standard electric igniters generally have an all-fire current between 600mA and 800mA, with no-fire current of 160-300mA. I recommend a minimum of doubling the all-fire current at the igniter (do not forget to figure in your line loss from your firing line length.) Fifteen years ago or so I used to fire Estes model rocket igniters and found them to require much higher firing current and time than a standard electric igniter, but I do not know if this still holds true.

Most one and two circuit firing devices for commercial purposes use a capacitive discharge system. Capacitor firing overcomes both battery size, amperage draw lowering voltage, and firing line length.

To verify a "good" igniter before hitting the button with a very anti-climactic failure, a simple continuity check is necessary. However, for safety, the current passed during this check MUST be limited to 30mA or less. The simplest way to do this is by using a 20 or 25mA LED in series as a current-limiting test circuit.

Additionally, the firing line should be "shunted" (grounded together) when not in firing mode, ESPECIALLY while hooking up the igniter. This can be done by taking the firing box end of the line and simply twisting the wires together, or making a circuit to perform this action.

Commercial initiation systems require three seperate positive actions to fire a device. This is commonly achieved by a toggle switch, a timer that does not allow firing for a certain time (which is many times the charging of the capacitor) and a momentary switch to complete the firing. The "abort" button mentioned above should be used in reverse (the button must be held down to allow firing) for safety so that if you drop the controls, the unit will default to safety. A common added safety, especially when firing with groups of people, is the main power switch being a key switch where the key is removed from the device anytime someone is downrange and is carried by the person hooking up the igniter to ensure that no accidental firing may occur while readying for launch.

I apologize for the length of this post, but safety cannot be stressed enough, and although this looks extensive, implementing everything I have mentioned is actually much less complicated than getting your countdown timer working.

Happy launchings!

November 24, 2009
by n3ueaEMTP
n3ueaEMTP's Avatar

OK gang, My latest adventure is relevant to this post. My son's Cub Scout pack does a model rocket launch. I thought it would be nice if we had a 10 second countdown with info on the LCD for the launch controller and for spectators. To conserve pins, I did the output in binary and will use a 4511 BCD to 7 segment LED IC. I'll take any suggestions for cleaning up the code. Also, I plan on using relays to create a mechanical interlocks in addition to the software interlocks to prevent premature launches. Here is the code:

// Rocket Launcher // for the ATmega168 // medic122@n3uea.com

define F_CPU 14745600

include <stdio.h>

include <stdlib.h>

include <avr/io.h>

include <avr/interrupt.h>

include <avr/pgmspace.h>

include <inttypes.h>

include "../libnerdkits/delay.h"

include "../libnerdkits/lcd.h"

int main() {

//PC0-5 as outputs
DDRC = 0x3F;

// enable internal pullup resistors on PB5, PB4, PB3 (the launch buttons) PORTB |= (1<<PB5) | (1<<PB4) | (1<<PB3);

// init lcd lcd_init(); FILE lcd_stream = FDEV_SETUP_STREAM(lcd_putchar, 0, _FDEV_SETUP_WRITE); lcd_home();

while(1) { while(((PINB & (1<<PB5)) == 0) && ((PINB & (1<<PB4)) == 0) && ((PINB & (1<<PB3)) == 0)) {
//binary 10 PORTC = (1 <<PC5); lcd_home(); lcd_write_string(PSTR("Countdown: 10 ")); delay_ms(1000); PORTC &= ~(1 << PC5);

                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                            // binary 9
                            PORTC = (1 <<PC4) | (1<<PC1);
                            lcd_home();
                            lcd_write_string(PSTR("Countdown: 9            ")); 
                            delay_ms(1000);
                            PORTC &= ~(1 <<PC4) | (1<<PC1);
                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                            // binary 8
                            lcd_home();
                            lcd_write_string(PSTR("Countdown: 8            ")); 
                            PORTC = (1 <<PC4); 
                            delay_ms(1000);
                            PORTC &= ~(1 << PC4);
                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                            // binary 7
                            lcd_home();
                            lcd_write_string(PSTR("Countdown: 7            ")); 
                            PORTC = (1 <<PC3) | (1 <<PC2) | (1 <<PC1); 
                            delay_ms(1000);
                            PORTC &= ~ (1 <<PC3) | (1 <<PC2) | (1 <<PC1);
                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                            // binary 6
                            lcd_home();
                            lcd_write_string(PSTR("Countdown: 6            ")); 
                            PORTC = (1 <<PC3) | (1 <<PC2); 
                            delay_ms(1000);
                            PORTC &= ~ (1 <<PC3) | (1 <<PC2);
                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                            // binary 5
                            lcd_home();
                            lcd_write_string(PSTR("Countdown: 5            ")); 
                            PORTC = (1 <<PC3) | (1 <<PC1); 
                            delay_ms(1000);
                            PORTC &= ~ (1 <<PC3) | (1 <<PC1);
                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                            // binary 4
                            lcd_home();
                            lcd_write_string(PSTR("Countdown: 4            "));
                            PORTC = (1 <<PC3); 
                            delay_ms(1000);
                            PORTC &= ~(1 << PC3);
                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                            // binary 3
                            lcd_home();
                            lcd_write_string(PSTR("Countdown: 3            "));
                            PORTC = (1 <<PC2) | (1 <<PC1); 
                            delay_ms(1000);
                            PORTC &= ~(1 <<PC2) | (1 <<PC1);
                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                            // binary 2
                            lcd_home();
                            lcd_write_string(PSTR("Countdown: 2            "));
                            PORTC = (1 <<PC2); 
                            delay_ms(1000);
                            PORTC &= ~(1 << PC2);
                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                            // binary 1
                            lcd_home();
                            lcd_write_string(PSTR("Countdown: 1            "));
                            PORTC = (1 <<PC1); 
                            delay_ms(1000);
                            PORTC &= ~(1 << PC1);
                        //confirms rocket launch pin is off for safety purposes
                            PORTC &= ~ (1 <<PC0);

                             // binary 0
                if (((PINB & (1<<PB5)) == 0) && ((PINB & (1<<PB4)) == 0) && ((PINB & (1<<PB3)) == 0))
                                {
                                lcd_home();
                                lcd_write_string(PSTR("  Launching the Rocket   "));
                                // launches the rocket
                                PORTC = (1 <<PC0); 
                                delay_ms(4000);
                                //turns off rocket launch pin
                                PORTC &= ~ (1 <<PC0);
                                }
                    else {
                        lcd_home();
                        lcd_write_string(PSTR("  Aborting the Launch    "));
                        delay_ms(5000);
                    //confirms rocket launch pin is off for safety purposes
                        PORTC &= ~ (1 <<PC0);
                        }
}
            lcd_home();
            lcd_write_string(PSTR("    Ready for launch     "));
            }

return 0; }

ENJOY!

Chris B. n3ueaEMTP

Post a Reply

Please log in to post a reply.

Did you know that you can follow NerdKits on Facebook, YouTube, and Twitter? Learn more...