Se encuentra funcionando en forma experimental una pequeña radiobaliza QRP que emite un mensaje en CW cada 5 minutos aproximadamente en la frecuencia 144.055Mhz. Los reportes son bienvenidos lu6fpj@gmail.com o vía twitter en @lu6fpj.
Adjunto el circuito para quien le interese:
Para quien no posea el módulo DRA818 se puede mediante una pequeña y sencilla modificación, hacer funcionar la radiobaliza con un handy. (Por ejemplo Yaesu FT23r)
Circuito para conexión con handy Yaesu FT-23r
El código fuente para usar con el módulo DRA818:
#include <stdio.h>
#include <SoftwareSerial.h>
#include "DRA818.h"
#define PD 10
#define RX 0
#define TX 1
// Establecer parámetros para el DRA818V
int bw = 1; // ancho de banda en KHz (0 = 12.5KHz or 1 = 25KHz)
float ftx = 144.0550; // Frecuencia de TX en MHz (134.0000 - 174.0000)
float frx = 144.0550; // Frecuencia de RX en MHz (134.0000 - 174.0000)
String tx_ctcss = "0000"; // Frecuencia de Subtonos CTCSS en TX (0000 - 0038); 0000 = "Sin CTCSS"
String rx_ctcss = "0000"; // Frecuencia de Subtonos CTCSS en RX (0000 - 0038); 0000 = "Sin CTCSS"
int squ = 5; // Nivel del squelch (0-8); 0 = "Abierto, sin squelch"
int pinPTT = 4; // Pin para PTT
int MorseLEDPin = 13; // Led
int MorseTonePin = 5; // Pin de audio
int MorseToneFreq = 1000; // Frecuencia del tono
int MorseWPM = 20; // Velocidad (Palabras Por Minuto)
#define strBeacondID " VVV VVV RADIOBALIZA LU6FPJ FF97QA " // Mensaje que va a emitir la baliza
char* MorseCodeCharacters[] = {
"A", ".-",
"B","-...",
"C","-.-.",
"D","-..",
"E",".",
"F","..-.",
"G","--.",
"H","....",
"I","..",
"J",".---",
"K","-.-",
"L",".-..",
"M","--",
"N","-.",
"O","---",
"P",".--.",
"Q","--.-",
"R",".-.",
"S","...",
"T","-",
"U","..-",
"V","...-",
"W",".--",
"X","-..-",
"Y","-.--",
"Z","--..",
"0","-----",
"1",".----",
"2","..---",
"3","...--",
"4","....-",
"5",".....",
"6","-....",
"7","--...",
"8","---..",
"9","----.",
"/","-..-.",
"*","-.-.-",
".",".-.-.",
"&","...-.-",
" "," "
};
// ----------------------------------------------------------------------------------------
void setup() {
Serial.begin(9600);
pinMode(pinPTT, OUTPUT);
pinMode(MorseLEDPin, OUTPUT);
pinMode(MorseTonePin, OUTPUT);
Serial.println(" Morse "); Serial.println();
}
void TransmitMorse(String MorseString, int MorseWPM,int MorseToneFreq) {
delay (10);
Serial.print ( "AT+DMOSETGROUP="); // comenzar mensaje
Serial.print (bw);
Serial.print ( ",");
Serial.print (ftx,4);
Serial.print ( ",");
Serial.print (frx,4);
Serial.print ( ",");
Serial.print (tx_ctcss);
Serial.print ( ",");
Serial.print (squ);
Serial.print ( ",");
Serial.println (rx_ctcss);// siempre finalice el comando con una nueva línea "println"
delay (10);
Serial.print("Mensaje: ");
Serial.println(MorseString);
int CWdot = 1200 / MorseWPM;
int CWdash = (1200 / MorseWPM)*3;
int istr;
for (istr=0; istr < MorseString.length(); istr++) {
String currentchar = MorseString.substring(istr,istr+1);
int ichar = 0;
while(ichar < sizeof(MorseCodeCharacters)) {
String currentletter = MorseCodeCharacters[ichar];
String currentcode = MorseCodeCharacters[ichar+1];
if (currentletter.equalsIgnoreCase(currentchar)) {
int icp=0;
for (icp=0;icp < currentcode.length(); icp++) {
if (currentcode.substring(icp,icp+1).equalsIgnoreCase(".")) {
digitalWrite(MorseLEDPin, HIGH);
tone(MorseTonePin, MorseToneFreq);
delay(CWdot);
digitalWrite(MorseLEDPin, LOW);
noTone(MorseTonePin);
delay(CWdot);
}
else if (currentcode.substring(icp,icp+1).equalsIgnoreCase("-")) {
digitalWrite(MorseLEDPin, HIGH);
tone(MorseTonePin, MorseToneFreq);
delay(CWdash);
digitalWrite(MorseLEDPin, LOW);
noTone(MorseTonePin);
delay(CWdot);
}
else if (currentcode.substring(icp,icp+1).equalsIgnoreCase(" ")) {
delay(CWdot*3);
};
}
}
ichar=ichar+2;
}
delay(CWdot*3);
}
delay(CWdot*7);
}
void loop() {
digitalWrite(pinPTT, LOW);
TransmitMorse(strBeacondID, MorseWPM, MorseToneFreq);
digitalWrite(pinPTT, HIGH);
delay(300000); // Tiempo en milisegundos (1000 milisegundos = 1 Segundo) cada cuanto va a emitir el mensaje la radiobaliza
}
Código fuente para usar con handy Yaesu FT-23r:
// Radiobaliza
int pinPTT = 4; //Pin arduino para activar PTT
int MorseLEDPin = 13; //Pin arduino led
int MorseTonoPin = 5; //Pin arduino tono
int MorseTonoFrec = 1000; //Pin arduino frecuencia en HZ del tono
int MorsePPM = 16; //Pin arduino cantidad de palabras por minuto PPM
#define BalizaID " CQ CQ CQ BALIZA " //Mensaje que emite la baliza
char* AlfabetoMorse[] = {
"A", ".-",
"B","-...",
"C","-.-.",
"D","-..",
"E",".",
"F","..-.",
"G","--.",
"H","....",
"I","..",
"J",".---",
"K","-.-",
"L",".-..",
"M","--",
"N","-.",
"O","---",
"P",".--.",
"Q","--.-",
"R",".-.",
"S","...",
"T","-",
"U","..-",
"V","...-",
"W",".--",
"X","-..-",
"Y","-.--",
"Z","--..",
"0","-----",
"1",".----",
"2","..---",
"3","...--",
"4","....-",
"5",".....",
"6","-....",
"7","--...",
"8","---..",
"9","----.",
"/","-..-.",
"*","-.-.-",
".",".-.-.",
"&","...-.-",
" "," "
};
// ------------------------------
void setup() {
Serial.begin(9600);
pinMode(pinPTT, OUTPUT);
pinMode(MorseLEDPin, OUTPUT);
pinMode(MorseTonoPin, OUTPUT);
Serial.println(" Morse "); Serial.println();
}
void TransmitMorse(String CadenaMorse, int MorsePPM,int MorseTonoFrec) {
Serial.print("Mensaje: ");
Serial.println(CadenaMorse);
int CWpuntito = 1200 / MorsePPM;
int CWrayita = (1200 / MorsePPM)*3;
int istr;
for (istr=0; istr < CadenaMorse.length(); istr++) {
String currentchar = CadenaMorse.substring(istr,
int ichar = 0;
while(ichar < sizeof(AlfabetoMorse)) {
String currentletter = AlfabetoMorse[ichar];
String currentcode = AlfabetoMorse[ichar+1];
if (currentletter.
int icp=0;
for (icp=0;icp < currentcode.length(); icp++) {
if (currentcode.substring(icp,
digitalWrite(MorseLEDPin, HIGH);
tone(MorseTonoPin, MorseTonoFrec);
delay(CWpuntito);
digitalWrite(MorseLEDPin, LOW);
noTone(MorseTonoPin);
delay(CWpuntito);
}
else if (currentcode.substring(icp,
digitalWrite(MorseLEDPin, HIGH);
tone(MorseTonoPin, MorseTonoFrec);
delay(CWrayita);
digitalWrite(MorseLEDPin, LOW);
noTone(MorseTonoPin);
delay(CWpuntito);
}
else if (currentcode.substring(icp,
delay(CWpuntito*3);
};
}
}
ichar=ichar+2;
}
delay(CWpuntito*3);
}
delay(CWpuntito*7);
}
void loop() {
digitalWrite(pinPTT, HIGH);
TransmitMorse(BalizaID, MorsePPM, MorseTonoFrec);
digitalWrite(pinPTT, LOW);
delay(12000); //Tiempo de espera de baliza para volver a transmitir en milisegundos
}








