Instruments for High-Altitude Balloons

For many of us, an important motivation of launching balloons high in the atmosphere is to put instruments up there. Of course, the fact that instruments are heavier than air means they resist attempts to get them in the atmosphere and are prone to falling out of it. So, airborne sensors need to be light enough to be lifted by an affordable balloon and cheap enough to make risk of crash acceptable. I spent a big chunk of the last couple years designing and building a custom instrument with these characteristics in mind; this post describes how I did it.

My particular field is infrasound, sound waves whose pitch is too low for humans to hear. Infrasound waves normally come from very large sources like lightning, volcanoes, nuclear bomb tests, windmills, and even large animals like tigers or elephants. Unlike audible sound, infrasound waves can propagate long distances without dissipating as heat, which makes them useful for monitoring nuclear and volcanic blasts. Putting microphones high in the air could help improve geographic coverage in our otherwise land-based monitoring networks.

Solar balloons offer an affordable and flexible means of putting cheap, lightweight sensors in the sky. However, commercial infrasound instrumentation falls short in those aspects. To be sure, we do have a few high-quality data loggers and sensors to choose from, but none is lightweight or cheap enough to fly on solar balloons. The closest is the Omnirecs DATACUBE-3 (below, right). Including batteries and sensor, it weighs more than 1 kg and can cost a few thousand USD (depending on quantity and options chosen).

My normal research is on volcano acoustics. I’m not normally worrying about flying microphones on balloons, but I faced similar instrument limitations in volcano fieldwork. For example, my most recent project involved a hike with 2000 m of elevation gain to install 17 instruments near the vent of Tungurahua volcano. On a hike like that, the last thing I need is to be weighed down with heavy instruments, or even heavy batteries for the instruments. Plus, the instruments near the vent are definitely in harm’s way, and I don’t want to accidentally blow up an expensive sensor.


The upper slopes of Tungurahua: loose, rocky, steep, and prone to ballistic fall during eruptions.

The answer was that I needed to design my own instrument. This process had two parts: firmware (programming the microcontroller) and hardware (finding the right components and connecting them together). Fortunately for me, I began this project around 2012-2013 when a revival in hobbyist electronics was in full swing, and had access to components that are powerful but still novice-friendly.


The various companies and online forums I used to design the instrument. Most of these cater to hobbyists and beginners.

The Arduino system makes firmware way easier than it used to be. Arduino is a combination of a microcontroller (very, very basic computer), user-friendly circuit board, and programming interface that makes it easy for hobbyists to program the microcontroller and connect peripherals to it. It’s perfect for a beginner. In my case, the firmware’s job was to read data from several inputs, do a little processing, and write output data to a micro SD card. Inputs included an analog-digital converter listening to the infrasound microphone, a GPS (for precise timing and location), a temperature sensor, and a battery voltage tracker.


The Arduino IDE speeds up the process of writing and testing code.

Without the Arduino system to simplify this process, it wouldn’t really be accessible to someone like me. I’m a geophysicist, not an electrical engineer! But it still wasn’t easy, and it took me a couple years of off-and-on work before I really got it working well.

The hardware part of this project began with a bunch of user-friendly breakout boards wired to the Arduino. A breakout board is a little circuit board that includes some principal component (say, a micro-SD socket, or a GPS) and all the various minor components needed to make it work. The user simply then has to make a few connections (i.e., power, ground, and communication wires) between the microcontroller and breakout board to make it work. Breakout boards are important because a bunch of little things–for example, bypass capacitors and level shifters–have to be added for the principal components to work properly. These little things are often obvious to electrical engineers but can be overwhelming to beginners. Platforms like Arduino and Raspberry Pi might be the foundation of hobbyist electronics these days, but breakout boards make it possible to do cool things with those platforms.

One bit of advice to the DIY instrument designer: if you base your design on the Arduino, don’t use an actual Arduino in the final product. Use a bare-bones variant instead. Real Arduinos have a lot of nice features that unfortunately burn a lot of power, and you can reduce power draw by up to a factor of 30 by using a bare-bones knockoff. I used the Diavolino from EvilMadScientist at first, but am now designing my own board with a built-in efficient power supply instead.

