We have entered the UK Aerospace Youth Rocketry Challenge.
In this challenge the aim is to launch a rocket carrying 2 eggs of mass ~65g to as close as possible to 800 feet and have the rocket land under a parachute within 41-43 seconds after lift-off.
There are also several other design criteria that must be obeyed. See link below for more information:
Many teams achieve this objective by trial-and-error adjustment of the mass of the rocket and trimming the parachute to allow their rocket to land in the time window, with the built-in explosive charge on the end of a motor pushing out the parachute after a delay fuse has burnt.
The issue with this sort of design strategy is that:
- Conditions are never constant, leaving your rocket’s performance at the mercy of chance. One ill-timed gust of wind could mean the end of your chances at winning.
- Motor performance is not reliable enough. Fine tuning of motor performance is neither in demand, nor is it cheap for the manufacturer to do. Therefore, the total impulse (power) a motor gives is not constant, adding further randomness.
- Motor delay fuses are also not reliable. Similar to the point made above, the duration of the delay fuse is not consistent, adding variance in the moment at which the parachute is deployed, and thus the time / altitude attained.
- Motors are expensive, and as part of the trial-and-error philosophy, you will need many trials to reduce the error – high cost. Many schools fix this issue by throwing money at it; some teams have up to £1000 budget. We do not have that.
- Altitude and flight time are linked, so an inconsistency in altitude will cause an inconsistency in flight time, reducing your chances of winning even further still.
http://www.nar.org/SandT/pdf/Estes/C6.pdf – shows that the standard deviation of the total thrust is 2%. I.e. 3 out of 5 launches will miss by a minimum of 16ft, ignoring any other inconsistencies.
Note: For each second away from the target time range, you get 4 points. For each foot off the target altitude, you get 1 point. Lowest points wins.
We are using an Arduino Nano to control an altimeter, an SD card reader/writer, a servo controlling a valve, a buzzer, and a radio.
The design uses a pressured gas deployment system:
We 3D print a gas sphere (able to withstand up to 50 psi), attach a bicycle tyre valve to one end, and a hose leading to the valve at the other end. The valve leads to a syringe which acts as a pneumatic piston, rapidly pushing out the parachute in a fraction of a second.
Previously, we simply had an altimeter, SD card, and servo. We quickly realised that this was too minimal, upon discovering that assembling the rocket on the pad would cause a slight air pressure spike within the rocket, which the altimeter would take as a reason to deploy the parachute. We quickly added a 2 minute delay before the altimeter would activate, so as to give us time to assemble the rocket. The altimeter was incredibly inaccurate also, providing data at a refresh rate of 2Hz with an accuracy of +-1 meter. When the rocket inevitably landed in tall grass (we were testing in a scarcely mowed field), we spent upwards of 1 hour searching for the rocket. The wires also had a tendency to break off the circuits they were soldered to. We also had no way of knowing the altimeter was actually active, adding to the issue that the altimeter measured the ground altitude inaccurately, thus causing the altitude measurements relative to ground to be inaccurate.
We have now remedied these issues by: adding a radio chip (so that the altimeter can be activated remotely), adding buzzer (so that we can confirm the rocket is working, and can easily find it in a field), switching to a different altimeter (one that is more accurate and provides a faster refresh rate), using more complex noise removal code (kalman filtering to reduce inaccuracy of altitude data), and a myriad of other changes that all allow a more streamlined and effective system.
Upon power-up, the rocket uses kalman filtering to attain a perfect ground altitude measurement until a radio signal is received that indicates a launch will soon occur.
When this radio signal arrives, the rocket begins writing data to the SD card, buzzes a specific noise to indicate an arming signal was received, and begins checking whether it should deploy.
As opposed to the previous version of the code, we no longer have launch detection as part of the program. The launch detection was notably useless and often false-fired, so we have removed it.
Upon launch, the rocket keeps collecting data about its trajectory and storing that data in the SD card. When the rocket goes above 50m it begins to test for a variety of parachute deployment triggers.
The system has 3 deployment triggers, all of which will be checked only if the rocket has gone above 50m and is not going more than 80 miles per hour.
- The code takes the flight data collected, models the flight as a parabola, and solves a quadratic equation to find the time at which the rocket will reach the specified target altitude. If the rocket will reach the target altitude within the next 500 milliseconds, it will deploy the parachute.
- The code checks if the target altitude has been surpassed, and deploys the chute if that is the case.
- The code checks if the rocket is descending, and deploys the chute if that is the case.
Upon the altitude going below 10m, the rocket will begin buzzing a noise to assist in finding where it landed. The SD card will stop logging data, and all functions other than buzzing and radio will stop working. Should the rocket land on top of a roof, as happened last time (due to a number of issues that have now been resolved), a radio signal can be sent to turn off the buzzer.