Introduction: Make a High-Altitude Balloon Tracker (Arduino)

Picture of Make a High-Altitude Balloon Tracker (Arduino)

One of the coolest projects I have done so-far with my kids is a "near-space" balloon. That's not quite into space itself (100Km+) but so high that the sky looks black and you can start to see the curvature of the earth as the globe rolls away below you.

The Flickr set with the photos from our first launch is here:

This is a quick-fire slideshow of the photos from the balloon, formatted as a 2.5 frames/sec video. I'm having trouble embedding it so the link is here

In order to take this kind of photo you need to send a camera up to the stratosphere. Ours went 38Km (124,000 feet) straight up. This is easy enough: you attach it to a massive balloon, let it rise until the balloon bursts (due to the v. low pressure at the edge of the atmosphere) and then it will fall back to earth.

In order to see the photos that you have taken, you then need to find the camera afterwards. This is the trick.

Fortunately, at least in the UK and increasingly across Europe, the very helpful guys at the UK High Altitude Society ( have developed a distributed network of trackers who will receive a signal from your balloon, upload the data to a server and plot the position for you on a Google Maps based page (

In order to take advantage of this wonderful network of helpers, we need to build a tracker that will communicate with their equipment. That is what I will outline in this instructable.

There are plenty of rules and regulations regarding what you can fly and which parts of the radio spectrum you can use for various tasks. The approach I will use in this instructable is suitable for the UK under the rules prevailing in 2013. If you live elsewhere or you are doing this significantly after I write this instructable, please check the rules that apply to you. The guys at UKHAS are fantastically helpful.

So - let's build a radio-tracker.

Step 1: Things We Need

Picture of Things We Need

The tracker is based upon the Atmel ATMeag328 Microcontroller which forms the heart of many of the popular "Arduino" boards. We are going to make an "Arduino Compatible" board which we can program using the Arduino IDE.

Because the GPS module and SD card both require 3.3v and we have plenty of computing power, we may as well make the whole tracker run on 3v3. That means that we can't clock the '328 up to its full 16MHz but it will run happily at 8MHz on 3v3, and that's plenty for our purposes.

The tracker is designed on a custom PCB which is 5 x 5 cm in size. This means that it can be fabricated on some incredibly cheap PCB fab' sites. The design files for the tracker board and more details on the design are in the later steps.

These are the materials I used for my design. There may well be better options but this worked well for me:


1 x Custom Tracker Board (see next step)
1 x ATMega 328**
1 x 8MHz Crystal (NB not the usual 16MHz)
2 x 22 pf ceramic caps
1 x Radiometrix NTX2 (e.g. from UPU's store)
1 x GPS breakout board with antenna (the board is designed for this one)
1 x SD card breakout board (e-bay)*
1 x board-mount DS1820 temperature sensor*
1 x external DS1820 Temperature sensor (e-bay)*
1 x HoneyWell HSCDANN001BA2A3 board-mount absolute pressure sensor (Mouser)*
1 x tactile switch
3 x 100nf ceramic caps
1 x 100 uf electrolytic cap
1 x MCP1825 ultra-low dropout 3v3 regulator
1K resistors (around 5)
10K resistors (2-3)
4k7 resistors (4-5)
3mm LEDs (0-4 according to preference, different colours)*
Selection of 1% resistors (I used: 47K/6.8K for the battery sensor and 6.8K/10K for the radio driver )
Male header pins (0.1") - some straight, some 90'

Soldering station and solder
Helping hands
Wire strippers

Programming / Debugging Tools:
PC with Arduino IDE installed
USB to UART adaptor (I use a cheap CP2102. FTDI would work too) or program with ISP (see below)

For Bootloading/Programing**:
ISP programmer


Arduino + breadboard or ISP shield

* - These sensors and indicators are not essential to the function of
the board but allow you to send some interesting data and log it for analysis offline.

**You can buy pre-bootloaded chips but they expect a 16MHz crystal. You would likely at least have to correct the timings in the code to make it work on 8MHz. It is certainly preferable to burn an 8MHz bootloader (see later). It's not hard to do.

Step 2: Tracker Design

Picture of Tracker Design

Attached to this step are the Eagle schematic and board files that I used for my tracker board, along with two .zip files: one with the board and schematic files and one containing all of the gerber files for the various layers. My board worked fine, but was not 100% perfect, for example, the LEDs on the serial port lines should really pull up to +3v3 rather than pulling down to ground so that they are off when there is not activity.

You may well prefer to design your own board, or at least modify mine. If you do this then there are a number of features that are necessary and/or useful for a High-Altitude tracker. These are some that are worth considering:

You can't send an alkaline battery up into the atmosphere - it get's down to -50'C and they just stop working.
Even though you will insulate your payload, you want to use disposable lithium batteries - the are light and work well at low temperatures.

The GPS and SD-card run at 3.3v only. 5v will fry then. If you can run everything on the same voltage you save wasting too much power in voltage conversions.

If you use a switching power supply or an ultra-low dropout regulator then you can wring more flight-time from your power-pack.

You could make your circuit up with lots of loose wires, with sockets or on stripboard, but it's going to get very cold and shaken about!
If you can it's worth designing a custom PCB and soldering everything directly to it. No sockets to lose contact, at least for the critical parts. My PCB is small and cheap but will allow soldering of the processor, crystal, GPS and radio. I elected for direct soldering of the radio antenna too.

Radio - in the UK there are only a few narrow frequencies you can use from the air and even then you are only allowed 10mW. The NTX2 is one of the few viable options for radio modules.

GPS - layout of a GPS module can be difficult and ideally you would keep it away from everything else. I opted for a pre-made module that could be soldered above and off to the side from the main board. It's important to note also that many GPSs don't operate above 14km height. Ublox GPSs have a flight mode that does work. For any others you will need to do your research before you buy/use.

Microcontroller - the ATMega 328 is a great option because it can be programmed from the very easy Arduino IDE. It will also run on 3v3 but only a 8MHz. However that's plenty of processing power for reading a GPS and running a low baud-rate radio.

Temperature - a temperature sensor provides interesting data but many are not rated down to the -50'C that we could encounter at the tropopause. The DS18B20 is a good option because they are pretty cheap and are rated to low temperatures. You can get "external" ones which are sealed in a stainless tube for added protection. We'll use one board-mounted one and one external.

Pressure - there are not too many "absolute" pressure sensors that I have found. The Honeywell HSCDANN001BA2A3 supposedly goes down to "0" mBar and in practice performed well down to 8mBar on the flight. Its i2c interface is pretty easy to handle. Honeywell make about a zillion variants but many are "relative" sensors - they measure the difference between a certain pressure and atmospheric. You need an "absolute" pressures sensor because it's atmospheric pressure we are measuring.

SD card - you could potentially surface-mount your own SD card holder but that's pretty fiddly and I didn't have enough board area anyway. SD-card breakouts are cheap and easily available so I elected to solder one underneath the main board to be compact and easy. A lighter approach would be to solder wires to the pads of a micro-SD adaptor and use it as a socket for a micro-SD card.


Attached is now an additional .zip file. This contains version 1.1 of the board (Eagle schematic and board files, plus gerber files suitable for itead studio and major board-houses). The the following changes were made over v1:

LEDs on the Serial line pull up rather than down so should be on only when data transmitting.

Pull-up resistors now present on-board for i2c lines

Space for ultra-low dropout regulator on-board

Battery voltage now directly connected to V-test input. There is a track at bottom-middle you can cut if you don't want that.

I have not flown v1.1 of the board so there could be other errors or new problems with it. However, to the best of my knowledge this addresses the known issues of v1.


Step 3: Bootloading

Picture of Bootloading

In order to use the Arduino IDE reliably at 8MHz, you need to burn the "Arduino Pro Mini 8MHz" bootloader onto your ATMega328.

There are all sorts of ways of doing this, but I will assume here that you have a '328 based Arduino board (like an Uno, nano or Duemilanove). Using this you can bootload your '328 using either a dedicated "shield" or just a solderless breadboard.

Breadboard method:

1) Place your '328 in the centre of your breadboard. Run +5v and Gnd from your arduino to the power rails on your breadboard.

2) Run a 10K from pin 1 on the BB (reset) to +5v.

3) Fit a crystal (8 or 16MHz) and cap's (22pf) on pins 9 and 10 on the BB.

4) Join pins 7 and 20 (on the BB) to +5v and pins 8 and 22 to Gnd with jumper wires.

