← Back to Projects

WIP: High Altitude Ballooning

A project I'm building with my dad to launch a high altitude balloon to the stratosphere. Our own mini space program.

WIP: High Altitude Ballooning — hero image placeholder

High Altitude Ballooning is a project I'm working on with my dad. The goal is to design, build, and launch a balloon payload to the stratosphere, reaching somewhere between 40 and 50km altitude, with onboard telemetry, GPS tracking, and a camera which may be able to capture the curvature of the earth. I'm handling all the technical and build side of things. He's working on everything else that makes a launch possible, which means finding sponsors and dealing with the Civil Aviation Authority (CAA) to get the necessary permissions.

Where It Started

The idea had been floating around for many years before we decided to actually commit to it at the start of 2026. The first thing I did was try to work out what was actually involved, of course having no prior knowledge of how to reach the edge of space. The name Dave Akerman came up almost immediately, he has a long-running blog covering high altitude ballooning in the UK in a high level of detail. Also the UK High Altitude Society wiki is another resource that provded to be very useful in giving me a good base of knowledge. The problem I ran into quickly is that most of this material is quite old, I didn't find an in-depth guide that was less than 10 years old. Guides have broken links. Information about the legal and planning requirements references older guidance that may or may not still be current. It became clear early on that I was going to have to piece things together rather than follow a clean, modern walkthrough.

The Hardware

I picked up most of the components from The Pi Hut. The flight computer is an Arduino Nano 33 BLE Rev2, a 3.3V microcontroller that sits at the centre of the payload. For atmospheric data I went with an Adafruit BME280, which reads temperature, humidity and pressure over I2C. GPS comes from a uBLOX MAX-M10S, communicating over UART at 9600 baud. The radio choice was where the research got frustrating. Nearly every guide I found described RTTY, a protocol that's largely obsolete and not something most hobbyists have the hardware for anymore. After some digging I settled on LoRa transceivers, which are widely used in IoT applications, but good guidance specific to high altitude ballooning was hard to find. A lot of it came down to working through the module datasheet and general LoRa documentation.

Circuit diagram

January 2026

The first batch of components arrived and the building started. I hadn't soldered in roughly 15 years, so getting the first components onto the board was a bit of a relearning exercise. The muscle memory came back eventually, but not instantly.

On the software side, C++ was relatively new territory. I'm a software engineer by trade but have spent most of my career in higher-level languages, so the lower-level aspects took some getting used to. Things like how Arduino's execution model works, and how communication protocols like UART, I2C and SPI work in practice. I made a point of writing everything from scratch rather than lifting from library examples, partly to actually learn it and partly because I wanted to understand exactly what the payload is doing at every step. I made good use of AI coding assistants to ask questions about C++ concepts and conventions, but not to generate the code itself.

The first code I wrote handled the BME280 sensor, configuring it for high altitude conditions and setting up periodic readouts of pressure, temperature and humidity. Alongside this I came up with the Status LED system. Rather than relying on a serial monitor to debug the payload in the field, I mapped possible error states to colours and blink patterns on a single LED. Solid green means everything is running normally. Various red, orange and yellow patterns indicate specific failures, whether sensors are initialising correctly, whether there's a GPS fix, and so on. It means you can read the state of the payload at a glance without needing a laptop connected.

March 2026

In March I ordered the LoRa radio transceivers and picked up more circuit components. With those in hand, I turned to the GPS module and wrote code to read fix status, altitude, ground track, ground speed and connection state from the MAX-M10S over UART. I refactored the GPS data into a struct at this point, which cleaned up the main loop considerably. I also implemented a time-based task scheduler. Rather than running everything on every cycle, different tasks fire at defined intervals. It makes the firmware much easier to extend as more components get added.

This blog (and project of course) is a work in progress, I'll update it as I make progress. We are aiming for a late summer launch this year all being well!

Tags
Arduino
C++
LoRa
GPS
Telemetry