davelog Wherein, I write.

High Altitude Weather Balloon Project

So concludes launch one!

What follows is a full write up of the entire project from day one. It’s a lot to read, but I think it’s good to document it for personal reasons if nothing else. Feel free to skip around to the end to get to the juicy bits, or just check out the cool photos and video.

My History

I’ve seen a number of high altitude weather balloon projects over the years, and I always thought that they were phenomenally interesting. The idea that a mere mortal can put together a payload and send it to the far reaches of the atmosphere just sounded wild and amazing. Years ago, a handful of incredibly smart people started calling it a hobby and learned the ins and outs of putting together these projects. They would make a box only to let it go and have it ascend to twenty miles or more before plummeting back to the earth. It all seemed to surreal and oddly enticing.

Then, a little over a year ago some high school kids in Spain launched a high altitude weather balloon into near space and took some amazing photos. I was truly inspired by their feat – both because of the technical details of such an endeavor as well as their extraordinarily young age. I told myself that if they could do a project like that, then I certainly could.

I started immediately with back of the napkin notes. I had lunch with my good friend who also happens to be named David (cyan2004) once or twice a week to talk over and document on Woodstock’s Pizza napkins various parts of the project, from wireless solutions to parachutes to the extreme conditions that a payload would face at altitude. After a while, I started in on buying some of the parts needed. First came the souped up flight computer – back then we were planning on using the highly-overqualified Gumstix Overo Earth platform – and some of the temperature sensors. Then came lots of research into other various parts. We bought a couple balloons from one of the suppliers that the National Weather Service uses as well as a 4-foot parachute designed for high altitude rockets from a guy who sews them in his garage. I studied for and got my ham radio license (call sign KI6YMZ) to be able to legally transmit high powered radio signals from altitude. Aside from having to figure out the cryptic computer (which runs a full Linux stack), things were going very well and a launch seemed imminent.

Shallow DoF Gumstix Balloons

Then, as tends to happen, some other Big Idea came into play and the balloon project was put on the back burner. David wound up moving 170 miles away and I lost a lot of ambition for the project, so it sat under my desk for a while.

Fast forward 12 months. By some twist of fate I moved 1200 miles to work for one of the very companies that supplied the original parts for the balloon when it was in the early stages. I took the box with all the parts for the project along when I moved, and it sat under the same desk in my new home for a while longer.

About a month and a half ago as I write this I decided to finish what I started. I had learned a lot about ham radio by talking to other hams on local repeaters, and gained a better idea of how the radio system should work. I started lurking in the #highaltitude IRC channel on Freenode again, where a bunch of UK-based ballooners hang out and talk about their projects. Aside from being incredibly inspiring, they all are extremely smart and some have been launching projects of various types for ten years or more. Every question I throw at them is answered as in-depth as I can understand, and even then a lot continues to go over my head. It continues to be a great resource as I continue in my journey of high altitude projects.

Choosing the Gear – a.k.a. My Justifications

When I picked up the project again, I immediately scrapped the idea of having a gumstix as the flight computer. It was about 10,000 times more computing power than is needed to parse GPS data and send it over a radio, and more than that it’s a pain in the ass to work with sometimes. “Simple” things like getting the I2C bus to work involved tracing schematics, trudging through thousands of pages of datasheets and delving into years of mailing list archives. I decided on the Arduino platform because I was already familiar with it, it’s far easier to use, has a much smaller form factor and power requirements, and there’s a huge support community around it.

I already had the GPS unit purchased, so I stuck with that. It’s a Garmin GPS 18 LVC with bare wires on the end, chosen because it was confirmed to work at high altitudes. Some civilian GPS receivers stop reporting after 30,000 feet, and all GPS units are disabled at speeds greater than 500m/s for safety reasons. Next launch I’m planning to switch it out for a u-blox, after the Garmin malfunctioned during the first flight. More on that later. I threw in a USB weather board that my employer Sparkfun sells which added sensors for humidity, pressure, ambient light and various temperature sensors. In addition, I wired up the Dallas Semiconductor 1-wire temperature sensor on a 20cm pigtail to string outside the box to record the external temperature.