5) Jump from D11, D12 and D13 of the Ardu' to pins 17, 18, 19 on the breadboard.

6) Jump from D10 on the Ardu' to pin 1 on the BB.

7) Plug the Ardu' into your PC and burn the the Arduino ISP sketch onto your Ardu' from the Examples.

8) Put a 10uf capacitor from reset to Gnd on the Arduino (not the BB).

9) In the IDE, select "board" as Arduino Pro Mini 8MHz. Select the programmer as "Arduino ISP"

10) In the IDE click "burn bootloader".

11) The lights will flicker for a bit while the bootloader is transferred.

12) When it's finished, the D13 light on the Ardu should flash regularly. That's in parallel with D13 on the new chip and tells you the blink sketch, which is burned with the bootloader, is running on it.

Shield Method

I got fed up with laying out BBs the whole time so I made an small ISP shield. The picture is of mine but if you don't want to make your own then you can buy one from EMSL.

The procedure is very similar but reduces the setting up to one step:

1) Burn the Arduino ISP sketch onto the Arduino & un-plug it.

2) Put your '328 in the shield and the shield on the Arduino.

3) Plug in the Arduino and disable auto-reset (jumper or switch on the shield)

4) In the IDE, select "board" as Arduino Pro Mini 8MHz. Select the programmer as "Arduino ISP"

5) In the IDE click "burn bootloader".

6) The lights will flicker for a bit while the bootloader is transferred.

7) When it's finished, the D13 light on the Ardu should flash regularly. That's in parallel with D13 on the new chip and tells you the blink sketch, which is burned with the bootloader, is running on it.


Your '328 should now be ready to be programmed.

If you want to test it before soldering directly onto the board then you can lay it out as a breadboard Arduino as described above. Now, disconnect the Arduino from the Breadboard and connect up the CP2102 USB to TTL converter. That will go to +5v and Gnd, with Tx on the CP2102 going to D0 and Rx to D1. Some CP2102s are marked backwards so you may need to switch these two. Finally you need to add a reset switch between pin 1 and Gnd. You might also want an LED and resistor (say 1k) between pin 19 and Gnd.

To load a sketch, select Arduino Pro Mini 8MHz as the board and upload a sketch. Just when it finishes compiling and tells you the final size at the bottom of the IDE, press and release the reset button to start the upload. You should be able to upload the blick sketch and see the D13 LED flashing with a new timing.

You can burn the final sketch now if you want. It will save you connecting the CP2102 up to the tracker board. See a later step for the sketch.

Step 4: Put It Together..

Picture of Put It Together..

There are several options on this board - you can control the GPS by serial or using i2c, you can tie the "control" line of the radio direct to ground or you can control from the microcontroller etc.

The board is made so that you can put pin headers on the various options and change them around with jumpers. This is very useful in development. However, for the actual flight build, I wanted to hard-solder all of the jumpers to avoid anything losing contact in the harsh conditions of flight. This build therefore solders all of the jumpers but if you are developing your tracker you may well want to use jumpers until you know which option you want to use.

In general, I started from the centre and worked outwards for ease of soldering. The SD-card breakout needs to go on late because it covers a lot of the under-side and so prevents you from soldering on very much else once it's there.

There's a lot crammed into this board to make it small and cheap and light. That means it's not terribly suitable for a first soldering project. However, it's all through-hole so apart from being a little tight in places it's not at all difficult.


The pressure-sensor mounted above the board on the ends of its legs. This just allows it to be clipped off again if we wish. It's the most expensive component and you might want to use it on another project later.

The 1Ks for the status LEDs, the pullups for the DS18B20s, header for the external DS18B20 plus the crystal and caps. Nearly all resistors are vertical on this board to save space. Remember to use an 8MHz crystal!

The NTX decoupling cap, control line and voltage divider. The NTX changes frequency according to a voltage supplied on the control pin. To transmit RTTY 50 baud, we want a shift of around 500 Hz. I used 10K and 6K8. 1% resistors are a good plan here.

Microcontroller - make sure you bootload it first! If you haven't done that yet, go back to the last step and do it now! Then solder it in. Don't worry about direct soldering it, AVRs are hard as nails, but do get the notch at the right end - it'll be a pig to un-solder.

Internal DS18B20 and reset switch. Dead easy.

Header - all pins of the '328 are broken out but most of them you don't need. If you want to re-program it in place then you will need a 4-pin header for the Tx, Rx, Vcc and Gnd lines. Try to work out what other pins you might need and whether you want to access them from the top or side.

The voltage divider for battery sensing connects to A0 and senses against the 1v1 internal standard. You need to set the range according to the maximum your battery pack can provide because this input cannot go above 1v1 without risking damage (remember a 1.5v battery can be significantly higher when new). I used the arrangement: Batt-47K-A0-6.8K-Gnd which is safe to around 8.7v.

Now is a good time to add the status LEDs, smoothing cap and GPS jumpers. In the version of the board shown later the i2c pullups are properly on-board next to the pressure sensor. I forgot them on the first version so I added them on the underside, connected to the sda and scl jumper positions.

The NTX2 radio module slips in next, then have a good look over the board. I did not add all of the possible LEDs or headers. If you want any others, add them now because once the SD-card is in, it's going to get a whole lot harder to solder anything!

The SD card sits under the board with its header pins soldered in from the top. A foam sticky pad will keep the boards from shorting and hold it nicely while you solder it.

Finally, the GPS breakout board attaches to the edge on header pins. I used the full length of the pins to put the GPS physically above and to the side of the main board.

Step 5: Create a Sketch

Picture of Create a Sketch


My full sketch is available in the .zip file in the next step, however, it's useful to have an idea of the overall plan to make it easier to adapt.


We need to drive the radio by modulating pin D5 high/low at a rate of 50 baud. That is, every 20ms we need to represent a new bit of data as a high or low for a 1 or 0 respectively. We use this data stream to encode a text string. There are various methods for this, but 7-bit ASCII is most common. We'll keep a double-buffer containing the string for transmission and a copy that we are preparing with updated data.

In order to get the most efficient and reliable transmission and especially to give us accurate timing, we send the string under interrupt. This requires a short and fast piece of code simply to keep track of which bit of which byte of the string we are currently transmitting and move on to the next bit each time. When we finish one string we switch the string buffers, moving over to send the most up-to-date data from the other buffer.

Main Loop:

In the main loop, we circulate, reading each of the sensors and the GPS whenever they are ready. The latest values are stored in variables. When the GPS is ready to provide a new location, we read that, decode it and update the working copy of the string. We have to turn off interrupts briefly in order to update the buffer so that we don't end up transmitting a half-constructed string. As a result, we update the buffer only when a new GPS location is ready, so that we don't have interrupts off for too long.

