Introduction: The Easiest Arduino High Altitude Balloon Data Logger

Picture of The Easiest Arduino High Altitude Balloon Data Logger

Check out our 360 video from space here:

High Altitude balloons are effective tools in conducting experiments and measuring data in the stratosphere. A successful launch can cost less than $200 and give insight and video of how our planet functions.

For hundreds of years, humans believed the Earth to be flat. High altitude weather balloons prove the Earth is in fact round. The idea of high altitude balloons or HABs is to mount a payload on a giant helium balloon. The balloons are then released, flying to heights of 100,000 feet. Once at these altitudes, the balloon pops and uses a parachute to float back to the ground often many miles from where it was first launched. HABs are great vehicles to get footage from the stratosphere, conduct science experiments, and collect data from high elevations.

My high school has an astronomy club which regularly sends up these balloons. We have recovered 12 of our 14 launched balloons. Launches sent cameras, donuts, yeast, and more odd things into space. Yet, we had never gotten any data from sensors. I wanted to change this. When looking at tutorials online for building data collectors I found most of them:

1. Were extremely complicated - involved making custom shields, multiple coding languages, and other stuff I didn't want to deal with

2. Used GPS units not able to record above 60,000 ft. - What's the point of putting sensors up there if they don't work at apogee.

You can purchase HAB trackers online but they'll cost you $150. So, I decided to build my own! This logger gathers latitude, longitude, altitude, wind speeds, time, and satellites in view and logs them onto a microSD card and can be made for under $70.

This Instructable focuses on the data collector only. Another Instructable detailing how to launch a weather balloon will be coming out soon.

Step 1: Things We Need

Picture of Things We Need


Arduino- I've used Unos and Nanos on this build. Most Arduino boards should work.

Authentic will be about $25 but you can pick up a clone for cheap.

In the comments section users PirateKittyK and ltheoret pointed out that authentic Arduinos are rated to -40 degrees Celsius. While fakes die at about 0 degrees Celsius. Because space is cold, splurging on an authentic is probably a smart idea.

GPS- this one works at the altitude requirements and is pretty cheap and accurate


SD card logger- I went with this one cause ya know Sparkfun


1k resistors (2) for the rx lines


Battery clip, I like the ones that plug into the jack on the uno


Powersource- Space is really cold, so no alkaline batteries. Stick with lithium.

I used a 9v battery


LED (optional)

Breadboard (optional)


Perf Board (optional)

If you're looking for a professional look.


Various Wires

I'll assume you have these. Some male to male and some male to female

Micro SD Card 8-16 GB are adequate


(optional) Headers, you can use wires instead.

Total cost: About $65

If you already have everything besides the GPS and DataLogger its only $45!

Tools Needed

Soldering Iron - many components need headers or wires soldered on



Arduino IDE

Libraries Used


SoftwareSerial any software serial library should work.

Step 2: Building the Circuit

Picture of Building the Circuit

You may need to solder headers onto the GPS and Sd card holder you can learn how here:

Arduino - GPS

3.3v --- VCC


D3 ----- 1k resistor ----- RX

D4 ------ TX

Arduino -- OpenLog

Reset --- GRN

D0 ---- TX

D1 ---- 1k resistor ---- RX

3.3v ----- VCC

GND ---- GND

GND ---- BLK


Arduino -- LED

D13 ------ + (longer leg)

GND ------ - (shorter leg)

Step 3:

Step 4: Programming

Picture of Programming

You can download the libraries from the parts page of this Instructable.

Use this page to learn how to install a library if you are unsure

The programming for this is pretty easy. Most people use the TinyGPS library for communicating with GPS units but I couldn't get it to parse the characters we were producing. The library was showing we were getting characters but wasn't able to turn them into information we could use. I then took to the Arduino Forum for alternatives or solutions and the NeoGPS library was recommended. I switched to this library and it works flawlessly. My code is based off of the NMEAloc example. This example grabs latitude, longitude, satellites in contact, and wind speed. Satellites in contact is important because it shows which readings are the strongest. The more satellites, the more accurate the reading.

A software serial library is also needed because both the GPS and SD Card work through serial. I used software serial because I already had it installed but others would work just as well if not better.

I added time and altitude readings, put the GPS in flight mode (it will only work to the heights we need if in this setting), and a nice display to the code. The GPS unit gives out a reading about every second. With an average flight time of two hours this would mean we would have more than 7,000 readings to go through.

GPS readings are very fragile and messing with timing will give false readings. This means adding a delay so we get a reading every 30 seconds would ruin our data. To get around this, we take a reading every second but use a variable (i) we only allow every 30th reading to be printed to the serial port / SD card. I took every 30th reading because I wanted to keep a reading every 30 seconds but you can change this to whatever you'd like.

You'll need to change these values to your offset from GST

If you don't know yours you can find it here

static const int32_t zone_hours = -8L; // PST

static const int32_t zone_minutes = 0L; // usually zero

This line should be changed to how often you want a reading recorded. I set mine for a reading every 30 seconds.

if (i == 30) {

Attached are both versions 1.0 and 2.0 of the code. Version 1.0 is only compatible to 40,000 feet. Version 2.0 will work to 150,000 feet. Version 2.0 also blinks an LED when data is recorded to the microSD card.

Step 5: Testing

Picture of Testing

Before we run the program, we need to format the micro SD card to a fat16 or fat32.

I followed this tutorial by GoPro

To upload the code, unplug the SD card logger as those pins need to have nothing on them to upload the code. Ensure everything is plugged in right and that you have the right port selected. Once uploaded you can either plug in the SD card logger or leave it disconnected. With the SD card logger disconnected, the data will be displayed on the Serial Monitor. For the first test I like to see every reading so I change if (i == 30) to if (i == 1).

You'll notice it will start by displaying ?. This is because the unit has a cold start time of about 2 minutes. Sometimes it is longer, do not freak out! After about a minute it'll show the time. If you put in the correct time zone this should be correct after the first couple of readings. A short time after, the rest of the data will display. The altitude reading may show 0 but just give it a few seconds and it will be correct as well. Notice the altitude readings change even when the altitude stays the same. This is normal and since we are printing the altitude in centimeters a change of 1000 is only 33 feet.

Grab the latitude and longitude and search and you'll be shocked by the accuracy. I did this for the first time and not only did it drop a pin on my house but it dropped the pin specifically where I was doing the testing in my house. Pretty cool!

Next, change variable i back to 30, upload the code and plug in the SD card logger. Push the SD card into place. You can plug it into either a battery, your computer, or a power supply at this point. Every 30 seconds the blue light on the SD card logger will flash meaning it recorded data. That means it is working. Let it run for a few minutes and then cut the power and then pull out the SD card. Once you plug the SD card into your computer you should notice two files. If you hit the reset button or plugged and unplugged it in there will be more. The first is a file named config.h Do Not Delete this file. Secondly you should find a file named log. Open it up and all of your data should be there. If so, you're almost ready to launch.

If there is no file or nothing on the file, check your wiring connections.

Consider adding glue to the wire connections. The package will experience some major wind so make sure connections are tight.

Step 6: Launch

Picture of Launch

If you're using a styrofoam box as your payload, just throw the electronics in. I used a payload where the electronics are exposed so a case was needed. I was 3d printing a box but it wasn't going to finish in time so I put the electronics in a small cardboard box, wrapped the box in hand warmers, and then put all of it in a ziplock bag to make it water proof and retain heat. This was vital, the balloon sat in snow for three days before it was recovered.

Before releasing the balloon:

Plug in the battery - a fresh one

Check to see the data logger blinks a blue light about every 30 seconds - this means the system is working.

You can check out the 360 video here:

Step 7: Recovery

Picture of Recovery

The balloon landed atop Palomar Mountain. Home to the famous Palomar Observatory. We drove up there and realized the balloon landed 1000 feet away from the Observatory itself! We then realized that that part of the property is off limits to the public. We talked to some workers and they told us we needed special permission from the board to have the balloon recovered. Three days and many emails later the staff at the Observatory recovered the balloon and brought it into a back room of the observatory. They told us we could pick it up whenever. Thank you for recovering the balloon Observatory staff!

Right after we received the email, multiple storms hit Palomar Mountain, closing the roads surrounding it for a week. Finally, when the snow melted, we were able to recover the balloon and bring it back to school. This was the moment of truth. I snuck out of my other classes, as in the time between launch and recovery the semester had ended, and saw the package. One of the teachers told me they had started to take apart the box for the electronics. I walked up to the box and saw a wire disconnected to the Arduino. I was now worried. Had the wire been undone the whole time? Did I have any data? I reached the microSD card, popped it out of the logger and into my computer. I open the file and saw a log. My nerves increased. Did flight mode work? Is there any data? With a group of students and teachers watching, I opened up the file.

It worked! Almost perfectly. It showed latitude/longitude/wind speed/altitude/time/satellites for about 35 minutes. It then showed all but altitude for another half hour before the battery died.

I had just collected data on one of these weather balloons for the first time. So cool!

Step 8: Analysis

Picture of Analysis

Overall, this was a successful first attempt. The logger was extremely accurate, aligning perfectly with the location readings from the SPOT GPS.

The last altitude reading was at 39,000 feet this was 35 minutes into the flight. This makes sense. Weather balloons typically rise at about 1,000 feet per minute. We used extra helium and had a light package which is most likely the reason our balloon rose at 1,100 feet per minute. I was surprised the balloon rose linearly.

The wind speed data is interesting. It looks like the wind came in gusts. Once we got above 14,000 feet the wind speeds didn't seem to change with altitude. If you look at the raw data, the wind speeds jump up to 70 mph every couple of minutes, the graph is a little deceiving.

When looking at the raw data keep in mind that the higher the number is in the SAT line, the more accurate that data point is.

Step 9: Conclusion

Overall, I would call this a success. Although we lost altitude at 40,000 feet and the battery died before the end of the flight, this was proof of concept. With a few simple switches, I think we could get a full flight documented. For the next flight, I will change two things:

1. I will use a better battery - Maybe a Double AA battery pack, I'm not sure.

2. I made a hole for the GPS to stick out of for better signal - I now realize this probably wasn't needed.

I think encasing the whole unit will keep it warmer resulting in longer battery life.

If you have any questions please leave them in the comments section.

This is my first Instructable

This Instructable is in the Microcontroller contest as well as the Sensors Contest. Please vote if you enjoyed!


curlydutch (author)2017-07-18

Thank you so much for posting!

My friends and I are using this to get our GPS up and running.

What was the justification for the 1k resistors ?

Spaceshark (author)curlydutch2017-07-21

Sorry for the late response,

The purpose of the resistors is to bring the 5 volts supplied by the Arduino on the serial communication lines down to 3.3 volts. The GPS unit can be damaged by 5 volts so the resistor is necessary for safe use. We only use resistors on the receiving lines of the GPS and microSD card lines because those are the lines where the Arduino is supplying data. If you use an Arduino or micro controller that runs on 3.3 volts rather than 5 volts, the resistors are not needed.

Thanks for the question!

Udon (author)2017-06-10

Hey, I'm really impressed. This is a pretty awesome thing to be able to do with so few parts.

Will you do it again?

Spaceshark (author)Udon2017-06-10

Thank you and funny you say that. We actually launched a balloon containing a new variation of this data logger yesterday. Expect an Instructable detailing the new data logger in the following days.

NathanR124 (author)2017-05-11

Hi there Spaceshark, as you know you and I both got the runner up award in the microcontroller contest. I don't know if it's just me, but these technology contests seem rigged. For example, your Instructable should have been in at least second place, but look at this Instructable who beat both of us.

If I were to be a judge, I would have given you a higher reward. You really do explain and tell a great story during your Instructable.
I know a majority of us runner-ups feel upset for not winning at least 2nd place, but seeing others have less detail really confuses me. How are we going to know what the judges want?

dgeigerd (author)NathanR1242017-06-02

At the German contest for technology (Jugend Forscht), a good friend of me built a High-End Tube Amplifier with Bluetooth, wifi, aux, chinch and much more (2.1 Amplifier) all on himself (except the Bluetooth/WIFI Module) and got only 2nd Place. And the guy that was the first place just built a Sudoku Solving machine with an arduino...

Its very often that the judge is only a normal person that didn´t know how complicated some stuff is...

NathanR124 (author)dgeigerd2017-06-02

I guess this pattern seems to be happening almost everywhere. But if we were to show our complex accomplishments to colleges or our bosses at our jobs, would they promote us based on how complex the project is or on how simple it is to understand? I'm kind of worried for my future now.

And thank you for responding back.

imjeffparedes (author)2017-03-23

Simple but very effective, thats awesome !!

Spaceshark (author)imjeffparedes2017-03-23

That was the goal. Thanks!

amenosislopez (author)2017-03-15

Hi mate, did you put a camera into the payload? How did you attach it.

Spaceshark (author)amenosislopez2017-03-15

Yes! For this launch we used a Nikon KeyMission 360 camera. We typically use a GoPro because we get higher quality video. The 360 camera was secured with a camera mount. The payload, we use a laser cut whiteboard has a hole drilled in the center. We basically clamped the wood down. In the sense that the camera sat above the hole while a small threaded rod with a head, the same as the ones used to attach your camera to a tripod was used underneath. Once screwed in the camera was secure. With GoPro's, we position them in one of the outside slots. These rather than having one hole have four. We put the GoPro in a case. Space is cold. The case, with its holes in the bottom is easily secured with zip ties to the payload. Zip ties are easily strung through the holes in the case and then through the holes in the payload. Hope this helps!

isdubkov (author)2017-02-20

Wow, man, you rule!

Please, explain: from where did you get the wind speed data? Is it measured or calculated based on changing coordinates in time?

JimG50 (author)isdubkov2017-03-15


For info I attended a Ham meeting last night where the guest speaker discussed flying balloons around the world. Amazing stuff. He described ten milliwatt transmitter chips bought from Texas Instruments using surface mount components and GPS for tracking from Blox - or a name close to that. The GPS must be able to work at high altitudes. All components were controlled by an ARM microprocessor. Amazing construction weighing only 20 Grams but so small required magnification to assemble to solder parts. With temperatures at 14 KM around -60C parts have to be reliable. Balloons were small, maybe a meter in diameter but filled to just provide a small amount of lift.

Now if you want to have fun with a short duration flights at low levels, I suggest you google milliwatt transmitters that conform to your countries codes of frequencies allowed with no license. As well get to know some hams, get your license, and learn how to build to your requirements. Hams have free software allowing digital transmission of data. Google WSPR and FLDIGI are just two of many. Good Luck!

Spaceshark (author)isdubkov2017-02-21

So in the code when I call "Serial.print( fix.speed(), 6 );" this is getting the information. I'm using a command from the library. How the GPS calculates wind speed I'm not sure. But it does!

isdubkov (author)Spaceshark2017-03-01

Based on your input I guess, that's the way it is: GPS module calculates its own speed by comparing coordinates it certain time periods (the whole GPS system cares about pricise time because it is needed in the most basic operation). And, due to the fact, that the baloon can acquire a horizontal speed from nowhere but wind, speed of baloon equals speed of wind.

Spaceshark (author)isdubkov2017-03-01

That's super cool! Thanks for looking into it.

JimG50 (author)2017-02-20

Real fun project for school. What lucky students to have someone like you do this. You could get a HAM Radio license and shout out real time data including landing site. Besides students would find terrific scientific and every day use of the license if they were encouraged to get their own.

Spaceshark (author)JimG502017-02-20

Thanks! I definitely would love to get my HAM Radio License. We use SPOT GPS units already to track the balloons. But to call out altitude readings as well would be super cool! This would also give us insight when the balloons are not found. The first time I tried out my data collector we actually did not recover the balloon. With the HAM Radio we would have still gotten the data even with the lost balloon! I'll suggest it to my teachers. Maybe we could do a whole project based around it!

JimG50 (author)Spaceshark2017-02-20

Neat deal Spaceshark. I've been a ham 62 years starting at 14 years old and even made my career in electronics due to Ham Radio, getting patents and all that stuff, What is so interesting is the science of shortwave propagation, talking to other Hams around the world, using Ham satellites, building gear like you did plus hour upon hour of fun experiences and experiments. How about putting a small VHF transmitter on a balloon and finding how far it can be heard? The formula for line of sight on a curved earth could be checked out and I bet distances (DX) will be greater due to the bending of radio waves due to the atmosphere. In addition you can send pictures as the balloon is in the air. Again, very nice instructable, I plan to use some of your ideas. 73, Jim K5BTV.

amenosislopez (author)JimG502017-03-14

Hi Jim. I have plans to do a High Altitude Balloon with a Camera/GPS. Can I have more details about the experiment you describe with the VHF transmitter?

and_monetti (author)2017-02-23

Hi, great project, nice and simple. Unfortunately in Italy we have many restrictions about flying, I thought about doing the same (cheap ex mil HAB from surpus stores) but never really tried. What about the weight of payload?

Spaceshark (author)and_monetti2017-02-23

Our payload for our 600-gram balloon is 8 pounds (3.62 kilograms). Depending on the size of your balloon your payload can be less or more. For example, a 300-gram balloon would only be able to carry 4 pounds (1.81 kilograms). Filling the balloon with more helium will make it pop sooner and that might help solve your problem. If you end up doing that keep us updated! In the next couple of weeks, we will be posting a full explanation on how to launch a weather balloon so make sure to stay tuned for that.

and_monetti (author)Spaceshark2017-03-01

It's a high weight compared to the ones you use in drones. Maybe you can give a try to a heating system. I have some ideas to think about before posting you clues. Just cheking on one. Will post soon.

jmh43081 (author)2017-02-27

How did you know where it landed?

Spaceshark (author)jmh430812017-02-27

We track the balloons with SPOT GPS units. When they continually send the same latitude and longitude we know they have landed. When in the air, the balloons regularly travel 100 miles away from the launch site.

ltheoret (author)2017-02-19


Just wanted to comment on your statement that any old clone will do. Well your UNO is rated to about -40 degrees C. Then you stated it is very cold up there. in my flight last fall, at about 30,000 feet the fight info said -55 degrees C. yup! yup! yup!. just to let you know my $10.00 UNO clone froze at -6 Degrees C in my unheated garage last November. Yup just stopped working would not reset, brought it in the house 2 minutes later started working again.


PirateKittyK (author)ltheoret2017-02-20

You hit the nail on the head. Temp is one of the most important electronic variable.

Must use Inductrial/Military grade temperature parts. 0-70ºc don't cut it. -40ºC to 85ºC+ makes all the difference in the world. A cheap Chinese clone, would have froze midway and stopped working...

Spaceshark (author)PirateKittyK2017-02-20

This is true. I agree a real is better than a clone. However, we take many steps to combat the cold. We first put heat packs around the electronics in order to produce heat. We then wrap the electronics in an insulator material to preserve the heat. Finally, we wrap all of that in a water proof material such as a ziplock bag. Now it did stop working at about 60,000 feet. This could've been due to the cold. Also could've been the battery died. But, I had cut a hole in the insulator and waterproof layer to provide better visibility for the GPS unit. I believe the heat left through this hole. I will not cut this hole on the next flight. I agree that a real Uno is better to fight against temperature than a clone. But with proper heating steps, it shouldn't get cold enough where the Arduino is to matter. I will however test this. I'll use a temperature sensor internally to see how cold it gets inside our insulated layer on the next flight. If someone recreates the project but chooses to use no insulators or warming agents, I would definitely recommend the use of a real Uno.

PirateKittyK (author)Spaceshark2017-02-21

That explains a lot. Must've missed that part... Good job

Spaceshark (author)PirateKittyK2017-02-21

Thanks! I think you are definitely right. Without using heat packs, an authentic should be used. I'm going to edit the Instructable to add that in. Very important.

jags2020 (author)2017-02-21

Great job...i am so impressed. ..really amazing..i truly enjoyed your adventure and footage.. and the data will come in handy for my future projects...really inspiring. ..thank you.

Spaceshark (author)jags20202017-02-21

Thank you!

piper1234 (author)2017-02-20

ok and at last the Earth is round or flat? ... xD

SiddR1 (author)2017-02-20

Did it fly near any airports? Curious if there are any FAA restrictions.

Spaceshark (author)SiddR12017-02-20

You have to keep them away from airports. There's a certain number of miles away you need to be. I'd just say use common sense. Launch far away from airports and government areas and make sure the balloon lands in a recoverable area. You also have to have a radar reflector on your package to make it visible to passing planes. Check out this link about regulations I'll be posting an Instructable about launching a weather balloon in coming weeks!

PirateKittyK (author)2017-02-20

You should have used 4+ cameras (360º 1080px1920), and stitch the videos back together, to get a smooth and navigable video all the way up and down...

Spaceshark (author)PirateKittyK2017-02-20

I agree. A teacher at the school had this 360 camera and was willing to allow us to use it free of charge. Now that we have tried it ourselves, we are working with our teachers to write a DonorsChoose to get our own 360 camera. I will definitely bring up this idea as I agree the video I shared above could definitely be improved on.

JimB144 (author)2017-02-19

JimB144 (author)2017-02-19

You could incorporate a single axis gyro. That would do away with the Camera Spin to the most parts.

Spaceshark (author)JimB1442017-02-19

Camera spin is definitely a concern. In the early days we used to attach a fishing swivel on the line between the payload and parachute. We stopped this because we found there was less spin without the swivel. So I've been thinking about this a lot. Could we use a drone camera gyro? No, we are dealing with spin not up/down motion. I like the single axis gyro idea, I'll definitely give it a try! Thanks.

JimB144 (author)Spaceshark2017-02-19

With the given situation the fix may be as simple as spinning up a flat DC motor only using the Gyroscopic effect of the Armature.



LabRatMatt (author)2017-02-17

Very cool! I wonder if a hydrogen balloon would work just as well... as long as there's nothing that could make the hydrogen go kaboom.

Spaceshark (author)LabRatMatt2017-02-17

I've been thinking about this for awhile. Helium is the most expensive part of the launch so a cheaper alternative would be great. Building a hydrogen generator would make this very affordable. I like this one made by The King Of Random. It would take some time to collect enough hydrogen. We use 600 gram weather balloons. Hydrogen is lighter than helium though so the balloon would require less hydrogen and would rise faster! I'm all for the idea and have proposed it to my team before. The possibility of ignition though has been enough to shut the idea down.

LabRatMatt (author)Spaceshark2017-02-19

I'm in the process of creating a hydrogen generator of my own using a slightly different design (I'll post the instructable when it's done in a week or so). Ignition is a bit of a dealbreaker, as hydrogen is super flammable. It's also worth noting that Grant Thompson's (King of Random) hydrogen generator generates a mixture of hydrogen and oxygen gas in the perfect stoichiometric mix for combustion. H2 gas alone, separated from a source of oxygen, would be far less likely to ignite. But the process of creating pure hydrogen gas is also a bit more involved. It's worth some research.

Phildem (author)Spaceshark2017-02-19

Helium is a gaz difficult (impossible ?) to produce and the reserve go down quickly...It is used for projects much more important than this kind of use, using hydrogen is more dangerous but hydrogen is cheap and easy to produce...

ValentinJ2 (author)2017-02-19

Great project! I have 2 questions for you:
How did you know the balloon landed on Palomar mountain?
And do you need some kind of permission to launch a balloon this high?

Spaceshark (author)ValentinJ22017-02-19

Thanks! So we used to give us a basic idea of where the balloon would land. It said it would end up north of Palomar mountain. Because of this, we overfilled the balloon in the hopes it would burst prematurely and land south of the mountain. During the flight we track the balloon with SPOT GPS units. These send us latitude and longitude every 10 minutes. When the latitude and longitude are the same through multiple pings, we know the balloon has landed. As for permission to fly the short answer is you don't need permission. However, depending on weight of payload(keep this under 6 pounds) and other factors you may need to contact the FAA before liftoff. Read over this link

tomalla (author)2017-02-19

How do you figure out where the balloon landed?

Spaceshark (author)tomalla2017-02-19

We use to decide on which days we launch. This website gives predictions where your balloon will land. Because we are located next to Mexico and the ocean, we can only launch when the balloon is supposed to travel Northeast so this is a really important tool to us. We have two SPOT GPS units on the payload of every flight. These send us latitude and longitude readings every 10 minutes during the flight.

NishB (author)2017-02-19

Do you think one could use an arduino fona or particle electron board to send the gps data live via sms? Would 3G cellular work that high?

About This Instructable




Bio: I'm a 16 year old passionate about building, coding, and space science. Join me as I collect data from space, build experimental rocket motors ... More »
More by Spaceshark:LM1117 Linear Voltage RegulatorHairdryer to FlamethrowerThe Ultimate High Altitude Weather Balloon Data Logger
Add instructable to: