Build Your Own Radio Beacons

A radio beacon is a wireless device that marks a fixed location and allows direction-finding equipment to locate it. It transmits a continuous or periodic radio signal with limited information content — for example, its identification or location — on a specified radio frequency, which is picked up by direction-finding systems on ships, aircraft, and vehicles to determine the location of the device. Occasionally, the beacon function is combined with some other transmission, like telemetry data or meteorological information.

Last summer, I fabricated a radio beacon with the help of some extra components in my junk box. I couldn’t find the schematic drawing/breadboard, so I went ahead and started an advanced design. Now I am waiting for some components from abroad to show up for my prototype; in the meantime, I wanted to share some of my ideas on radio beacons.

The 555 RF Beacon

The RF beacon transmitter presented here is by no means new and has been covered many times, but by using only a 555 timer chip and some other basic components, it keeps the finished circuit small and simple. It’s basically a short-range LW transmitter (an empty-carrier beacon oscillator) with a small wire antenna. Components R1, R2, and C1 control the output frequency of this battery-powered oscillator.

555 radio beacon

555 datasheet

You can find the transmission of this beacon by tuning a nearby radio to about 230 KHz. Note that, since this beacon lacks the support of an RF output amplifier, its output is limited to a very short distance (5–15 feet). Fortunately, the addition of even a simple RF output amplifier will greatly increase the range of the beacon. You can also mix a tone generator to modulate the carrier so you have a good chance of finding the beacon signal than if you only transmitted an empty carrier.

An Arduino Morse Beacon

The Arduino Morse Beacon project discussed below, while useful, is simply a trivial Morse code generator that delivers the pre-defined beacon message through the Arduino’s D13 output. The sketch below (with built-in Morse table) is actually an adaptation of a noteworthy open-source work by Mark VandeWettering ( It simply puts a logic-high state (H) on D13 output whenever the keydown should occur and a logic-low state (L) when it is released.

  /*  An Arduino Morse Beacon  Adaptation of a work  by Mark VandeWettering   Prepared for  Authored & Tested by T.K.Hareendran  */      struct t_mtab { char c, pat; } ;    struct t_mtab morsetab[ ] = {    	{'.', 106},  	{',', 115},  	{'?', 76},  	{'/', 41},  	{'A', 6},  	{'B', 17},  	{'C', 21},  	{'D', 9},  	{'E', 2},  	{'F', 20},  	{'G', 11},  	{'H', 16},  	{'I', 4},  	{'J', 30},  	{'K', 13},  	{'L', 18},  	{'M', 7},  	{'N', 5},  	{'O', 15},  	{'P', 22},  	{'Q', 27},  	{'R', 10},  	{'S', 8},  	{'T', 3},  	{'U', 12},  	{'V', 24},  	{'W', 14},  	{'X', 25},  	{'Y', 29},  	{'Z', 19},  	{'1', 62},  	{'2', 60},  	{'3', 56},  	{'4', 48},  	{'5', 32},  	{'6', 33},  	{'7', 35},  	{'8', 39},  	{'9', 47},  	{'0', 63}  } ;    #define N_MORSE  (sizeof(morsetab)/sizeof(morsetab[0]))    #define SPEED  (12)  #define DOTLEN  (1200/SPEED)  #define DASHLEN  (3*(1200/SPEED))    int SIGpin = 13 ;    void  dash()  {    digitalWrite(SIGpin, HIGH) ;    delay(DASHLEN);    digitalWrite(SIGpin, LOW) ;    delay(DOTLEN) ;  }    void  dit()  {    digitalWrite(SIGpin, HIGH) ;    delay(DOTLEN);    digitalWrite(SIGpin, LOW) ;    delay(DOTLEN);  }    void  send(char c)  {    int i ;    if (c == ' ') {      Serial.print(c) ;      delay(7*DOTLEN) ;      return ;    }    for (i=0; i<N_MORSE; i++) {      if (morsetab[i].c == c) {        unsigned char p = morsetab[i].pat ;        Serial.print(morsetab[i].c) ;          while (p != 1) {            if (p & 1)              dash() ;            else              dit() ;            p = p / 2 ;        }        delay(2*DOTLEN) ;        return ;      }    }    /* if we drop off the end, then we send a space */    Serial.print("?") ;  }    void  sendmsg(char *str)  {    while (*str)      send(*str++) ;    Serial.println("");  }    void setup() {    pinMode(SIGpin, OUTPUT) ; // Signal Output Pin    Serial.begin(9600) ;    Serial.println("An Arduino Morse Beacon") ;    Serial.println("") ;    Serial.println("") ;  }    void loop() {    sendmsg("ESCOM BEACON") ; // Custom Message    delay(3000) ;  }  
download the arduino sketch arduino seriala monitor

(Arduino Serial Monitor)

If you are an adept radio hobbyist, it’s easy to interface the beacon signal output with your rig (through a simple switching circuit) for keying the rig in CW mode. The schematic of the add-on hardware (keying circuitry tested by me) is also included here.

arduino CW mode

The keying circuit is just a small reed relay (RL1) driven by an ordinary NPN transistor (T1) in tune with the input pulse(s) received from D13 output of the Arduino. Since an isolated electromagnetic relay is used, this basic design can be used for CW operation with almost all CW transmitters (high-voltage or low-voltage). Just connect the relay contacts (CW_SW) to the Morse code key (key) input terminals of your existing transmitter, as shown in the wiring diagram.

Dreams & Beacons

This article is only an introduction to radio beacons, filled with some snippets of my experiment-in-progress. While browsing for electronics on eBay, I came across an inexpensive DDS module being sold and shipped by an international eBay seller (and, unfortunately, not yet easily available in eBay India). The module is based on AD9850 — a CMOS, 125-MHz complete DDS synthesizer. The module is, in fact, a highly integrated device that uses advanced DDS technology coupled with an internal high-speed, high-performance D/A converter and comparator to form a complete digitally programmable frequency synthesizer. We only need to connect the power and control signals to exploit this module.

AD9850  DDS module

I will attempt to cover creating a unique, full-fledged, microcontroller-based HF beacon project (based on this module) in my next installment.