Each time we switch buffers we set a flag telling the main loop that a new transmission is started. The old string that was just sent is then written to the SD card before opening the buffer up to being updated.

We also need to keep an eye on the GPS to make sure it stays in flight mode. The reason we use a Ublox GPS module is that it will operate up to the heights that we will be visiting - many GPSs don't operate above about 14km. In order to make the Ublox work at high altitude, we need to make sure it is in the right mode.

Sensors & ports:

The board can talk to the GPS module by either I2C or UART. I have elected to use the I2C interface so that I can use the UART for debugging by attaching to the PC serial port. We will also use the I2C to talk to the Honeywell pressure sensor, but the two seem to coexist on the I2C lines without conflict.

The board will take two DS18B20 temperature sensors. I used one internal and one external. These are very sensitive to timing and I needed to turn interrupts off for a few microseconds while reading them. They are otherwise very easy to use. I used a copy of the wire library that claimed to have fewer hangups than the native Arduino one. True or not, it worked fine.

The SD card sits on the SPI pins and is handled by the SDfat library. SD card writing takes a load of memory and one of the real tricks to this sketch was trying to monitor how much free SRAM was available.

Step 6: Burn the Sketch

Picture of Burn the Sketch

I have assumed that you will want to develop a sketch and so probably want to re-program the chip on the tracker board. If you already programmed it in step 3 and don't want to do any further development then you can skip this step.

The key thing to remember with this board is that it does not have an auto-reset so you will need to press "reset" at the right time to upload a sketch. This can take a few tries to master.


For this step, you will need a PC loaded with the Arduino software, your newly made tracker board and a CP2102 UART to USB converter.

Connect 3v3 (not 5v) from the CP2102 to Vcc on the tracker board. Connect the Gnds together.
Connect Rx on CP2102 to Tx on the tracker and Tx on the CP2102 to Rx on the tracker.*


My sketch is attached to this step. Because of the various libraries etc needed, I have attached it in the enclosed .zip file. This should contain everything that you need in addition to the normal Arduino environment.

The sketch was written in Arduino IDE v1.0.3. I have not tested it on any other version. It requires several Arduino libraries to help handle the GPS and SD card aspects. They are also in the .zip file. Place the various libraries in the libraries folder and then open the Arduino IDE. Now load the sketch.

There are two places in the sketch where I have written "Test1" as the callsign. You will want to replace that with your own callsign before you upload the sketch. Make it only a few characters because the sketch might over-run its text array otherwise.


To talk to the tracker board you will need to load the drivers for the CP2102 and select the new COM port in the Arduino environment. Now select the board as Arduino Pro Mini 8MHz. The 8MHz is important because you used an 8MHz crystal and so if you select a 16MHz board then your timings will all be off.

To load up the sketch, click "upload" and wait for it to compile. When the IDE displays the final compiled size, press and release the reset button on the tracker board. Lights should flicker for a while then the lights on the tracker board flash briefly as the sketch starts up.

Step 7: Using the Tracker

Picture of Using the Tracker