jfa-gps        jfa-adc


Top left: GPS breakout board. Top right: analog-digital converter breakout board. Bottom: Arduino Uno, the most common Arduino version.

After getting the breakout boards to play nicely with the Arduino, it was time to design a printed circuit board (PCB) to house them. This might have been the most daunting part of this process. Two circuit design programs are common among hobbyists: KiCAD (free and open-source), and the light version of Eagle (free, not open-source, restricted to non-commerical use, but popular). Like a lot of scientific software, these programs take a while to learn.

In each program, the first step is to draw a schematic showing conceptually how components connect to each other. So, for example, if your circuit included a resistor and capacitor, your schematic would include the resistor symbol connected to a capacitor symbol, but no information about the size, shape, or position of the components.


Schematic editor in KiCAD

After drawing the schematic, the user decides how to lay out the circuit in physical space–specifically, where the components and electrical connections are located on the top and bottoms surfaces of the circuit board. The first step is choosing a physical footprint for each component. Then, a PCB editor window helps the user place component footprints on physical locations on the board and draw wires connecting them. The files created in this process can be sent to a manufacturer (I use Advanced Circuits, based in Aurora, Colorado, USA).


PCB Editor in KiCAD

The final product is called the Gem infrasound logger (named for the “Gem State” Idaho, where it was developed). Parts for it cost about $250 and it takes a few hours to assemble. This is about an order of magnitude cheaper than the cheapest commercial alternative. On the other hand, I put an uncountable number of hours (hundreds, at least) into designing and revising the Gem. On the other other hand, I learned some valuable skills in the process, and my next electronics project (a power-efficient Arduino board) was much easier as a result.

And of course, it’s turned out to be useful in applications beyond volcanoes. Danny Bowman (of Sandia National Labs, and this blog) has launched them on balloons. Tim Ronan (grad student at UNC-Chapel Hill) used them in his research studying river rapids. (Turns out that being lightweight is important when microphones have to be installed by kayak through class-IV whitewater!) Danny and Tim both helped me a lot by testing Gem versions that were still in development, for which I am grateful.

Was it worth it? As a grad student, my time is cheap and half my job is to learn new skills, so spending a lot of it learning how to do this was a good investment. If I was a professional scientist whose labor was more expensive, it might not be such a good decision: better to pay an engineer to do it, even if the product costs more to develop.

In any case, the final product justifies the effort, regardless of who did it. I now have a cheap logger that I can put high on volcanoes and on balloons. It’s been used in several projects around the world now, and it will remain a key part of my infrasound research.


A solar balloon carrying a Gem lifting off in Albuquerque, NM, USA. Photo by Danny Bowman.


A subset of the many sites where the Gem has been tested.


Persistence of Vision Frisbee

The first time I saw a persistence of vision (POV) clock I thought: “Wouldn’t that be cool on the side of the frisbee?”. It is a fun weekend project to make one. Here is an action shot of the POV frisbee I made:


It looks better in person – this picture is the best we could do with a Canon camera held on a level surface. The frisbee is spelling out ‘bovine aero’. Below is a picture of a test in a darkened room:


This is the perfect project for Adafruit’s tiny, lightweight Arduino compatible Trinket. The total cost of the materials was around $30:

Assembly is as simple as hooking up an LED & resistor in series to each digital out pin, writing some code to blink the lights in the correct order (see below), and attaching the circuit to the frisbee. Below are some pictures taken during assembly:


Some insights, if anyone else tries this:

  • I considered using a load sensor to determine the rotation rate of the frisbee (a = v^2/r). If you know the rotational speed of the frisbee, you can time the LED outputs to write more consistently spaced letters. However, it turns out the POV illusion looks OK if you use a fixed letter writing rate (I used an ‘on’ time 1 ms per vertical column of letter).
  • To mount the LEDs on the frisbee, I drilled holes in the side and covered them with electrical tape. Punching the LEDs through the tape provided a stable mount for the LEDS.
  • I used letters made up of 5×5 pixel blocks. A better POV display could use more vertically stacked LEDs, or even multicolored LEDs.

Click below to see the code I used:

int B[25] = {1,1,1,1,1, 1,0,1,0,1, 1,0,1,0,1, 0,1,0,1,0, 0,0,0,0,0};
int O[25] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1, 0,1,1,1,0, 0,0,0,0,0};
int V[25] = {1,1,1,1,0, 0,0,0,1,0, 0,0,0,0,1, 0,0,0,1,0, 1,1,1,1,0};
int I[25] = {0,0,0,0,0, 1,0,0,0,1, 1,1,1,1,1, 1,0,0,0,1, 0,0,0,0,0};
int N[25] = {1,1,1,1,1, 0,1,0,0,0, 0,0,1,0,0, 0,0,0,1,0, 1,1,1,1,1};
int E[25] = {1,1,1,1,1, 1,0,1,0,1, 1,0,1,0,1, 1,0,1,0,1, 0,0,0,0,0};
int A[25] = {0,1,1,1,1, 1,0,1,0,0, 1,0,1,0,0, 0,1,1,1,1, 0,0,0,0,0};
int R[25] = {1,1,1,1,1, 1,0,1,0,0, 1,0,1,1,0, 0,1,0,1,1, 0,0,0,0,0};
int S[25] = {0,1,0,0,1, 1,0,1,0,1, 1,0,1,0,1, 1,0,0,1,0, 0,0,0,0,0};
int P[25] = {1,1,1,1,1, 1,0,1,0,0, 1,0,1,0,0, 0,1,0,0,0, 0,0,0,0,0};
int C[25] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1, 1,0,0,0,1, 0,0,0,0,0};
int space[25] = {0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0};

int letter_time;
int write_time;

void setup() {
  //use pins 0-4 for output
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);

  letter_time = 2; //delay between letters (ms)
  write_time = 1; //how long a led is activated for (ms)