To record all the data I got another Sparkfun product, Nate’s very own OpenLog. With its form factor, it pops on the back of the Arduino Pro Mini and logs all data sent to it over the default serial line. With a 1GB microSD card, I could store years of data before filling it up. I sent it everything I had access to, including all the weather and telemetry data.

Garmin GPS 18 LVC Payload

I chose to use the non-rechargeable Energizer Lithium batteries to power everything due to their weight (about 2/3 of an equivalent alkaline) and great discharge curve at low temperatures. They can go to -40°C and function as if they are at room temperature.

The radio module was a no-brainer after talking to the guys in #highaltitude – the Radiometrix NTX2 – a 10 mW transmitter on the open 433 Mhz band. Despite its low output rating and miniscule 25 mA power consumption, with a proper antenna and sensitive enough receiver one can hear it from hundreds of kilometers away. There’s a significantly lower amount of free space path loss when you’re transmitting from well above the ground, after all! I borrowed the schematic for a voltage divider from James Coxon which is used to transmit RTTY data. It basically sends a carrier signal and pulls it up 425kHz to transmit a binary 1, and back down again for binary 0, and then follows the typical serial protocol of sending 7/8 bits and one stop bit.

After talking to another #highaltitude member, I settled on making a bazooka antenna out of a piece of coaxial cable to add to the payload. It’s got the benefit of being lightweight and very simple to put together. A trip to Radio Shack and a few minutes soldering and I had a working radio that I could send data over at 50 bits per second!


During my ham heyday, I purchased a Yaesu FT-817 radio which offers wide coverage and battery-powered operation for mobile use. For its size, it’s also got a pretty sensitive receiver. Paired with a directional 434Mhz yagi antenna, it’s the ideal tracking setup. I piped the output to a Y-splitter which went to a pair of circumaural headphones and to the input of the sound card in my Macbook Pro. The #highaltitude crew maintains a distribution of the cross-platform radio program fl-digi modified for these sorts of projects, and it performed flawlessly in decoding and logging the data.


Of course it wouldn’t be worth it to send the payload up and not take any pictures! I originally bought a point-and-shoot Nikon camera with a broken LCD screen on eBay for a few dollars to send up. I soldered wires in series with the power button and shutter so I could remotely control it with the Arduino by way of an optoislator. Instead, however, I used my much newer and nicer Canon point-and-shoot which is smaller, takes better photos, and has the added benefit of being able to use CHDK. CHDK is a firmware modification that a bunch of hardware hackers maintain that lets users extend the functionality of their Canon cameras. Features include the ability to take RAW photos, modify existing settings, as well as write scripts to control the camera internally. A particularly nice script is the Ultra Intervalometer, which you can specify to take a photo automatically at predetermined intervals. This was nice for a project like this because it’s entirely self-contained in the camera. If any of the code winds up breaking midway through the ascent, for instance, there’s no worry that the camera will stop taking photos. As you’ll see, the camera performed flawlessly.

In addition to the 12.1 megapixel still camera, I had a dream to record HD video. After searching far and wide for the best solution, I decided on the GoPro HD1. It’s designed to be small, lightweight, minimal, and most of all rugged. It’s used as a helmet cam for snowboarders, board cam for surfers, rollcage cam for racer, and everything in between. I even saw it on a recent episode of Mythbusters (the one with the duct tape). It takes breathtaking 1080p video and fits in the palm of your hand. The stock battery lasts about 2.5 hours, so of course I cracked it open and soldered new leads and added an external battery with about twice the capacity. Throw a 32GB SD card in, and you can record the highest definition video for 5 hours continuously.

Finally, I did wind up making a simple RADAR reflector based on a design I’d found online. I went to the local kite shop and got some carbon fiber tubing and right-angle connectors and lined sheets of aluminum foil at right angles to the cross sections. I have no idea if it works or not, but it was a best effort and only weighs three ounces!

Radar Reflector

Talking to the FAA

One big hurdle was making sure everything was legal. I found it nearly impossible to find anyone either at the FAA or at the local ATC who could direct me as to the legality of a high-altitude launch. I called every number I could find online, including the FAAs national 800 number. Despite getting transferred to a dozen different offices, I never got in touch with the Right Person.

