inside the man

Tuesday, March 29, 2005

Egg rocket technical analysis

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

Blog Archive

About Me

My photo
Edmonton, Alberta, Canada
Returned to working as a Management Consultant, specializing in risk, security, and regulatory compliance, with Fujitsu Canada after running the IT shop in the largest library in the South Pacific.

CC Developing Nations
This work is licensed under a Creative Commons Developing Nations license.

Site Meter