(Related documents: Making Easter egg rockets, Launch day)

Like any good geek, I could not just make the egg rockets and fly them. I first had to dust off the old physics texts and crunch some numbers. Below, I have a brief technical analysis of each of the three egg rockets that I made, along with some predictive flight data. Of course, the flight data prediction is based on some invalid assumptions about the aerodynamics of eggs with cardboard fins. In fact, these calculations are based on standard model rocket aerodynamics. (See the perl script that I use to estimate model rocket flights below. You can get decent engine data from NAR.)

This analysis raised some interesting questions:

- Will an egg, in this case "Bunny Blast", be able to withstand a peak accelleration of over 70 g's and a mean accelleration of over 30 g's?
- Will the launch tube direct the flight path enough for an egg rocket to get anywhere near its maximum potential altitude (around 16 m for "Easter Explosion" and "Bunny Blast")?
- Will a single egg rocket survive for a second launch?

Passion Power analysis (1/4A Estes engine)

ATTRIBUTES

cross sectional radius : 0.041 m

launch mass : 0.011 kg

post burn mass : 0.0095 kg

peak thrust : 4.95 N

average thrust : 2.36 N

burn time : 0.25 s

PREDICTED FLIGHT VALUES

max. velocity : 28.9604901918914 m/s = 104.257764690809 km/h

peak acceleration : 450 m/s2 = 45.8715596330275 g's

ave. acceleration : 230.243902439024 m/s2 = 23.4703264463837 g's

post burn alt. : 4.81842958309773 m

coast gain : 6.14234647811197 m

max. altitude : 10.9607760612097 m

ideal coast delay : 0.860726810000525 s

Easter Explosion analysis (1/2A Estes engine)

ATTRIBUTES

cross sectional radius : 0.041 m

launch mass : 0.012 kg

post burn mass : 0.0095 kg

peak thrust : 7.62 N

average thrust : 3.03 N

burn time : 0.36 s

PREDICTED FLIGHT VALUES

max. velocity : 34.542802811189 m/s = 124.35409012028 km/h

peak acceleration : 635 m/s2 = 64.7298674821611 g's

ave. acceleration : 281.860465116279 m/s2 = 28.7319536306095 g's

post burn alt. : 9.45684385967625 m

coast gain : 6.80957853315583 m

max. altitude : 16.2664223928321 m

ideal coast delay : 0.881845816626088 s

Bunny Blast analysis (1/2A Estes engine)

ATTRIBUTES

cross sectional radius : 0.041 m

launch mass : 0.011 kg

post burn mass : 0.0085 kg

peak thrust : 7.62 N

average thrust : 3.03 N

burn time : 0.36 s

PREDICTED FLIGHT VALUES

max. velocity : 34.7112453713632 m/s = 124.960483336908 km/h

peak acceleration : 692.727272727273 m/s2 = 70.6144008896302 g's

ave. acceleration : 310.769230769231 m/s2 = 31.6788206696464 g's

post burn alt. : 9.75682236975913 m

coast gain : 6.29926022593795 m

max. altitude : 16.0560825956971 m

ideal coast delay : 0.840274567949676 s

Model rocket flight data prediction perl script

This is the script that I wrote based on Randy Culp's web site and mathematical fragments that I cobbled together from here and there. If any able physicist (including Randy) cares to review this, I would be greatful. Of course, this is not optimized code by any means. There is proliferation of variables in order to help me follow the math. If any software geek wants to clean up the code, that would also be interesting - assuming the physics are valid.

#!/usr/bin/perl

# A single stage model rocket flight statistics estimator

# Chris Hammond-Thrasher

# Based on http://www.execpc.com/~culp/rockets/qref.html

use strict;

use Math::Complex;

use Math::Trig qw(atan);

# Constants

my $VERSION = "0.1.2";

my $RHO = 1.22; # air density kg/m**3

my $CD = 0.75; # drag coeficient, 0.75 is typical for rockets

my $G = 9.81; # acceleration due to gravity m/s**2

# Variables

my $radius; # cross sectional radius of rockets in meters

my $mass1; # launch mass including engine

my $mass2; # mass once fuel is consumed

my $thrust_peak; # peak thrust of motor in Newtons

my $thrust_ave; # average thrust of motor in Newtons

my $burn_time; # burn time in seconds

if (scalar(@ARGV) == 6) {

# Show banner

print "\nSingle Stage Rocket Flight Estimator v. $VERSION\n\n";

# Assign variables

$radius = $ARGV[0];

$mass1 = $ARGV[1];

$mass2 = $ARGV[2];

$thrust_peak = $ARGV[3];

$thrust_ave = $ARGV[4];

$burn_time = $ARGV[5];

} elsif (scalar(@ARGV) == 0) {

# Show banner

print "\nSingle Stage Rocket Flight Estimator v. $VERSION\n\n";

# Interactive mode

# Radius

while (1) {

print "Enter the cross sectional radius of the ",

"rocket in meters: ";

$radius =;

chomp($radius);

if ($radius > 0) {

last;

} else {

next;

}

}

# Launch mass

while (1) {

print "Enter the launch mass in kilograms: ";

$mass1 =;

chomp($mass1);

if ($mass1 > 0) {

last;

} else {

next;

}

}

# Post burn mass

while (1) {

print "Enter the post burn mass in kilograms: ";

$mass2 =;

chomp($mass2);

if ($mass2 > 0) {

last;

} else {

next;

}

}

# Peak thrust

while (1) {

print "Enter the peak motor thrust in Newtons: ";

$thrust_peak =;

chomp($thrust_peak);

if ($thrust_peak > 0) {

last;

} else {

next;

}

}

# Mean thrust

while (1) {

print "Enter the average motor thrust in Newtons: ";

$thrust_ave =;

chomp($thrust_ave);

if ($thrust_ave > 0) {

last;

} else {

next;

}

}

# Burn time

while (1) {

print "Enter the burn time of your motor in seconds: ";

$burn_time =;

chomp($burn_time);

if ($burn_time > 0) {

last;

} else {

next;

}

}

print "\n";

} else {

die "usage: alt.pl radius launch_mass post_burn_mass ",

"peak_thrust average_thrust burn_time\n";

}

# Print inputs

print "INPUT VALUES\n";

print "cross sectional radius : $radius m\n";

print "launch mass : $mass1 kg\n";

print "post burn mass : $mass2 kg\n";

print "peak thrust : $thrust_peak N\n";

print "average thrust : $thrust_ave N\n";

print "burn time : $burn_time s\n";

print "\nOUTPUT VALUES\n";

# Calculations

my $area = $radius ** 2 * pi; # cross sectional area of rocket m**2

#print "Area: $area m2\n";

my $k = 0.5 * $RHO * $CD * $area; # coeficient of friction

#print "k: $k\n";

my $mass_ave = ($mass1 + $mass2) / 2; # average mass during burn

my $q = sqrt(($thrust_ave - ($mass_ave * $G)) / $k); # interim variable

#print "q: $q\n";

my $x = 2 * $k * $q / $mass_ave; # interim variable

#print "x: $x\n";

my $vmax = $q * (1 - exp(-1 * $x * $burn_time)) /

(1 + exp(-1 * $x * $burn_time)); # maximum velocity at end of burn

print "max. velocity : $vmax m/s = ", $vmax * 3.6 , " km/h\n";

my $peak_accel = $thrust_peak / $mass1;

print "peak acceleration : $peak_accel m/s2 = ",

$peak_accel / $G, " g's\n";

my $ave_accel = $thrust_ave / $mass_ave;

print "ave. acceleration : $ave_accel m/s2 = ",

$ave_accel / $G, " g's\n";

my $y1 = (-1 * $mass_ave / (2 * $k)) *

log(($thrust_ave - ($mass_ave * $G) - ($k * ($vmax ** 2))) /

($thrust_ave - ($mass_ave * $G))); # altitude gain during burn

print "post burn alt. : $y1 m\n";

my $y2 = ($mass2 / (2 * $k)) *

log((($mass2 * $G) + ($k * ($vmax ** 2))) /

($mass2 * $G)); # altitude gain during coast

print "coast gain : $y2 m\n";

my $y = $y1 + $y2; # maximum altitude

print "max. altitude : $y m\n";

my $qa = sqrt(($mass2 * $G) / $k); # interim variable

#print "qa : $qa\n";

my $qb = sqrt(($G * $k) / $mass2); # interim variable

#print "qb : $qb\n";

my $ctime = (atan($vmax / $qa)) / $qb; # ideal coast time

print "ideal coast delay : $ctime s\n";

## No comments:

Post a Comment