Now that you have built a High Altitude Balloon tracker, you have completed the hardest part of your own High Altitude Balloon launch. The next steps are to incorporate this into a payload, add a camera (or two), a parachute and a balloon and launch them into the stratosphere. These steps are discussed by the very helpful people at UKHAS (

Before you can get information back from your tracker, you will also need to set up a "payload" document on the High-Altitude Balloon tracking server. That can be done here:

Once you have a payload document set up, you can either fly your tracker on blind faith and hope someone will track it, or you can test it yourself. I recommend the latter.

To test your payload, you will need to set up for 70cm reception. The cheapest way is to use a "Software Defined Radio" dongle attached to a 16cm bit of wire as an antenna. These parts are available from e-bay for around £10 simply by searching for "SDR dongle. "The procedure for setting up an SDR tracker is described in great detail on the site here:

Once you have that set up and you are seeing your tracker on then your payload is are ready to launch and be tracked.

The process of incorporating your tracker into a payload, getting CAA clearance, announcing your launch and actually launching are all described at and it is worth popping by at for plenty of help and advice. However, with your tracker built, the rest of the process is comparatively straightforward.

Good luck with your High-Altitude Balloon! I hope I get to track it pretty soon!


Step 8: Send Your Instructables Contest Prize to the Edge of Space!

Picture of Send Your Instructables Contest Prize to the Edge of Space!

Is this the first Instructables Contest prize to reach the edge of space?

The purple duct tape that you see in this photo was a prize from the Jury-rig-it Contest last year ( ). It must have gone closer to space than any other Indestructibles Prize so far..

Have any previous Instructables Contest prizes reached 124,000 feet? I'd love to know if they have!

If you think more Instructables Contest prizes should leave the atmosphere then please feel free to vote for this entry!




ShepherdK (author)2017-07-10

Hi Ugi,

Do I need to get my radio license before I can use this in the USA? Also what dongle do you advise to track the payload? (preferably one that connects to a PC)

NadeemH2 (author)2017-06-04

Hi Ugi

Can I use XTend 900 radio ( to keep providing me GPS data even the balloon goes 34 - 37 km up & then it burst. I mean can i use this radio till 37 km height. What if I am not precisely pointing my antenna towards it. Will it still work ? Please help

Ugifer (author)NadeemH22017-06-05

That depends upon what you mean by "can you". Legally, to the best of my understanding, no you can't.

The rules on what radios can be used from amateur flying vehicles without a license in the UK are very strict. There is a limit of a few mW and a very narrow frequency band around 434MHz (IIRC) that you can use legally. The module you suggest does not match either of those limitations so as far as I know you cannot legally use that in an airborne module in the UK. However, don't be put off because you can only use low power.

You don't need to worry too much about the range. My transmitter was within the legal limits but because you have perfect line of sight and a distributed network of receivers, between us nearly every packet was received up to 38Km. Quite a few packets were received over in the Hague, which is 150+ miles away and a few were received at 250+ miles.

The map in one of the steps above shows the locations where that particular packet was received. You can see that it's reaching Leeds in the North West, the Hague to the E and out to Taunton in the SW. That's 150 miles in each of three directions.


NadeemH2 (author)2017-06-03

Hello Ugi

Can you please let me know from where you bought this balloon? Thank you

Ugifer (author)NadeemH22017-06-04

Hi Nadeem

This came from:

Good luck with your balloon project!


DrBoost (author)2016-08-18

Is this UK specific, or can this be used in the US as well?

pde25clicks (author)2016-04-09

Hi Ugi, I'm also part of the team sending a balloon 25km to celebrate the uni degree anniversary. We're currently trying to get the board and radio receiver talking and running into a few problems. The radio hears the board but when we try to send it to dl-fl digi to get read and parsed out issues arise. Do you see anything that immediately strikes you as out of place?

Thank you,


maureen-selinal (author)2016-03-21

Hi Ugi,

A few of us have been following you're great tutorial to build the tracker board. We are currently trying to upload the code but have gotten the following error message "avrdude: stk500_recv(): programmer is not responding

stk500_getsync() attempt 7 of 10: not in sync: resp=0x00"

Have you any suggestions on what the problem might be?

Kind regards,


Ugifer (author)maureen-selinal2016-03-21

HI Maureen

I am assuming that by
"code" you are burning the tracker sketch rather than the bootloader
(Step 6 rather than Step 3). In either case, can you give me some more
info' on how you are set up to program the chip? For example:

you programming it on the tracker board or elsewhere? If elsewhere,
how is it set up? If it's on a breadboard, can you post a picture of
the layout?

How are you powering it?

Do you know that the chip is running (e.g. do you see the blink sketch working when you apply power)?

What USB to TTL converter are you using? Do you know that it works? Are you confident that you selected the correct COM port?

version of Arduino are you using? Have you used that version of the
IDE successfully for burning sketches to "normal" arduino boards?

Have you burned an 8MHz bootloader to the chip? Do you know that worked?

Have you selected an appropriate target board corresponding to the bootloader that you burned?

Without a bunch more information, it could be any of a number of things but my top guesses would be:

You haven't selected a board that corresponds to the bootloader on the chip.

You are not pressing "reset" at the correct time when uploading the sketch.

Let me know as much as you can and I'll do what I can to trouble-shoot for you.


maureen-selinal made it! (author)Ugifer2016-03-21

Hi Ugi,

Thanks so much for your very quick reply! We are sending a balloon up 25km to celebrate the 25th anniversary of our uni degree programme, so your tutorial has been so helpful.

Yes, we are on step 6, uploading the sketch.

We skipped step 3 as we were advised by our tutor to buy preloaded chip. We are using bought ISP shield, chip is assembled on board, see attached picture.

Both red and blue LEDS light up when connected to laptop. I've tried uploading Arduino "blink" sketch and I get the same error.

I've just re-read your tutorial and see your warning that that pre-bootloaded chips expect a 16MHz crystal so I suspect this is the problem. In what way would we need to adjust the code if this is the problem?

Ugifer (author)maureen-selinal2016-03-21

OK - I'm pretty sure that will be the problem. When you hit reset the bootloader kicks in and tries to talk to the PC. Unfortunately, you have a 16MHz bootloader and (I assume) an 8MHz crystal. That means that it won't be working at the correct data-rate. I expect that it's possible to sort this out but it probably involves writing a new board definition, which I don't know how to do.

Luckily, you only have the chip in a socket. I would suggest that you whip out the chip and follow the instructions at step 3 for writing the 8MHz bootloader. It's really very easy and many many times easier than running a chip at half the speed it is expecting.


maureen-selinal (author)Ugifer2016-03-21

Thanks Ugi! Will give that go :)

Hi Ugi,

Our new chip arrived today so we have gone back to Step 3: Bootloading. We are using the breadboard method and are confident that we've wired it correctly and have selected the correct port. We've also successfully uploaded the ArduinoISP sketch to my Arduino UNO. However at no.10, when we "burn bootloader" we get the following error "avrdude: Error: Could not find USBtiny device (0x2341/0x49)". Would you have any idea of what the problem might be?

Ugifer (author)maureen-selinal2016-03-23

Sounds like you have "Tiny ISP" selected as the programmer rather than "Arduino ISP". Make sure you select the correct target board (Pro mini 8MHz IIRC) and the select Arduino ISP as the programmer from the IDE.


maureen-selinal (author)Ugifer2016-04-09

Thanks Ugi! We've been on spring break so have had a little break from the project. I definitely had the correct programmer selected before, I'm not sure if there was something up with the chip. I bought some new chips and everything uploaded perfectly this time!! Some of the group are testing out the circuit today with the radio receiver, they may have some questions about decoding the data we receive.


Ugifer (author)maureen-selinal2016-03-21

PS - you also get a 3-month pro membership for making a project based on one of mine - that's a record! Never given out two in a day before!

Keep us posted with how you get on with the code - the board is looking great so far.


maureen-selinal (author)Ugifer2016-03-23

Thanks Ugi!

Our new chip arrived today so we have gone back to Step 3: Bootloading. We are using the breadboard method and are confident that we've wired it correctly and have selected the correct port. We've also successfully uploaded the ArduinoISP sketch to my Arduino UNO. However at no.10, when we "burn bootloader" we get the following error "avrdude: Error: Could not find USBtiny device (0x2341/0x49)". Would you have any idea of what the problem might be?

criticalmass115 made it! (author)2016-03-24

Build complete (bar the pressure sensor, which may or may not follow). She's all ready for her sketch, which can wait for another day. This is the best instructable ever ☺

FYI: I bought a micro SD Card breakout and the pin configuration was different the the tracker board. Saved some weight using a smaller board, gained it all back with the green wiring needed to connect it ?

Damn it, I'm getting a "stk500_getsync(): not in sync: resp=0x00" as well :-( Going to try it on a linux machine.

Ugifer (author)criticalmass1152016-03-25

Are you remembering to press reset at the right moment? This board does not have auto-reset like the uno does.
Hope you work it out!

criticalmass115 (author)Ugifer2016-03-25

Well, I wait for the compilation to finish then press the reset button. Managed to get the code programmed by choosing a different programmer option. One of my LEDs now flashes away nicely. Tested it with a receiver and am getting what looks like RTTY, but seem to have a frequency shift of over 2kHz! I've checked the value of the resistors and they are what they're supposed to be so a bit of investigation is required.

Ugifer (author)criticalmass1152016-03-27

Glad to hear that it's transmitting. To be honest, if you're getting RTTY at 2KHz shift, you're a long way on your way to making a transmitter!

The NTX module now available is updated somewhat from the one I used, so you may well need to tweak the voltage divider. Consider making R9 larger - say around 4x larger - e.g. 39k or 43k. Hopefully you can get a nice clear transmission pretty easily from there.


Ugifer (author)Ugifer2016-03-27

PS make sure you have made the links marked sda and scl at the bottom edge of the board in order for the GPS to be able to communicate with the ATMega by i2c. I can't see from the pictures whether those are in.

Good luck!


criticalmass115 (author)Ugifer2016-03-28

Hi Ugi,

I now have adequate carrier shift (you're right, had to play around with the voltage divider (I'm guessing the reference voltage has changed in this version of the NTX). I'm getting a readable RTTY TX, but with no useful data:



CRCs complete ok but as you can see, I'm not even getting a valid callsign (should be DARWIN). I'm going to go through the code and see if I can work out what's going on, but in the meantime I'd appreciate any input from the master :-)

Many thanks,


*UPDATE* Turns out the sketch hadn't loaded properly, but seems to have now. How long did it normally take to get an initial lock on the GPS? I'm now getting my callsign though but still not getting any GPS coordinates or a valid time. It's either not getting a valid lock or there's no comms with the GPS card.



Ugifer (author)criticalmass1152016-03-28

Assuming that it's out of doors and can see the sky clearly, you should get a lock in a few minutes - I would expect within 5-10 mins at most. It's not like a phone that can use the internet to download up-to-date tables etc, so it does take a few minutes but should not be very long. As a guide, the flight data from the flight detailed in this 'ible took until string 60 to report a full GPS lock. That would be around 6 minutes. It should report time rather faster than that but will take a few mins.

You can always leave it in the garden & monitor the transmission until you get useful GPS data!

Your data looks good, in that the data string is all correctly formed. It's difficult to be certain whether you are successfully talking to the GPS. It would certainly be worth running it for a few minutes to see whether it picks up the time at least.

Post a string after it has sat for a while and I may be able to tell you whether it's communicating with the GPS correctly.



criticalmass115 (author)Ugifer2016-04-03

Hi Ugi,

Thanks for the continued support, much appreciated. I've been doing a bit of work investigating the problems on my board but I'm no closer to making it work.

1) I ran an I2C scanner on my 328 and got the following :
I2C device found at address 0x42 !
I've removed the other I2C devices and can confirm that this is the GPS card reporting.