In previous research, I stumbled across the website for the Edge of Space Sciences, a research group that has done 150+ launches. It never clicked before, but they are based out of Denver, CO – since my move a mere 40 miles away! I emailed the director of the project there and he immediately replied with contact for people at Denver International Airport who knew the balloon person at the regional FAA offices based outside Seattle, Washington. EOSS has had a running blanket waiver for their launches that lets them launch not only larger payloads, but in various weather conditions as well. As they’ve had the waiver for a number of years, nobody there could direct me to the exempt launches and how they work.

Despite having been in touch with the regional FAA office, I never got a definitive answer about the legality of the launch. The Federal Aviation Regulations that covers balloons and rockets is FAR-101, and the first section outlines what defines a “waiver exempt” launch. My project fit all the requirements, including payload size and density, line breaking force, and inclusion of a RADAR reflector. As far as I can interpret the regulations, the project is exempt from any of the FAR-101 regulations. In the future I hope to keep in touch with the FAA and the kind folks at the ATC at DIA and keep it safe. It would be fun and somewhat interesting to get into larger payloads with heavier experiments set up; I’ve got big plans for these already.

Launch Day

Operating under the assumption that the project is FAR-101 exempt and no notice need be given to launch, I went ahead with it. I was initially planning on launching on a Sunday, but I wound up chickening out and postponing until the following Wednesday, May 18th. I told my friend and partner-in-crime Brennen that we are taking the day off to launch a balloon and spend the day tracking it across the Colorado plains. He was surprisingly okay with it all, and wound up being an invaluable help throughout the whole thing.

We met a bit after 8:30 and double-checked that we had everything we needed including the payload, balloon, tarp, helium, and triple-checked that we had the duct tape and cable ties. Nothing would work without these last two things, believe me. We made one last launch prediction on CU’s amazing landing site predictor, just to make sure the winds hadn’t changed too drastically overnight. When we were satisfied, we scarfed coffee and pastries from the shop across the street and headed out into the great plains of Eastern Colorado. A few miles outside of our starting point in Boulder, it became painfully apparent that we were driving into a void. The towns became fewer and further between until we turned onto a county road and the towns turned into nothing more than a cluster of houses spaced miles apart.


I had an idea to launch from a park that I’d seen on Google Maps about 2.5 hours from Boulder. As we drove nearer to the location, however, it became apparent that no such park existed. In its stead was a single room cafe with a lone woman in charge behind the counter. We pulled in and casually asked if she minded us launching a weather balloon from the front lot. With just a single funny look and no questions, she told us that “well, we don’t usually have requests for that sort of thing, but you should talk to my husband”. She gave us directions to backtrack a quarter mile until we came to a steel siding shop, and ask for the owner. We drove down and found him, and he directed us to a large field adjacent to the property where he gave us free reign “as long as we close the gate when we’re done”. Again, surprisingly few questions were asked about what it was we were actually doing.

We picked a spot away from the power lines and parked and unloaded all the gear. A few boxes with the radio, computer, balloon, payload and all. The first thing that struck us was the abundance of cactus plants all around. Not the most delightful thing to think about when filling a balloon with $85 worth of lighter-than-air gas. Luckily we brought a tarp, which we laid down over the plants and set up on.

launch site IMG_4718.JPG

After plugging in the various parts of the payload, it was apparent that something had gone wrong. There was no signal coming through to the receiving radio, and the token blinking light on the Arduino was not blinking its “everything is okay” signal every 15 seconds as it was supposed to. I grabbed my laptop and frantically started debugging the issue. After the late night putting the final touches on everything I didn’t even know what revision of the code I was running anymore. With a quick flash to the most up to date code and a reset of the system, the mysterious bug vanished and everything began to work fine.

This all took a few minutes to set up, and it was another 30 minutes before we even started filling the balloon. By then, the white puffy clouds that were in the distance were gathering into a fairly sizable and frightening storm cloud. We pressed on.

