High Altitude Weather Balloon

About The Project

"Watchful Eagle" began as a high school project between me and a couple other students to see whether we could deploy and recover a payload of sensors and video cameras attached to a weather balloon. Funding for this project was sourced through the generous contributions of our 45 backers on Kickstarter, who ultimately allowed us to raise $970 towards funding the supplies that went into making this whole thing possible.

We had a couple goals in mind when we entered this project:

All-in-all, fundraising began at the end of 2015, development took place between 2015 and 2016, and the final balloon made its ascent during the summer of 2017 after an available launch window was chosen.

Fundraising goals listed on our Kickstarter campaign

Design And Components

The following materials went into making this project possible:

Telemetry Electronics

We developed a custom electronic board and supporting software to record telemetry for this project. The board ended up being a simple collection of sensors mounted to a breakout board, which interfaced with a Raspberry Pi computer via an I2C bus (barometers + accelerometer + compass) and serial connection (GPS).

Partial collection of parts, mostly sourced from SparkFun and Adafruit

The assembled computer and sensors module were installed in a styrofoam box, along with the video transmitter and battery bank. Due to the very cold conditions outside, it was critical that this box was insulated. The heat generated by the transmitter and Raspberry Pi served as a crude way of keeping these internals warm — particularly the battery bank, which drops in capacity at lower temperatures.

Electronics installed in the payload box

Around the outside of the final payload box, we installed two knockoff GoPros to capture both video and timelapse of the balloon's flight. Both of these cameras were charged by a separate power bank installed on top of the telemetry box, and mounted on a 45 degree angle to capture a good shot of the earth below.

Live Video + Telemetry System

Video and telemetry was transmitted from the weather balloon over a 1.5W analog video transmitter, operating at 910Mhz. The Raspberry Pi's display output was used as a video source, and an application was run on the Raspberry Pi which displayed telemetry data and one of our Ham radio call signs alongside the video feed from the Raspberry Pi camera module.

Antenna attached to the payload

We ended up developing three custom directional antennas to relay back video streamed from the balloon. Two of the antennas were mounted on top of chase cars, and one was attached to the bottom of the balloon. We ended up reaching out to a local group of Ham radio enthusiasts, who helped us tune these antennas to the frequency used to transmit the analog video stream.

A receiver antenna mounted on top of a chase car

In both cars, a RCA-to-USB conversion device was used to process the video received and forward it to Open Broadcaster Software Studio, which published the stream on Youtube for our donors to watch.

Software

Software for the telemetry and video system were primarily written in C++, with a simple web interface for displaying telemetry alongside the video feed. Sensor data was fetched at a rate of 200Hz, and both stored on the SD card and displayed on the web interface for relaying back to the ground receiver. Since I was most familiar with FIRST Robotics programming at the time, I opted to use many of the developer tools used by my school's robotics team in this project.

Code used for this project is publicly available here

Sensor Receiver

Data from the accelerometer, compass, barometer, and temperature sensors was fetched in a simple loop that polled for new values over the I2C bus. This data was then written to a shared message queue, which allowed other processes to access this data without much overhead. Since the GPS messages arrived at a much slower rate over a separate serial interface, another process handled fetching the current location and writing this location to another shared message queue.

Logger

Data from the accelerometer, compass, barometer, and temperature sensors was fetched in a simple loop that polled for new values over the I2C bus. This data was then written to a shared message queue, which allowed other processes to access this data without much overhead. Since the GPS messages arrived at a much slower rate over a separate serial interface, another process handled fetching the current location and writing this location to another shared message queue.

Web Interface

Sensor data was also consumed by an HTTP server, which serialized the information in a custom format and sent it to a HTML frontend. A Javascript routine handled polling this data and translating it into an HTML table, where it could be viewed alongside the video stream sourced from the Raspberry Pi camera module.

Demo of the web interface streamed over the radio

Launch Day

September 4th, 2017 was chosen as our launch day based off weather forecasts at the time and approximate flight paths generated by an online weather balloon prediction tool. Ultimately, there was a large delay between the start of the project and launch day due to group members graduating and moving away for college.

