More Than a Hobby..

Arduino Morse Beacon

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 beaconhttp://www.electroschematics.com/wp-content/uploads/2016/05/RB-1-100x92.png 100w" sizes="(max-width: 391px) 100vw, 391px" style="box-sizing: border-box; vertical-align: middle; max-width: 100%; height: auto; margin: 15px auto; display: block; clear: both;">

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 (Dit e-mailadres wordt beveiligd tegen spambots. JavaScript dient ingeschakeld te zijn om het te bekijken.). 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.

  1. /*
  2. An Arduino Morse Beacon
  3. Adaptation of a work by Mark VandeWettering
  4. Prepared for www.electroschematics.com
  5. Authored & Tested by T.K.Hareendran
  6. */
  7. struct t_mtab {char c, pat;};
  8. struct t_mtab morsetab[]={
  9. {'.',106},
  10. {',',115},
  11. {'?',76},
  12. {'/',41},
  13. {'A',6},
  14. {'B',17},
  15. {'C',21},
  16. {'D',9},
  17. {'E',2},
  18. {'F',20},
  19. {'G',11},
  20. {'H',16},
  21. {'I',4},
  22. {'J',30},
  23. {'K',13},
  24. {'L',18},
  25. {'M',7},
  26. {'N',5},
  27. {'O',15},
  28. {'P',22},
  29. {'Q',27},
  30. {'R',10},
  31. {'S',8},
  32. {'T',3},
  33. {'U',12},
  34. {'V',24},
  35. {'W',14},
  36. {'X',25},
  37. {'Y',29},
  38. {'Z',19},
  39. {'1',62},
  40. {'2',60},
  41. {'3',56},
  42. {'4',48},
  43. {'5',32},
  44. {'6',33},
  45. {'7',35},
  46. {'8',39},
  47. {'9',47},
  48. {'0',63}
  49. };
  50. #define N_MORSE (sizeof(morsetab)/sizeof(morsetab[0]))
  51. #define SPEED (12)
  52. #define DOTLEN (1200/SPEED)
  53. #define DASHLEN (3*(1200/SPEED))
  54. intSIGpin=13;
  55. void
  56. dash()
  57. {
  58. digitalWrite(SIGpin, HIGH);
  59. delay(DASHLEN);
  60. digitalWrite(SIGpin, LOW);
  61. delay(DOTLEN);
  62. }
  63. void
  64. dit()
  65. {
  66. digitalWrite(SIGpin, HIGH);
  67. delay(DOTLEN);
  68. digitalWrite(SIGpin, LOW);
  69. delay(DOTLEN);
  70. }
  71. void
  72. send(char c)
  73. {
  74. int i ;
  75. if(c ==' '){
  76. Serial.print(c);
  77. delay(7*DOTLEN);
  78. return;
  79. }
  80. for(i=0; i<N_MORSE; i++){
  81. if(morsetab[i].c == c){
  82. unsignedchar p = morsetab[i].pat ;
  83. Serial.print(morsetab[i].c);
  84. while(p !=1){
  85. if(p &1)
  86. dash();
  87. else
  88. dit();
  89. p = p /2;
  90. }
  91. delay(2*DOTLEN);
  92. return;
  93. }
  94. }
  95. /* if we drop off the end, then we send a space */
  96. Serial.print("?");
  97. }
  98. void
  99. sendmsg(char*str)
  100. {
  101. while(*str)
  102. send(*str++);
  103. Serial.println("");
  104. }
  105. void setup(){
  106. pinMode(SIGpin, OUTPUT);// Signal Output Pin
  107. Serial.begin(9600);
  108. Serial.println("An Arduino Morse Beacon");
  109. Serial.println("www.electroschematics.com");
  110. Serial.println("");
  111. }
  112. void loop(){
  113. sendmsg("ESCOM BEACON");// Custom Message
  114. delay(3000);
  115. }
arduino seriala monitorhttp://www.electroschematics.com/wp-content/uploads/2016/05/RB-2-100x93.png 100w" sizes="(max-width: 397px) 100vw, 397px" style="box-sizing: border-box; border-style: none; vertical-align: middle; max-width: 100%; height: auto; padding: 0px; margin: 0px;">

(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 modehttp://www.electroschematics.com/wp-content/uploads/2016/05/RB-3-100x36.png 100w, http://www.electroschematics.com/wp-content/uploads/2016/05/RB-3-400x143.png 400w, http://www.electroschematics.com/wp-content/uploads/2016/05/RB-3-768x274.png 768w, http://www.electroschematics.com/wp-content/uploads/2016/05/RB-3.png 966w" sizes="(max-width: 550px) 100vw, 550px" style="box-sizing: border-box; vertical-align: middle; max-width: 100%; height: auto; margin: 15px auto; display: block; clear: both;">

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.