2) The two temperature sensors don't seem to be reporting on the I2C at all.

3) There's no change in the output data on the RTTY, even after leaving the board outside for nearly an hour. Is the LED on D13 supposed to illuminate to report GPS lock? I'm sure I read that somewhere :-)

I'm at the point now where I'm considering ordering a new 328 and populating a new board, just to rule out and track damage etc. It's frustrating, but hopefully I'll get something that works eventually!



Ugifer (author)criticalmass1152016-04-03

Hi Steve

I wouldn't make another at the moment - it sounds about right.

0x42 is where the GPS should be so if that's answering then you have made a good start.

The temperature probes use Dallas 1-wire interface not i2c, so they won't show up on the port scan. The Honeywell is on i2c but you aren't using that anyway IIRC.

It's not D13, but one of the LEDs does report on a GPS lock, but that's assuming the '328 is receiving the data from the GPS correctly - it's if the GPS string reports a lock that you will that light, and if that did then the RTTY string would also be showing GPS data.

It sounds like the sketch is not talking to the GPS quite correctly. The Ublox on your board is v8 where mine was v6 so there might be subtle differences. Just checking: Did you use the Arduino version indicated in the 'ible and also add the libraries that were attached to the 'ible? There was a specific "wire" library that I used that might or might not make a difference and also a GPS parsing library.

I will have a look back over my development sketches and see if there is a basic sketch that you could use to validate the GPS and temperature sensors individually.

The other possible issue is timing - you did use an 8MHz crystal?

It's just that your board picture appears to show a crystal with "4.00" stamped on it - if you are running a 4MHz crystal then it's not surprising that the sketch is having trouble. However, I would not expect you to be able to load the code anyway if that was the case and you should be getting 25 baud rather than 50.



Ugifer (author)Ugifer2016-04-03


This was my first GPS test sketch - it should just request a GPS string from the UBLOX and write it to serial. Try it & see what you see.



// Test Ublox

#include <Wire.h>

#include <string.h>

int GPS=0x42;

void setup(){



Serial.println("Starting GPS");


void loop(){




Wire.requestFrom(GPS, 2);

int avail=(;

Serial.println(avail, DEC);


byte temp =;

Serial.println(temp, DEC);



//if (avail>99) avail=99;


unsigned long time = millis();


for (int i=0; i<avail; i++){



while (temp==255){









criticalmass115 (author)Ugifer2016-04-04

Hi again Ugi,

Pretty early on I realised I'd accidentally ordered a 4mhz xtal and changed it for an 8mhz one, so I can rule that out :-)

I'm using Arduino IDE 1.0.3, as per your 'ible recommendation. I have the 3 libraries you included in my 'libraries' folder and they are showing as 'contributed' libraries in the IDE.

I'm going to send the output of your uBlox test script via PM, because I'm happy to say that it includes my GPS location :-)

It looks like the GPS module is working, but as you correctly worked out, isn't interfacing with the sketch correctly. I'll continue to investigate :-)

One step closer to getting a balloon in the air.



criticalmass115 (author)2016-03-21

Starting the build :-) #veryexcited


Ugifer (author)criticalmass1152016-03-21

Nice Board! Which board-house did you use?

I'll send you a 3-month pro membership by PM - that's the standing award for making something based on one of my projects and posting a photo.

Just remember to bootload your chip before you solder it down to the board forever!

Keep us posted with developments - always great to see.


criticalmass115 (author)Ugifer2016-03-21

Hey Ugi. I used Cheap and cheerful but seems good enough for the job at hand. I actually bought a chip with the 8Mhz bootloader already installed. It was just another job I didn't have to do. This is the one I bought .

Thanks for the pro membership, much appreciated. I have no doubt that I will be in touch with more questions soon :-)



Ugifer (author)criticalmass1152016-03-21

Great - I didn't know you could buy 8MHz pre-bootloaded chips but the one you linked to looks ideal. I have heard of people using DirtyPCB with good results but never tried it myself yet. I'll have to do so some time.


criticalmass115 (author)2016-01-24

Hi Ugi,

I appreciate that this instructable is a couple of years old now, but I wondered if I could ask you a question about your board? You mention that some of the resistors need to be pull up rather than pull down. Can you confirm that only applies to LED 2 and LED 3 please? I'm about to get the board manufactured and want to make these changes before I do.

This is an amazing instructable by the way. I've wanted to send up a HAB for some time, but your tracker design as well as the explanation is what has given me the motivation to get started. Thank you for that.

I'm criticalmass on the IRC channel if you ever want to say hello.



Ugifer (author)criticalmass1152016-01-24

Hi Steve - thanks for your positive comments - always a pleasure to write these for people who will have a real interest.

As far as I recall, the only two issues that I identified with the board were the LEDs on the Serial Rx and Tx lines, which should run via a resistor to VCC rather than GND, plus the pullups on the i2c lines, which I forgot and had to bodge onto the back. As far as I remember, the Eagle files in this 'ible have those issues fixed but I don't have Eagle on this PC so I can't check just now.

Have a look - if you can't find those then send me another comment of PM and I'll upload some updated Eagle files - I did make corrected versions.

Good luck! Let me know when you get to launch - would love to track it!


Ugifer (author)Ugifer2016-01-27


If anyone wants Eagle files with the issues of the v1 board fixed, there is a v1.1 in a .zip file in Step 2 which addresses the known issues.


criticalmass115 (author)Ugifer2016-01-31

Ugi, you are a top bloke. Thank you :-)