We ended up launching far away from our hometown of Mountain View, California to mitigate the chances of running into airspace used by the airports in the area — namely, SFO, SJC, and Moffett Field. We instead drove to a small town in Fresno County called Kerman, which was about 150 miles away from our hometown. This area seemed best fit since it was well clear of any active airspace, and was surrounded entirely by rural farms where our balloon could safely land. Additionally, the highway system ran parallel with the expected flight path of the balloon, which gave us a better chance of receiving the video transmission.

Our launch site at Lion's Park in Kerman, California (from Google Maps)

Setup at the field involved performing a list of pre-flight checks to verify that everything was up and running. We turned on all cameras, telemetry sensors, and transmitters in the payload to verify that everything was communicating as-needed. Since the battery was quite large, we were able to leave this whole system running for about an hour before actually launching the balloon to allow time for any issues to be addressed.

Turning on all system components in the payload

Next, we began filling up the balloon. To prevent oils from our hands getting on the balloon (which would lead to a weaker balloon, and consequently lower burst altitude), everyone around the balloon wore gloves during this process. Additionally, we brought along a tarp to prevent the balloon from touching the grass (which would also weaken the latex and cause the balloon to pop sooner as it expanded).

Filling up the balloon and sealing up the payload container

Finally, after double-checking all knots and odd ends, we were ready to release the balloon. Filling it up completely used up almost the whole tank of helium that our supplier had provided.

Ready for launch!

We then set off in our two chase cars to attempt to retrieve a live feed from the balloon. Although this didn't quite as planned (the live feed cut out quite frequently as winds caused the transmitting directional antenna on the balloon to sway), we did end up recovering some nice pictures from the camera SD cards after recovery.

30ft altitude, right after launch


100ft altitude


2500ft altitude


10000ft altitude


35000ft altitude


70000ft altitude


79767ft altitude, where the balloon pops soon after

Due to the poor video connection, we were unable to read the location telemetry data from the video live feed. Instead, the SPOT tracker provided a location of the payload after it safely landed, about 32 miles from our original launch location.

Recovered payload

Recovered Data

Telemetry Sensor Results

Both the GPS altitude and barometer altitude estimate are shown above. The barometer measurement begins to deviate above 6km due to a combination of thinner air, low temperatures, and possible mis-calibration of the system for estimating high altitudes. Additionally, the GPS appears to drop out at the peak due to a loss of satellite signal during the period of increased vibrations following the balloon pop.

Ascent velocity is constant as the balloon provides roughly static lift to the system. However, descent velocity decreases over time since air density increases at lower altitudes and the parachute provides more of an upward force to counteract gravity.

Two barometers were used since we were unsure whether the bmp180 would perform well at higher altitudes, or whether the MS5803 offered accurate estimates at low altitudes. However, both sensors ended up working fine and provided similar results.

Accelerometer is as-expected: The balloon starts off with a lot of vibrations as the payload ascends through turbulant winds close to the ground. As the balloon climbs, the vibrations increase and decrease depending on the winds that the balloon travels through. Above 60000 feet, low atmospheric pressure results in low vibrations due to wind, and vibrations only return after the payload enters free-fall after the balloon pops.

Internal temperature of the payload starts off quite high due to heat from electronics (mainly the Raspberry Pi + battery), and decreases as heat radiates out of the payload into the colder air at higher altitudes. The temperature then later increases after the balloon reaches lower altitudes with a higher external temperature.

Finally, here are some raw plots from the GPS for the path, course, and speed of the balloon throughout the flight. The flight path is largely dictated by horizontal wind strengths/directions at different atmospheric altitudes.

Captured Video and Timelapse

Full Video

Timelapse

Photos were taken at 3 second intervals, and stitched together into a video.

Lessons learned

The launch was generally a success, but there were a few factors that led to an extended delay of the project and issues at launch day:

We also had several successes during this project:

A certain amount of luck was also a factor in our successful recovery of the balloon. Weather prediction tools and redundancy in our payload's telemetry and video capture system were critical in minimizing any risk of losing the balloon or failing to retrieve sensor data from the flight. Overall, this was a great opportunity to learn about aerospace and embedded systems, and I'd highly recommend it to anyone who's interested in a DIY project to explore these fields. Feel free to reach out if you have any questions/comments about our launch experience!