High Altitude Balloon

Balloon in flight

One of the many projects I worked on with the Princeton Rocketry Club was a high altitude balloon launch. I helped design and build the avionics and telemetry gathering systems for this balloon. The ultimate goal would be to carry an experiment for measuring high-altitude microbe counts by taking air samples. For this launch, only the basic tracking avionics and meterological sensors were included to validate the basic system.

Source code, board designs, and flight telemetry is available on Github


Paylod Exterior

The payload's mechanical design was conducted by the other members of the team. The avionics were contained within a large 1.5 foot styrofoam box. This box is oversized to eventually accomodate the biological experiment. A Hwoyee 1600g balloon was used.



The primary microcontroller used is a Teensy 3.5. The Teensy is a Arduino-compatible ARM based development board. Software was be based on the Trackuino project with modifications for Teensy DAC support from this project.

The Teensy communicated with a BMP180 Temperature/Pressure sensor via I2C and a Ublox MAX-M8 GPS module over UART serial. In addition, a 10KΩ thermistor provided temperature measurements from outside the enclosure. All sensors were polled every two seconds and readings recorded on a microSD card in CSV format.

Power was provided by a 4400mAh LiPo battery through a 5V boost converter. The battery was oversized to provide extra power in case the biology experiement ended up requiring it. Our calculations indicated that this would give a maximum flight time of over nine hours with our minimal payload, well in excess of what is required.

PCB Design

A custom PCB was designed in KiCAD to hold everything together. The board was milled on an Othermill PCB mill from single-sided copper clad board.



Telemetry was transmitted via APRS on the 2 meter amateur radio band using the HX1 2m Transmitter. This module has an output power of about 300mW tuned to a frequency of 144.390 MHz. The antenna was a simple dipole built out of piano wire soldered to a piece of copper-clad board. A through-hole SMA connector was then soldered onto the board and the whole thing encased in hot glue. After tuning, the antenna achieved a SWR of 1.2 at 144.390 MHz.

SWR Measurement

The Teensy was intended to trigger a transmission every minute below 100 meters of altitude with path of WIDE1-1,WIDE2-2 and switch to transmitting every two minutes above 100 meters of altitude with path of WIDE1-1. However, it appears the firmware revision that launched did not have this switchover enabled, so the balloon stuck to the low-altitude transmission settings.

APRS Message Format

The message format was based on the "Lat/Long Position Report Format — with Data Extension and Timestamp" format in the APRS spec. The symbol used was /O (Primary symbol table, symbol ID 'O' corresponding to balloon).

The raw message string: [Data Type ID flag:/]HHMMSSh[Latitude ddmm.hh[N/S](8b)][SymtableID (1b)][Longitude dddmm.hh[W/E](9b)][Symbol Code (1b)][Course/Speed (7b)][Arb. data (36b)]

Comment format

The comment or arbitrary data section at the end of the message was used to record sensor readings.

5Timestamp (sec)12000
5BMP180 Temperature (C)-60.0
6BMP180 Pressure (Pa)101580
4Thermistor ADC Value, max 10231017


Track Prediction
HabHub track prediction

We performed pre-launch track predictions using the HabHub online prediction tool. The payload weight including a weight to simulate the biology experiment was 2.02kg.

Helium Prediction
Helium fill calculations

A few issues were encountered at launch, which were root caused to the microSD card not being fully inserted.

Helium Prediction
Field debugging

Once the balloon cleared the treetops, its APRS packets were quickly picked up by the APRS network. Overall tracking was suprisingly good throughout the entire flight.

APRS tracking map
Tracking map

Altitude profile

The ascent rate and initial path followed predictions nicely. Unfortunately, it appears our balloon was much tougher than anticipated and drifted quite a bit higher than the predicted burst height. After burst, it appears the balloon free-fell for a while, causing a Teensy reboot for some reason. The last few packets record the balloon descending at a steady 7 m/s under the parachute into the waters just off Long Island. Overall, this was a fun project and great learning experience. The APRS tracking and avionics performed well throughout the flight. We now have a much better idea of the balloon launch process and some of the quirks involved. Hopefully next launch will conclude with a more successful recovery.