Avionics for the Tragedy Thruster rocket
![]()
Me and my team of 3 other colleagues competed in the 2024 Czech Rocket challenge as a university semestral project. My task was to design, build and program the electronics section of the rocket. This includes the avionics and the ground station. The goal of this competition is to reach the highest apogee with the provided rocket motor. The requirements were set by the organizers and by ourselves.
Competition requirements related to avionics:
- Recovery system:
- The rocket must have a recovery system.
- The rocket must descend at a rate of 5 to 9 m/s
- The parachute or streamers (if used) must deploy when the rocket is moving less than 15 m/s
- Ejection charge (if used):
- The rocket must include a remove before flight pin (RBFP), which physically disconnects the ejection charge.
- Removal of the RBFP must be signalized with sound and light.
- Special challenge (ground station):
- The rocket must send telemetry to a ground station.
- The rocket should use LoRa SX1278 for communication.
- Other requirements:
- The rocket must handle up to 30 minutes of delay on the launch pad.
Preliminary design
The avionics section of this rocket is above the motor and under the parachute. Running through the middle is an aluminum tube acting as the structural member connecting the motor and the parachute mounting point. The battery is in the nose cone of the rocket. The cable going down to the avionics acts also as a tether connecting the nose cone to the rest of the rocket. The parachute is deployed using an ejection charge.

Mechanical design
The inside of the avionics section has a shape of a triangular prism. This leaves 3 surfaces on which the electrical components can be mounted. The edges of the prism have slots for led strips. Under the strips are holes for cables to pass through. The bottom is mounted to the motor section with 4 radial M3 screws. The top is mounted to the parachute section with 4 axial M3 Screws. The whole section covers a translucent cover mounted with 4 M3 screws.

The cable coming from the nose cone is secured using a clamp and 3 M2.5 screws.

Electrical design
I decided to build this project using modules to make it easier. The first MCU used was an Arduino, but I soon ran out of storage and ram, so I switched to an ESP32-wroom. First I built the whole project on a breadboard and afterward mounted it in the avionics bay and soldered it together.

The final avionics bay looks like this:

Sensors
The most important sensor is the barometer, because the apogee is determined mainly by the change in pressure. This rocket uses the BMP388 barometer, which should be accurate enough for this task. BMP388 also measures temperature, but that isn't used for any computation. Onboard is also an MPU6050 IMU, which measures acceleration and angular rate. The battery voltage is measured using a voltage divider and the ESP32s integrated ADC.
Power management
The rocket is powered by a single 18650 li-ion battery. This is rather heavy battery for a rocket this size, and that is why it is place in the top of the nose cone. This way the high weight isn't a disadvantage, but it rather helps the stability by moving the center of pressure higher. The battery power is sent down the rocket using a modified braided USB cable, which should handle the shock during the parachute deployment. The cable is secured with a clamp and screw in terminal. Then it goes through a power switch to a 5V step-up. The 5V rail powers the ESP32, which drops the voltage to 3.3V via the integrated LDO.
Ejection charge
The ejection charge is connected with a screw in terminal. It gets turned on by a mosfet module. The RBFP is placed in between the mosfet module and the battery. It is a simple two position momentary switch in a housing. The battery is connected to an ESP32 GPIO when the pin is inserted. Removing the pin connects the battery to the mosfet and disconnects it from the GPIO.
Human interface
The only input is a simple button, which can be pressed with the cover on. Audio signalization is handled by an active buzzer. Visual signalization is done by Neopixel LED strips. These create nice looking visuals together with the translucent cover. The buzzer and strips use 5V logic, so a level shifter is used.
![]()
Other components
Micro SD card module is used for flight data logging. LoRa module transmits the telemetry to the ground station. The liftoff cable guarantees correct liftoff detection. It is a jumper wire, which is tied to the ground. When the rocket lifts off, the jumper cable disconnects and send a signal to the ESP32.
Programming
This was my first Arduino/ESP32 programming project. I used ArduinoIDE to program it. Most of the code is just basic use of the libraries for the individual modules. The most interesting part is the parachute opening logic. It is handled by 2 separate programs.
The first one uses data from the barometer to determine the liftoff and the apogee. The liftoff is detected when the current pressure is lower than the pressure the ground by a certain number. The apogee is assumed to be when the pressure stops decreasing.
The second one doesn't use the barometer, but rather the liftoff cable to get the exact liftoff time and a simple timer. The time to apogee is approximated from the OpenRocket simulation. The time is set higher than in the simulation to give the first program chance to guess the exact apogee. The pressure is filtered by the oversampling feature included with the library and another moving average algorithm.
These 2 programs don't share used components, which should prevent failure when some of them fail. For example when the barometer stops working.
The launch
Everything went well on the launch tower before the flight. The launch itself was a failure. The rocket tore apart only couple of seconds after the launch. The nose cone was never found. There were no logs as the file got corrupted.

Investigation
There isn't much evidence to determine what happened. One piece of evidence is a video, where the rocket is too far away and hard to see. The other evidence is the debris recovered after the crash. The debris reveals that the ejection charge was fired, and the parachute plunger has soot on it. This likely means that the parachute opened too early and the aerodynamic forces tore the rocket apart. This mostly points to a premature ejection charge fire likely resulting from the program not behaving as intended. The apogee detection is likely too simple and prone to mistakes. It would be better to make a more complex apogee detection program utilizing multiple sensors and more robust logic.