Building an FM Beacon

As some of you have heard, the House of Basu Howard continues research into building a space robot. The House motto, as you may recall, is “If you’re gonna build a robot, you should go the extra mile and put it into space.” Of course, more accurately, this would be 60 miles, but who’s counting?

We started our research and development work by attempting to build an RF radio beacon. The kids call this the “ground robot.” This is a project that, rather quickly, spun out of control. As near as I can tell, we should be able to hook up an oscillator to a wire and I’ve got a really crappy but functional transmitter. To that end, we got a handful of oscillators (MAX2606 and MAX2608, which will cover the 2m and 70cm bands, respectively) on their way. But to set the center frequency, we need to set an inductor between two of the pins. And for the MAX2606, it will need to be 190 nanohenries to set a center frequency around 145MHz. It seems just buying inductors is not as simple as buying other electronic parts.

Eventually I gave up on this approach and purchased an RFM22 and slapped it onto an Arduino Uno. It doesn’t drop down to 2m, but it is has a good range from 240MHz through to 980MHz, and that covers 70cm. And we could even turn it on. All we had left to do was generate meaningful data. The RFM22 is really meant to transfer digital data. It can run OOK, FSK, and GFSK. These are all digital modes.

We wanted something a touch more tangible. We wanted to hear Morse code coming out of the radio. But the RFM22 doesn’t support non-digital modes. Morse is a type of OOK, but the OOK modes provided are all digital-only. But the documentation supports one more mode, the unmodulated carrier. This is a simple pure sine wave. And a simple pure sine wave is the core of Morse code transmissions. It’s so core, Morse is often just called “CW,” short of “carrier wave.”

But a pure CW wave is silent. The squelch on the receiving radio opens, but there’s nothing there, like if you picked up a dead line on a phone. Modern radio receivers, generally, support monochannel FM, on 70cm. And FM radio is really easy. Let’s assume you want to broadcast at 102.7. That’s 102.7MHz or 102,700,000 hertz. If you want to send the tone 440 Hz, middle A, you encode the signal by broadcasting at 102,700,000 + 440 Hz. It’s an analog form of frequency-shift keying.

We can do that too, by changing the frequency of the transmitter. We broadcast 100mW at 432.330Mhz with a shift of 300Hz (after trying several different options, we decided this sounded good). The radio is controlled using the RadioHead library and Morse generated using the Morse library for Arduino (which, because it is C++, even though it is designed for running an LED, can be extended to controlling a radio).1 I have made the code available via GitHub. You can hear it in this video.

The Morse code string sent is “K3JPH/B Bronze Olive.” K3JPH is my callsign issued by the FCC. The /B is a traditional callsign appendix for beacons. “Bronze Olive” was created by an Internet code name generator. Version numbers suck and this is what came out. It’s no Castle Bravo, but it will do.

Our next steps are to shrink the package. Using standard Arduino components, we can scale down the weight. The lower we go, the higher we can go. Also, we need to get more power into this. Limiting ourselves to 100mW on 70cm means our signal does not carry very far. By next spring, I’d like to have a balloon test ready with a smaller mass footprint, more power, and solar cells to feed the whole thing.

In the mean time, I’d like to remind you the space robots are here to protect you from the terrible secret of space:

  1. Class-based inheritance: good programming practice, bad social policy.