**Rockets** There are lots of programs, including many commercial programs, that will predict the maximum altitude of a model rocket. There are some inexpensive altimeters out there also that can give altitude results when placed inside your model during flight. Are they trustworthy? I wasn't sure so I had an idea to see if I could come up with a LB program that would predict accurately (within 5%) the height of a model rocket. Of course this program is more involved than the others presented on this page so I needed some help. I got a great deal of help from Mr. John Fisher who lives in Merry Old England. I had the ideas of what I wanted to do and he developed the code that would get me there. I give all credit to him. I knew published data was available for model rocket thrust curves. I was not sure how accurate this data was as I was concerned that companies that make the motors might tend to exaggerate the numbers. I began a series of tests using an analog to digital interface and a force probe to measure force and time data and integrated these curves to obtain impulse data for various rocket motors. I have to say that the published data is very close to my measurements. The first bit of code presented here represents a simple algorithm that will predict rocket altitude when average impulse is used from publishedflight simulation for an Estes A-8 rocket motor data.pushing a 37 gram rocket. This includes a parachute deployment and subsequent terminal velocity to ground. [[code format="lb"]] 'EstesA8.bas 'This program uses the thrust data to draw a position/time, velocity/time, and acceleration/time 'graph for a rocket of mass 37 grams and an A-8 Estes engine. nomainwin UpperLeftX = 10 UpperLeftY = 10 WindowWidth = 1100 WindowHeight = 700 graphicbox #w.g, 10, 10, 1010, 610 textbox #w.t, 10, 620, 610, 30 open "Rocket vertical flight simulation" for window as #w #w, "trapclose [quit]" #w.g, "size 2 ; goto 5 505 ; down ; goto 950 505" RocketBodyMass = 0.030 ' fixed mass of rocket body RocketFuelMass = 0.0033 ' 3.3 gram of fuel EngineCasingMass = 0.0164 ' 17gram casing & nozzle. burntime = .7 ' burn lasts for this time burnrate = RocketFuelMass / burntime ' assume linear reaction rate Area = 0.0004 ' cross sectional area of rocket Gravity = 9.81 ' acceleration of gravity AirDensity = 1.2 ' density of air DragCoefficient = 0.75 ' allows for the streamlined shape y = 0 ' initial vertical height vy = 0 ' initial vertical displacement time = 0 ' initial time deltat = 0.001 ' time interval between updates acceleration = 0 hasTakenOff = 0 global RocketBodyMass, RocketFuelMass, EngineCasingMass, burntime, burnrate global Area, Gravity, DragCoefficient, y, vy, time, deltat , Gravity, AirDensity [here] force =thrust( time) - Gravity * mass( time) - drag( time) if hasTakenOff <>0 then acceleration =force / mass( time) else acceleration =0 if thrust( time) >( mass( time) *Gravity) then hasTakenOff =1 vy = vy + acceleration *deltat #w.g, "color green ; set "; 5 +600 *time /10; " "; 505 -500 *vy /250 y = y + vy *deltat time = time + deltat #w.t, " Time = "; using( "##.###", time); " force = "; using( "##.###", force);_ " acceleration = "; using( "#####.##", acceleration); " velocity = "; using( "###.##", vy);_ " and height = "; using("#######.##", y) #w.g, "color black ; set "; 5 +600 *time /10; " "; 505 -500 *y /120 scan if y <500 and y >-.1 then goto [here] wait ' _____________________________________________________________________ function thrust( tt) th =0 if tt <=.7 then th = -0.0229 *tt +2.362 if tt <=0.395 then th = -10.9 *tt +6.662 if tt <=0.27 then th = -151.3 *tt +44.54 if tt <=0.225 then th = 53.49 *tt -2.049 if tt <0.035 then th = 0.0 ' if tt <=1.6 then th =3 'if tt <=0.3 then th=10 -80 *( tt -0.2) ' if tt <=0.2 then th =50 *tt #w.g, "color red ; set "; 5 +600 *time /10; " "; 505 -500 *th /50 thrust =th end function ' _____________________________________________________________________ function mass( tt) select case tt case tt <=1.6 ' it burns 0.0035kg in 0.7s. m =RocketBodyMass +EngineCasingMass + RocketFuelMass - tt *burnrate case else m =RocketBodyMass +EngineCasingMass end select mass =m end function '____________________________________________________________________________ function drag( tt) if vy >0 then drag =0.5 *AirDensity*vy^2 *DragCoefficient *Area else drag = -0.5 *AirDensity *vy^2 *DragCoefficient *Area if tt >6 then drag =-0.5 *AirDensity *vy^2 *DragCoefficient *0.05 end function [quit] close #w end [[code]]