//Write an letter to the POV display
void write_letter(int * letter) {
  //write letter, column by column
  for(int i = 0; i < 5; i++) {
    for(int j = 0; j < 5; j++) {
      digitalWrite(j, letter[j+i*5]);

  //write space after letter
  for(int i = 0; i < 5; i++) {
    digitalWrite(i, 0);

void loop() {

A flight aboard the NASA High Altitude Student Platform (HASP)

The NASA High Altitude Student Payload (HASP) project provides a spot on a high altitude balloon payload for undergraduate and graduate students. When I heard about this last year, I gathered a team together, we applied and were accepted into the program. Our project: launch infrasound microphones into the stratosphere. Infrasound (sound at frequencies below audio range) is usually measured at the Earth’s surface, but we know it propagates hundreds of kilometers upward into the atmosphere. Our goal is to measure these sound waves as they cross the stratosphere.

The HASP project was definitely a commitment. As the team leader, I was required to write a monthly status report letting the HASP project leaders know what I was up to. I had to build my payload box under strict power draw, weight, and size limits. I also had to learn electronics from the ground up. Thankfully, another member of our team had lots of experience in electronics, so it wasn’t so bad.

Our Omnirecs DataCube logger installed in the payload box.

Our Omnirecs DataCube logger installed in the payload box.

A few weeks ago, I traveled to Palestine, Texas to bring my payload to the Columbia Scientific Balloon Facility (CSBF). There, our payload was subjected to extreme temperatures (ranging from -50 to 50 Celsius) and pressures (sea level to stratospheric).  We passed the test, recording the 8 Hz signal from the vacuum pump clearly even when the pressure was around 5% of sea level.  This was an important milestone: not only did it clear us for flight, but it also showed that our differential pressure microphones (constructed by Dr. Jeff Johnson at Boise State University) would operate in a near vacuum, something they were not designed to do.

Our payload about to face the thermal/vacuum test.

Our payload (the white box with the UNC logo) about to face the thermal/vacuum test.

From Texas, I traveled to New Mexico to launch our payload into the stratosphere.  I ended up staying in my home town, about 2.5 hours from the launch site at (a CSBF facility in Ft. Sumner, NM).  Needless to say, I spent a lot of time on the road!  I had to drive there and back three times: once to put my microphones on the flight ladder (see below), another time to make sure everything worked during the “hang test” (a dry run for launch), and finally for the big day itself – the flight.

CSBF staff mounting the infrasound microphones on the flight ladder.

CSBF staff mounting the infrasound microphones on the flight ladder.

Like any balloon flight, this one depended on the weather.  This time, the news was not good.  One group was ahead of HASP, and they had dibs on each launch window.  They tried twice, and were not able to fly both times.  I had to fly home on Saturday, so I showed CSBF and HASP personnel how to set up my payload, and I resigned myself to not seeing the balloon fly.

But as luck would have it, the previous team decided to wait, and a launch window opened Saturday morning, the day I was scheduled to fly home.  Since the flight was early in the morning and my plane ticket was for early afternoon, I decided I was going to go see the launch.  I drove out, arrived in Ft. Sumner at about 10 PM, slept in the back of the car for a few hours, then got up at 2:45 AM Saturday morning to start getting ready.

It's about 3:45 AM, and CSBF staff secure the microphones after I powered them up about 15 minutes before.  The wheel on "Big Bill" (the launch vehicle), is taller than I am.

It’s about 3:45 AM, and CSBF staff secure the microphones after I power them up. The wheel on “Big Bill” (the payload vehicle), is taller than I am.

The launch was touch and go the whole time – we had to wait for the winds to all blow in the same direction for the first 1000 ft in order to start the inflation process.  As luck would have it, they did straighten out, and the call was given to roll out and start inflating the balloon.

The balloon reaches full inflation about a half hour after sunrise.

The balloon reaches full inflation about a half hour after sunrise.

The launch was spectacular.  The balloon was released and drifted into the air.  Big Bill started driving in the direction that the balloon was going, and just when it was overhead, the payload was released.  The entire structure (800 ft high!) was now in free flight.  It seemed to climb slowly, but that was an illusion – when the balloon was 12,000 ft above the ground it still seemed close enough to touch.

The radio crackles and says "it's your balloon."  With that, the 3 million cubic ft envelope is released and begins climbing into the air.

The radio crackles and says “it’s your balloon.” With that, the 3 million cubic ft envelope is released and begins climbing into the air.

Here we go!

Here we go!


The balloon flew for about 8 hours, and was terminated over northeast Arizona.  Once the recovery team picks it up and ships us our data logger, we can find out what we heard up there.

A big thanks to the Louisiana State team for running HASP, and all the great people at CSBF who made it all happen!

Cellphone reception in the air measured with helium and solar balloons

The maximum height of cellphone reception varies quite a bit depending on where you are – we’ve seen 30,000 ft in New Mexico and 4,000 ft in North Carolina.  In this post, I’ll give a few examples of cellphone reception from altitude from our own experience.  I’ll also explain what factors probably led to the surprising range of maximum altitudes we observed.

Cell phones have been used to track high altitude balloons for a while now: at least since these guys from MIT launched a camera into near space for $150.  Here at Bovine Aerospace, we used cell phones for three launches: a near-space flight in New Mexico, a solar balloon near Norwood, Massachusetts, and a solar balloon near Chapel Hill, North Carolina.  We used the instamapper app, which went offline in 2012 but apparently is back (just realized this about 2 minutes ago, it’s like hearing back from an old friend).

The Jake 2 high altitude balloon launch carried a SPOT tracker and a Boost Mobile phone.  The phone continued to transmit latitude, longitude and altitude until the balloon reached 20,000 ft, after which the altitude ceiling was reached (some GPS chips stop sending altitude above a certain height).  It continued to report latitude and longitude to approximately 9,000 meters (30,000 ft), when the connection was lost.  The cell phone did not transmit data on the way down (good thing we had the SPOT!).  This is not too surprising because the balloon came down over a remote desert area and ended up in the mountains.

Unfortunately we do not have the cell phone data, because we never copied it down and the online repository expired.  Rookie mistake!

The Jake 3 solar balloon carried my coworker’s old Android phone to about 3,000 m (9,000 ft):

Elevation versus time plot for the Jake 3 solar balloon launch in Norwood, Massachusetts.

Elevation versus time plot for the Jake 3 solar balloon launch in Norwood, Massachusetts.

We had cellphone tracking from the surface (35 meters above sea level) to 350 m (1161 ft) above sea level.  We lost tracking for about twenty minutes, then regained it at 1867 m (6123 ft) above sea level.  Tracking was lost for good at 2755 m (9038 ft) above sea level, after about 43 minutes in the air.  The balloon was visible for 15 or 30 minutes after we lost tracking.  We’re not sure how high the balloon went, but we do know it came down in the Atlantic…7 of the 9 messages in bottles in the payload were discovered up and down the Massachusetts coastline.

The gap in coverage is particularly interesting since the balloon was never more than a mile from the launch site during tracking (despite being well over a mile in the air when contact was finally lost).  So, clearly there is not a simple relationship between cell reception and altitude.  I have a pretty good idea what is causing this – see the discussion at the end of the post.  You can download the position data for Jake 3 here.

We repeated this experiment with a different solar balloon design (and a different Android, obviously) in Chapel Hill, North Carolina a few months later.  Once we lost reception, we never expected to see the balloon again.  However, something went wrong during the flight and the balloon came back down a few miles away.  The resulting altitude plot looks like this:

Elevation versus time for the Jake 4 solar balloon flight in Chapel Hill, North Carolina.

Elevation versus time for the Jake 4 solar balloon flight in Chapel Hill, North Carolina.

Cellphone tracking was present from the surface (100 m, 328 ft) above sea level to 800 m (2624 ft) above sea level.  The balloon was too high for cellphone reception for about 21 minutes.  It reappeared, descending rapidly, at an elevation of 1164 m (3818 ft) above sea level.  We recovered the balloon, cell phone, and the messages in bottles we’d hoped to distribute at sea in a forest about 6 miles away.  Over a thousand foot difference in maximum height of cellphone reception over 6 miles!  Evidently, the maximum cellphone reception height is variable spatially as well.   You can download the position data for Jake 4 here.

While we still have no idea what made it come down suddenly, it is certainly possible to make a rough estimate of the maximum height of the balloon using linear regression.  Turns out it made it almost exactly a mile above sea level before something went wrong!

Maximum elevation reached during the Jake 4 flight estimated using linear regression.

Maximum elevation reached during the Jake 4 flight estimated using linear regression.

Evidently cellphone reception with altitude varies with location (highest in New Mexico, lowest in North Carolina), varies with horizontal distance in the same region (i. e. North Carolina), and can periodically disappear and reappear with altitude (Massachusetts).  All three of these variations make sense.  In New Mexico, cellphone networks must cover large areas of mountainous land with very low population density.  My guess is that cellphone transmitters in New Mexico send a very powerful signal in order to cover the largest land area with the fewest possible towers.  So it makes sense that we would still have cellphone reception above 25,000 ft in New Mexico.

The gap in cellphone transmission in Massachusetts was likely not due to the phone malfunctioning but actually a consequence of how radio antennas operate.  It turns out that directional antennas (such as those used to transmit cell phone signals along the ground) produce side lobes in addition to the intended radiation direction.  So this balloon remained in the main signal zone until about 2600 ft, where it entered a null region.  It then crossed into a side lobe at about 6100 ft, finally losing the signal again just over 9,000 ft above sea level.

Illustration of main and side lobes. Figure from the Wikipedia article on side lobes in radio antenna design.

As an aside, this same radiation pattern shows up in some unexpected places – such as the sound pattern produced by speakers.

The North Carolina launch showed something a bit more mundane – cell phone reception varies with location!

Stopwatch Based Cutdown/Solar Balloon Inverter

Previously we posted about a GPS/arduino based cutdown. This post describes a simpler balloon cutdown which uses only a countdown stopwatch. A prototype of the timer based cutdown is pictured below:

100_0526The circuitry resides in the tupperware container, while the nichrome wire is encased in the foam block above the tupperware. A nylon cord runs vertically through the tupperware and the nichrome wire coil. When the countdown timer hits zero, the nichrome wire is heated by the current passing through it and melts the nylon cord. The foam block is a safety device to prevent the nichrome wire from starting a fire if the cutdown is inadvertently triggered on the ground. The cord is severed above the cutdown container, so the cutdown device must be attached to a parachute or something else below. Our plan is to use this device to invert a solar balloon during short test flights. The inverted balloon should act as a large streamer to slow the descent of the payload after the cutdown is triggered.

solar_balloon_inverterA circuit diagram created with xcircuit and a more detailed view of the circuit are shown below. Basically we hooked up the wires originally attached to a piezo buzzer in the countdown timer to a 555 timer IC, which is configured to produce a pulse of +5 V for about 10s when it receives a signal from the countdown timer. The signal from the 555 timer triggers the reed relay, which closes a circuit containing only the nichrome wire and 4 AA batteries, heating the nichrome wire and severing the nylon cord. If you make this circuit be sure to get the values of R1 and C1 correct as these determine the length of the pulse emitted by the 555 timer.


In theory any cheap countdown timer should work for this as long as you are able to access the wires leading to its internal piezo buzzer. One caveat: most stopwatches make a beep every time a button is pressed, so it also may be necessary to install a switch somewhere in the circuit to stop the cutdown from triggering when you start the timer.

GPS Balloon Cutdown

This post goes over how to make a GPS based cutdown for your high altitude weather balloon. FAA regulations (FAR 101) require that unmanned balloons have two methods of flight termination. While balloon burst at high altitude is usually a very reliable way to end your flight, if there is any risk of the balloon reaching neutral buoyancy, such as with launches designed maximize elevation, a secondary cutdown is useful.

For our cutdown we used a ‘thermal knife’ made of 30 gauge nichrome wire (a type of wire also used in toasters).  To trigger the cutdown we used an Arduino Uno board and the “ultimate GPS” from Adafruit. The Arduino checks the GPS coordinates every 60 seconds, and if the GPS has crossed some preset line (for example, the balloon is 30 miles from an ocean or great lake) sends the cutdown signal. Alternatively, you could use a limit on time aloft to trigger the cutdown.  The Arduino cutdown signal triggers a transistor to switch on a reed relay, which completes a circuit with the nichrome wire and a battery pack. The reed relay is needed because the large amount of current that flows through the cutdown circuit loop would fry the transistor! A circuit diagram (created with Circuit Lab) is shown below:

Cutdown circuit diagram

Cutdown circuit diagram

And picture of the circuit soldered on perf board:

Cutdown Circuit

Cutdown Circuit

We used a battery pack with 4AAs to power the cutdown, which provides sufficient current to get the nichrome wire glowing red hot:

Glowing Hot Nichrome Wire

Glowing Hot Nichrome Wire

For balloon flight, the nichrome cutdown wire was coiled around the line between the balloon and the payload and sheathed in heat shrink tubing.  The setup is shown below:

cutdown_setupAs a first test of our cutdown mechanism, we launched a balloon with the Arduino set to trigger the cutdown at 20,000 m. Our blog post about the launch is here, and pictures from that cold snowy day are here. As show below the cutdown worked perfectly, terminating the ascent at 20,082 m:

Elevation recorded by GPS during flight.

Elevation recorded by GPS during flight.

The Arduino sketch that we made to do all of this is based on the Adafruit Ultimate GPS Library, and is available here.

Jake VI – Successful Test of Cutdown

I’m happy to announce that we had a major success last weekend.  My friend launched a weather balloon carrying a GPS and an Arduino computer programmed to cut the cable on the balloon at 20,000 m (~66,000 ft).  This launch, designated Jake 6, carried out its mission perfectly.  The payload separated from the balloon 20 kilometres above the snow-covered Minnesota landscape, then parachuted down for a safe landing in a tree.  The descent was a little scary as we watched our payload parallel, then cross the Mississippi River!  We knew it was about to land, and it would have been a very poor ending to the day to have it splash down in the brutally cold water.

Click here for a video of the flight!  A good photo taken from the air is below:


What went right:

-Successful cutdown at 20 kilometers.

-Detailed GPS data of the flight

What went wrong:

-The GPS did not get a fix until about 10 kilometers above the ground, which means we lost some data on the ascent

-The camera was accidentally programmed to take RAW format images, which means it ran out of memory at around 10 kilometres.  Still got some cool pics though!

-Our faithful parachute had to be left behind in the tree, despite my friend’s valiant recovery of the payload box