Filling the balloon was a bit of a surprise. Neither of us had ever done anything of the sort, so we made it up as we went along. I had been to the hardware store a few times to figure out a way to get the regulator on the tank to fit the one inch cuff of the balloon, but beyond that I was clueless. We hooked everything together and let it fill. After a time, the balloon took shape. It didn’t seem as if the amount of lift was increasing, but we were patient. Completely clueless, we watched the PSI guage drop from its capacity of 2700 PSI down past 2000, 1500, 1000… we didn’t know when to stop. I remembered that the tank capacity was 110 cubic feet, and the capacity of the balloon was just a bit less. If we filled the balloon too much, it would expand and burst prematurely and not reach maximum altitude. Worst case is we fail to fill it to capacity, and the balloon fails to pop, stops rising and remains in stasis at high altitude with no means to cut it down until the sun’s UV rays deteriorate it.

We erred on the side of caution and filled the balloon until less than 400 PSI remained in the tank. It was quite stressful, watching as the air filled the balloon. Trying to think, is there even a conversion from PSI of a tank of a given size into volume of a gas? Does the element of the gas change the equation? What if it’s not pure helium and just a 95% mix? Will the pressure decrease linearly or will it fit a curve? At the end of it all, we just filled it until it felt right and there was enough lift to make us feel confident it would carry the payload.

filling IMG_4768.JPG

We tied the neck of the balloon off with a single zip tie at first, and ran a line through it and tied it off to the tank. A backup of sorts, in case it got out of our control. We added a few more zip ties, and tied the payload line from two points on the neck down 20 feet to the top of the parachute. From the parachute, we tied a line through the radar reflector and on to the payload, which we secured with cable ties zipped together to fit snugly around the entirety of the box. When all was said and done, it was very secure and the balloon felt like it had more than enough lift.

By this time, it had been more than an hour since we parked in the field. The storm cloud that was in the distance before was now rustling at the edge of our field with a major threat of rain. We looked at each other, then at the payload, and up at the balloon now floating above our heads. There was a moment of hesitation before we decided that we had come too far to scrap the launch now. I double checked for the last time that we were receiving valid telemetry data from the payload on the radio.

With the payload in hand and the balloon tugging at it toward the sky, I looked at Brennen and shrugged. There was nothing more to do, and everything had been triple-checked at least. I glanced at the mounting storm now upon us, shrugged that off as well and said, “Screw it, let’s fly”, counted to three and released the box.

launch + a few seconds

For a moment it was completely silent as we watched the payload rise those first few meters. I just watched. There was nothing more to do, and it became painfully real at that exact moment. Even if I wanted to make a last minute change, to update the code or restart the camera, it was too late. The only thing left to do was hope everything works.

For the first two minutes or so, we just waited and watched. Brennen clicked a few photos of the whole thing rising up into the sky with the storm looming in the background, and I just stood there and watched as it happened. For a brief second, we looked at each other and had the same question, “Now what?”. We knew the trip would take a couple hours at least, and we had no idea what to do. Should we follow it with the car? Where is the best place to track it from anyway? Should we stay a ways away from it for the best signal, or what?

Somehow from that we wound up in a rush to pack the car back up. We threw the tarp in a pile and threw the rest of the equipment in the boxes and threw the whole lot into the back of the car. We went back out through the fence and were sure to lock the gate on the way out. All of a sudden we were on the open road again, with no real place in mind to go. I had a 4-foot yagi antenna between my legs and was listening to the signal that the radio was picking up from it.

A few things were instantly apparent. One was that there was no cell reception in the area, making the primary following method – an iPhone running Google Maps – impossible, and second I noticed that the altitude data from the payload was not updating as expected. The latitude and longitude values were inching along as the payload drifted now hundreds of meters above our heads, but we had no idea exactly how high it was. By extension, we had no idea how fast it was rising, making any landing prediction calculations a bit hazy.

We drove around and around, finally deciding that the best thing to do would be to drive west until we found the first sign of cell service and download map data to the phone. We drove to the small town of Ault and picked up a quick lunch of a snickers bar and a bottle of water. Miraculously we found cell service there as well, however after much frustration we learned that the OpenStreetMap application I was banking on for map data can only download the map image data on a WiFi connection – and god only knew where the nearest broadband Internet connection was at that point.