moein (author)2015-06-06

what if it makes collision with airliners ?

Ugifer (author)moein2015-06-07

You can only fly in the UK if you get permission. That is only given form places and wind directions away from major air corridors. Your flight is also notified to airmen and the maximum weight is quite low.

If you did actually collide, what would happen is that your payload would be destroyed with very little chance of any damage to the aircraft.

hortod1 (author)Ugifer2015-07-05

As a commercial pilot I find this terrifying and the suggestion that it would cause little damage to the aircraft arrogant. What if it breaks off a pitot tube, or rosemount or AOA probe? That little tiny chunk of metal getting sucked into the turbine would destroy it. And at altitude that kind of engine damage could be catastrophic.

SteveR63 (author)hortod12016-01-11

Do you not read your NOTAMS?

Ugifer (author)hortod12015-07-05

I didn't say that the chance was zero - there is a very good reason that HAB launches need clearance and are made away from air traffic routes with careful consideration of wind direction etc. However, in the event of a collision, the overwhelmingly most likely event is that the line attaching the balloon to the payload will break (it's 30 meters long so it's by far the most likely to take a strike). The breaking strength is controlled to be less than 10kg (IIRC) so the payload would just fall and the balloon pop up like a cork from a bottle.

I don't dismiss the possibility of causing damage but there is a lot of sky and very little metal even in the payload, which is less than one cubic foot in size. It could happen, without question, but there are many things more likely to cause problems to an plane.

hortod1 (author)Ugifer2015-07-06

I really hope your big plan for safety isn't really the "big sky, little airplane" theory. If that method was so effective we wouldn't need TCAS, ADS-B, RVSM, not to mention ATC issuing traffic alerts and giving radar vectors to keep airplanes separated. Assuming everyone that reads this is going to head over to their local FSDO or CAA office to get permission to launch a 1 cubic foot box is just stupid; they won't. And while we train for emergencies, a metal box being injested into a motor or through the windscreen (likely killing both pilots) isn't one of them.

But have your fun and enjoy the pictures.

dad_a_monk (author)hortod12015-07-07

You are obviously going to find fault no matter what is said. If you are truly a commercial pilot, you would know that weather balloons are launched every day somewhere in the U.S. and I'm sure the UK. As he said many times, clearance is required. Just as with weather ballons, they can give you a launch window that puts it in the air when no traffic is in the area. The sky is not filled with aircraft. There are FAR more areas NOT in flight paths than are. He didn't say go launch ntext to an airport. Get over your self. I'm sure we are all impressed that you can fly a plane.

I haven't flown in a few years, since I became disabled, but getting my pilots license was one of the easiest things I have done in my life. It's not that ddifficult to fly, yes there are dangers out there when flying. However, I would in no way be concerned for this one. I got my license while in the Air Force and they launched weather ballons form a pad daily, M-F and still flew F-117a, F-4s, T-38 and German Tornados every day with no problems. We flew small aircraft at lower altitudes daily also, mainly Cessnas. Guess what..still no problem with the weather ballons. They just notified us when they were launching and we held take offs till it was clear. Not that hard.

spark master (author)hortod12015-07-06

whining whining whining, just don't crash into my house...chukle.

That same thinking could have saved the DOdo bird or stopped blloms of nasty water plants into other ecosystems causing untold milliions (billions?) of damage. Then ther is Monsanto's death corn, they apparently are allowed to own the maize plant genome, even if in the process it wipes away millions of years of evolution...

bah humbug I say,

However, as a person who lives near very busy airports this whole things asks the question HAVE WE LOST OUR MINDS?!

So sometimes the sky IS falling or maybe one day a plane FALLS OUT OF IT!


moein (author)Ugifer2015-07-05

and of course with no doubt the whole project is so great and amazing. if i got free time i really urge to experience such project as well.

moein (author)Ugifer2015-07-05

thank you . but i imagine if the jet engines of plane swallow it, a disaster would happen. no matter if its too small and lightweight.

the small birds in airports can kill any jet engine by sucking into it. i know the chance is very very small. but just asking.

NoseyNick (author)2015-09-06

Could you clarify - is this using Ham Radio APRS for the downlink, or is there some OTHER HAB tracking network?

About This Instructable




Bio: Call me Ugi. Special offer! Make something based on one of my instructables and post a picture for a free 3-month pro membership (while stocks ... More »
More by Ugifer:Handheld Pong & Invaders on the cheap (Arduino compatible)Kid's Science Project - Reusable Hand WarmersMake a High-Altitude Balloon Tracker (Arduino)
Add instructable to: