3,900 Mile Radio Transmission

This project was a prototype replacement for the transmitter on my long distance pico balloons (link).


The pico balloon flight computer uses APRS which:

  • Takes 5 seconds for each location transmission
  • Has a range of 150 miles


The duration is good.  Short messages use less battery than long ones.

The range is bad, it’s too short.  When the balloon goes over the Atlantic Ocean, all the receiving towers are out of range.


I wanted to prototype a WSPR transmitter which:

  • Takes 120 seconds for each location transmission
  • Has inter-continental range potential, which I set out to test
    • (thousands of miles)


To try this I designed a new flight computer with some different technologies and new software.


Very successful test, I was able to send a wireless message to Germany from NJ (3,900 miles).

Many other locations as well.


Like other posts, I won’t be diving deep into the technicals, just giving a broad overview.

You can see a more detail on a page about the launch itself here (link).






GPS and Clock Sync

SI5351 Clock Generator used as Radio Transmitter






Research and Build

The effort was primarily the following areas:

  • PCB Fab
  • Working with a different radio module
  • Learning WSPR protocol
  • Antenna construction and launch difficulties



A re-design of the flight computer, now incorporating a different method of RF transmissions.

I challenged myself to get even smaller than my prior tracker and I succeeded at bringing in the dimensions and reduced the weight.


Working with a different radio module

I needed a radio module which could work at a frequency of ~14 MHz, as opposed to my other ~144MHz transmitter.

To achieve that, I exploited some properties of a clock signal generator chip (the SI5351 Clock Gen).


  • You can tell the clock gen chip to emit a square wave at a given frequency
  • All changes in voltage/current emit RF, including this clock generator


So I can use the unintended RF radiation from the clock generator to act as an RF module.


The work to confirm the clock gen would succeed at acting as an RF module was the major success here.

Communicating with and controlling the clock gen wasn’t super hard.


Learning WSPR protocol

This was a challenging area.

WSPR is designed around:

  • An expectation that long distances will be attempted
  • An expectation of failures of individual bits of messages, but maybe not all of it
  • Long transmission duration allows longer bit durations


You get 50 bits of data per message.

Each message takes 2 minutes to transmit.

Messages can only be sent starting on even-minute clock times (eg 12:02, 12:04, etc)

Uses Forward Error Correction (FEC) to deal with lost bits.

Very narrow frequency bands between the 4 FSK (< 2 Hz spacing)


Accurate time sync was possible by using the GPS module already known to me.

Getting a clear picture of the WSPR message format wasn’t too bad, but the encoding was particularly difficult to understand and get implemented.  (I wound up taking several libraries apart and fashioning a hardened working low-memory high-speed interface).


Antenna construction and launch difficulties

WSPR is transmitted on 20-meter wavelength (14,097,200 Hz)

This results in a half-wave dipole antenna length: 33ft!  That’s very long!


Since I’m launching a balloon to carry all of this, I had to dangle 33 ft of wire and flight computer beneath it.  Here is what that looks like:


That long length of wire for the dipole antenna presented practical problems like

  • How to let the balloon rise without too much tension on the antenna wire
  • How to prevent all the wire from getting knotted up during launch


My idea was to roll the length of wire up in paper, preventing kinks and coiling, and also unrolling easily when the balloon is rising.  It kind-of worked!




Main file here (link)

Supporting libraries under here (link)




You can see a more detail on a page about the launch itself here (link)