IMG_4801.JPG lines

In a stroke of luck, I was carrying my “backup phone”, an Android-based G1. I searched for “GPS” and found a waypoint-finder application that supported decimal-based latitude and longitude input. The app was designed for geocachers looking for loot, however it would be perfect for locating a crash-landed payload – and didn’t rely on the nonexistent cell network to operate.

With a snickers bar in my belly and a bag of beef jerky in hand, we set out on the road again and started backtracking toward the still-airborne payload.

The way I was tracking everything was this. The payload has a GPS unit on board, and a computer to read and process the data for the relevant bits. The computer builds a sentence of data including position, altitude, temperature and a timestamp, which it then modulates into an analog signal it broadcasts over the upper sideband of an FM signal at ~433Mhz at an incredibly slow 50 bits per second. The ground radio receives this signal as audio in the form of alternating blips and bloops. Plug an audio cable into the radio and then into the input of a computer’s sound card, and it can be decoded into the original message and show up one character at a time a little over 6 characters per second. A full sentence of data is therefore decoded every 15 seconds or so. Because of the uncertainty of transmission, the entire sentence is run through a simple XOR checksum which is appended to the end of the message; on the ground it’s a simple check to make sure the data you’re reading off the air is indeed the same as the data that was sent from the payload.

We drove and tracked the payload for another hour or so, when my trusty laptop’s battery started towards empty. I was prepared, however, and brought out a power inverter that let me plug the laptop into the power plug in the car. After fiddling with the various buttons and trying to figure out what the status LEDs on the unit were, it was clear that the inverter was dead. The smell of burning electronics was probably the biggest clue, but it left us with no power for the quickly-dying tracking computer. The situation was desperate, as we needed to keep tracking the payload as long as we could – we still had no way to verify if the payload was on it’s way down or not so we needed to get a reading from the lowest possible altitude before impact.

We stopped at a self-serve gas station that only pumped 85-octane gasoline and hunted for a power outlet to no avail. We even stopped back at the cafe, but they were already closed and only had a non-standard 220-volt outlet outside. We drove back to the tiny launch town of Briggsdale once again. We were planning on stopping at the local market, but wound up finding the Briggsdale Community Library which was open for another 25 minutes. We begged the librarian to let us borrow some power, and despite her quizzical looks she was happy to help. We found the only available outlet in the ceiling of the back reading room. We could stretch the power cord to reach the front room, run the cables to the radio which could just reach the door, and then run the antenna cable outside where we could aim the antenna. As Rube Golbergian as it seemed, it was effective and we started receiving data on the computer again!

Decoding Data Briggsdale Community Library

Unfortunately the library was indeed set to close, so we were only able to receive a few minutes before we were kicked out. With the battery partially charged and after taking one last position reading from the box, we packed up our mess of wires, made a donation to the box and were on our way in the direction of the last known position. After a few miles on the road again, I fired up the tracking system. Despite pulling over and aiming the antenna in the right direction, I couldn’t pick up the signal from the payload. Either something had gone horribly wrong, or the payload had landed!

Knowing that the box was sitting on the earth somewhere was frightening news. It was a relief to know that we had a final location at which to end or search, but the last reading we received had been nearly 30 minutes prior – it could have been a mile up or a hundred feet up when we heard from it. The whole thing could have drifted a huge amount in any direction and we’d never know! Our best bet was to drive to where it last reported and try to pick up the signal from the grounded payload. In theory, the payload can transmit a few hundred meters while on the ground; if we got close, we could figure out where it was using a directional antenna.

We were about 25 kilometers away from the location, and there were no main roads in the direction we needed to travel. We zig-zagged across the chessboard-like grid of county roads until we wound up on an unpaved track in the same latitude as our target. With the recent storm, the going was rough. At some points the two drive wheels skidded across the entire lane, at others the rear tires struggled to keep up sending the car fishtailing sideways in the inches of mud. It was a slow and tedious 25 klicks, but Brennen was a champion driver.


About a kilometer away from the site, I asked Brennen to pull over and attempted to pick up the signal. I got nothing, so we continued on.

We approached within a few meters from the coordinates where the payload had last transmitted from and retried. Again, nothing.

At this point, I felt lost. We knew where the payload was at some point during the descent, and were standing exactly at it. Except we were standing in the middle of an empty field, miles from the nearest paved road, with no brightly colored payload or burst balloon to be found. Not only that, but if we couldn’t pick up the signal again, we had nothing to even hint at the right direction to go to look for it.


I opened the computer and looked at the log of the last few lat/long readings. From them, we could deduce approximately which direction and how fast the box was traveling on the last leg of the descent and we could sort-of track where it might have gone. We still had no idea how high it was when the last coordinates were transmitted, but we had nothing else to go on.

We set up a grid on the county roads covering a plausible search area, and followed it for about 30 minutes. It was bleak – not only were we making some gross assumptions about where we thought it might be, but the roads were spaced a mile or more apart making a visual recovery improbable. I began to lose all hope that we’d find the box at all, and became instantly thankful that my phone number was plastered all over the outside of it.

I told Brennen that I wanted to give up and call off the search. After covering most of our search area and with nothing else to go on, it was a bleak outlook indeed. He turned the car around at the next four-way intersection, and I looked down one last county road that we hadn’t covered yet and decided that we’d done enough. I’d started to go insane thinking about all the what-ifs – like what if it was in the middle of an unkempt field; it would never be found! We headed back the way we drove in, still on the unpaved roads, but this time towards the nearest interstate. I was beginning to talk about all the things that would change with the next payload – better radio links, more secure power connectors, and backup downlinks.

Brennen slowed down after a few hundred meters and his gaze shifted out the side window. “That looks like a bright box”, he muttered. I followed his gaze and nodded. “It sure doesn’t look like it fits into the landscape…”, I trailed off. Getting a bit closer, I nearly jumped out of my seat. I was looking at the payload, burst balloon, radar reflector and all!  It had landed about 40 meters from the side of the road on the top of a knoll covered in cactus and weeds. Brennen stopped in the middle of the road and I jumped out.


I ran the distance to the landing site in record time and looked everything over. The wooden dowel that held the antenna out the bottom of the box was clearly sticking straight up through the foam, pushed through and snapped off on impact. The balloon was wrapped tightly around the parachute, and appeared to render it nearly ineffective. I dropped to my knees, whipped out my knife and sliced the payload open to reveal that everything inside was intact!

The first thing I looked at was the still camera. I pressed the “playback” button and saw a picture of the ground I was standing on, shot after impact. I quickly scanned the most recent pictures and saw photos of clouds and clear photos from near-space. I just about fainted with relief! No matter what else happened, I had gotten the photos I was after, and was holding the memory card in my hand again. The launch was a success! I looked back at the payload and saw that the blinking red “record” light was still flashing on the video camera. Too soon to say, but it looked like we had full video of the journey as well!

IMG_4834.JPG uncorking

After calming down from the giddiness that had washed over me, we packed up the remains and set out for home. In the car again, I immediately transferred all the photos and videos off of the memory cards onto my laptop for safe keeping. Brennen and I toasted beers at the Oskar Blues brewery in Longmont on the way home – truly a successful day!


Ascent Clouds II
Space III Space - Apex of Flight


How we ever found that balloon remains an incredibly lucky mystery. How we missed seeing the payload the first drive-by and found it traveling the other direction is astounding, and that it was so close to the road as to be able to see it is simply amazing. If it had been 20 meters further, we’d never have found it and there’s a good chance it would have been months or years before anyone else stumbled upon it.

I still am unsure of what exactly went wrong with the GPS unit that caused it to report errant altitude data. Likewise, I never figured out why the radio stopped transmitting after impact despite the rest of the electronics having power and logging data. I learned a lot from these troubles, though, and will certainly fix the issues with any subsequent launches. All in all, it was an incredibly fun project to put together. There have been many similar projects over the years, and will no doubt be many more in the future, but this was my take on building and launching a weather balloon.

Thanks for reading. If you have any questions, comments or just want to say hi, I hope you shoot me an email; it’s me@stilldavid.com.