Never update code on the day of a flight. This is a rule I try to stick to, and I think it's a great rule to follow for a lot of things. If you're adding features just before a big launch or deploy, you might want to rethink your process.
But that's exactly what I found myself doing the morning of October 2nd, the day of a launch. Let me back up a bit.
We had just run a workshop as a part of the SparkFun National Tour with a guy named Bill Church, a local hacker in a tiny town with around a thousand residents in New Hampshire. He's interested in ballooning and he's working with a few high school students who are interested as well, so we decided to do a balloon launch on our "rest" day during the tour.
After sourcing a tank of hydrogen from the local AirGas, we got all the pieces for a launch together the night before. I had my tracking computer all programmed and wired up and ready - the only thing I needed was an antenna for the two meter radio downlink. Confident I could scrape one together the morning of, I drank some beers and went to bed.
We woke up, the morning of launch, late. Jeff and I shared a small pot of espresso, rubbed the sleep from our eyes and drove the RV to the launch site where we found a small group, including Bill, waiting for us already. Luckily we met a young woman named Fallon at a restaurant the night before, and she took an interest in the launch. She was waiting for us in the morning with more coffee and cinnamon rolls from her shop down the street. She's a lifesaver. I ran a prediction with typical launch characteristics up to 30km and back, and everything changed.
We were forecast to go straight into the Atlantic Ocean. Not good. I re-ran the prediction for a few different times during the day, and they all looked just as bleak. Things had changed pretty drastically since I ran a prediction two days prior in which the payload would only have traveled a few miles. This was our only rest day in the state, so our only chance to get this thing off the ground.
I ran a prediction for a 5km launch, and the flight path put us just over the White Mountains, still in the state. Jeff had the hair-brained idea that we could fashion a cut-down mechanism and terminate the flight early. I wasn't so sure.
I scrounged up some solid copper wire and an SMA connector and cut a 2 meter dipole antenna to length. Our coffee-shop friend ran to her store and grabbed a handful of soda straws which I taped together to keep the wire straight. Not perfect by any measure, but I was getting good reception from it on the tracking radio. I found a stray signature red SparkFun box and threw the payload guts inside it with a GoPro set to interval mode, taking a photo every ten seconds. The whole thing was more than a bit MacGuyver'd, but it was functional.
Jeff brought me his newly fashioned cut-down device. He'd found a micro servo which he bound to a piece of bare perfboard with some aircraft safety wire. He'd mounted another piece of the stiff wire to the servo horn and into one of the holes of the circuit board. When the servo opened, the wire would pop out and could theoretically drop the payload.
Theoretically. If it were coded. And if we were crazy enough to fly it.
So there I found myself, sitting cross-legged in the gravel parking lot of the Women's Rural Entrepreneurial Center with a handful of stray parts in front of me, reprogramming this flight computer to open a servo if it reached more than 4,000 meters MSL. Nothing crazy about that, I thought, just another day on tour with SparkFun.
I didn't even bother testing the cut-down mechanism, I just couldn't bear it. I was so sure it was going to fail I didn't want to see it with my own eyes. I bet Jeff a steak dinner it wouldn't work.
Reprogrammed payload in hand, we started filling the balloon with the hydrogen gas. By this time, a small crowd had gathered, including a few wielding video cameras and tripods interviewing us. Apparently we were the big news in Bethlehem, New Hampshire that morning. We closed off and hitched the buoyant balloon to the bumper of the RV and I rigged up the payload to it, cutdown, parachute and all.
I made one last check of the radio systems and tracking system and then the small crowd gathered around. I counted down - FIVE... FOUR... THREE... TWO... ONE...
And released! The balloon was airborne, and rising incredibly fast! We had overfilled the balloon in hopes that it would rise to 4km rapidly, thereby not traveling as far laterally.
We all gathered around my laptop, still sitting in the gravel but now receiving position and altitude updates every sixty seconds from the payload. We watched as it slowly rose up, up, up. When it passed 10,000 feet I got nervous. The cutoff was 13,148 feet - or four thousand meters above mean sea level.
It hit 12,000 feet. Then just over thirteen thousand feet. This was it. The next report came in - 12,300 feet! The payload was descending, the cutdown had worked!
We were just over ten minutes into the flight; it had risen at over 1,000 feet per minute as expected. The parachute was also working as expected, slowing the descent of the payload to non-lethal impact speeds, but it was carrying the payload away from us towards the White Mountains. We huddled around the laptop waiting eagerly for every update.
We got one last update before the payload fell too far to hear it. The report came it at just over 5,000 feet in altitude, heading over a highway into the mountains. We didn't waste any time. We fired up the RV and jetted down the road in the direction of where the payload was.
We drove about 25 minutes or so and corralled our three vehicles into a parking lot of the Appalachian Mountain Club's Highland Center. I jumped out and grabbed my directional Yagi antenna and tracking radio. There was a very faint reading from the payload if I scanned the radio over the nearby Saco Lake, but it was just barely discernible from the background noise. Dav had the idea that we climb up a nearby rock outcropping, gaining us a few extra feet of elevation to listen.
We climbed up, radio and laptop in hand. I swept back and forth and ... picked up a signal! I aimed the antenna, and plugged the output into my laptop, which instantly began decoding the beeps and boops into human-readable telemetry data. After getting two full consecutive readings from the payload, I copied the coordinates to my notebook and then into the Gaia GPS app in my phone. There were 4 decimal places of precision in the GPS reading, so we had an location accurate to just over 11 meters, or ~35 feet or so. Not bad!
I plotted the point on a map, and immediately thought there was an error. The latitude/longitude pair put the payload nearly exactly on top of Mt. Jackson, a 4,052' peak neighboring the Northeast's highest, Mt. Washington. It was so exactly on top of the mountain as plotted, the coordinates put the payload inside the highest ring on the USGS topographical map. A true bullseye.
We stopped at the AMC club to grab a quick bite to eat before attempting a recovery operation. We also picked up a local hiking map that had latitude/longitude markings on it, in case all of our technical devices failed. Jeff and Jim didn't believe me that it was right on top of the mountain, but Jeff helped me decode the coordinates himself and wanted to plot them on the map. After a bit of math and using a makeshift ruler, he marked the location on the paper map.
Directly on top of Mt. Jackson.
We looked at the hiking trails nearby, and learned that it was just over a three mile hike to the top of the mountain, and we were already parked in the lot for the trailhead. There was only one thing left to do: hike up and get it!
We finished lunch in a hurry. I packed up all the radio gear into my backpack and set out with Dav as my partner for the recovery operation, and kept in contact with Jeff over 2m simplex. We set out on the trail, determined to find the final resting point of this payload.
We quite literally bounded up the trail, covering the 2,500 vertical feet in just over an hour.
Nearing the summit, the wind picked up. Mt. Washington has the claim to fame of having the highest wind speed ever recorded by a human. Though the gusts on the summit of Mt. Jackson that day were probably only 35mph or so, they were bitingly cold and cut through my only layer fiercely. The tree line in the mountain range was only a hundred feet or so above the summit, and the trees all showed signs of retardation from the wind and harsh winter snows.
We reached the top and I immediately grabbed my radio. I picked up an APRS position report from the payload on my HT confirming the coordinates we already knew. The yagi antenna was saturated with signal - we were very close now!
I headed off the summit in the direction of the payload, and found quickly that I was going to have to bushwhack my way through. It was only a hundred feet now to the last coordinates, but it was very slow going in the densely forested stubby trees. Just 30 feet or so away, the bright pink parachute caught my eye. Not far behind it lay the red SparkFun box I had let go over 16 miles away three hours earlier.
We'd found it!
I trudged through the brush and climbed the short tree and retrieved the payload. The GoPro was turned off, which I took as a good sign that the battery had run all the way through. The only thing to check now was make sure that it was functional while in the air!
I radioed down the mountain that we'd recovered the payload, and Dav and I made our way back down. Happy to be out of the wind, we started shedding layers.
Near the bottom, we met up with Jeff and Jim, who had wandered a bit up the trail behind us. Not long after, we found Bill Church again, only this time he was carrying a six pack of local beer. Another lifesaver! Cracking that cold beer on the trail, payload successfully recovered, was one of the best feelings in the world. Being surrounded by the changing leaves in the White Mountains of New Hampshire was just unreal, and I realized how luck had been on our side so many times that day. From untested payload to the cutdown actually working to the recovery site just 130 feet off an established trail, everything went in our favor.
We all met up again and made our way to the Mt. Washington Hotel, just at the base of the 6,288 foot peak. We cracked another celebratory beer and I fired up my laptop, eager to see if the GoPro had worked.
I threw the memory card in and lo and behold, there were 1,300 pictures of the setup, launch and landing location. Everything went perfectly!
We hit the road again that night with a 3 hour drive ahead of us, the day's adventure over but all of us ready to move on to the next one.
For a few more photos, check out the set on flickr.