RSS
Mostrando entradas con la etiqueta radiobeacon. Mostrar todas las entradas
Mostrando entradas con la etiqueta radiobeacon. Mostrar todas las entradas

Radiobaliza Arduino Nano - m贸dulo DRA818V

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,istr+1);
    int ichar = 0;
    while(ichar < sizeof(AlfabetoMorse)) {
      String currentletter = AlfabetoMorse[ichar];  
      String currentcode = AlfabetoMorse[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(MorseTonoPin, MorseTonoFrec);
            delay(CWpuntito);
            digitalWrite(MorseLEDPin, LOW);
            noTone(MorseTonoPin);
            delay(CWpuntito);
          }
         
          else if (currentcode.substring(icp,icp+1).equalsIgnoreCase("-")) {
            digitalWrite(MorseLEDPin, HIGH);
            tone(MorseTonoPin, MorseTonoFrec);
            delay(CWrayita);
            digitalWrite(MorseLEDPin, LOW);
            noTone(MorseTonoPin);
            delay(CWpuntito);
          }
          else if (currentcode.substring(icp,icp+1).equalsIgnoreCase(" ")) {
            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
}


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS