Archives par mot-clé : balise

Balise CW à base de micro-contrôleur Arduino

Ca fait un petit moment que je pensais écrire une suite à l’article de vulgarisation autour de la platine Arduino que j’avais fait pour Radioamateur Magazine. Je ne présente plus le concept Arduino si ce n’est en disant que c’est une plateforme complète (matériel, IDE, librairies…) qui permet de développer simplement et rapidement des circuit autour de micro-contrôleurs Atmel MegaAVR.

Balise CW à partir d'une platine Arduino Nano (http://capheda NULL.files NULL.wordpress NULL.com/2011/06/100_3005 NULL.jpg)Je voulais montrer une application simple de l’usage d’un micro-contrôlleur dans le cadre d’une activité radioamateur. Sans partir dans l’accès à des circuits externes comme un écran LCD qui tout en restant simple alourdissent le code et limite la compréhension pour le débutant, il restait peu de possibilités pratiques : un manipulateur Iambic ou une balise CW. Finalement c’est sur le deuxième projet que je me suis reporté sur le deuxième car j’avais un besoin propre pour des essais de propagation sur 80m et 40m que je veux faire en automne.

En avant-première voici le code (très simple) et une photo du montage. A noter que pour le codage de l’alphabet Morse je me suis inspiré du code fait par Hans G0UPL et Steve G0XAR pour le contrôleur de la balise QRSS (http://www NULL.hanssummers NULL.com/qrsskeyer NULL.html). C’est de loin le plus élégant et le plus efficace que j’ai vu. Une description complète et didactique accompagnée d’un code dûment commenté suivra dans un prochain numéro de Radioamateur Magazine dès que j’aurai eu le temps d’écrire un article au propre…

// Balise CW Arduino
// Vitesse variable par potentiomètre entrée A0, commande transistor pin D12 et LED pin D13
// 29/06/2011 par Yannick DEVOS XV4Y
// Codage de l'alphabet par Hans Summers G0UPL et Stephen Farthing G0XAR

// Définition de l'alphabet sous forme binaire
// 0 = dot, 1 = dash
const int A	=	0b11111001;
const int B	=	0b11101000;
const int C	=	0b11101010;
const int D	=	0b11110100;
const int E	=	0b11111100;
const int F	=	0b11100010;
const int G	=	0b11110110;
const int H	=	0b11100000;
const int I	=	0b11111000;
const int J	=	0b11100111;
const int K	=	0b11110101;
const int L	=	0b11100100;
const int M	=	0b11111011;
const int N	=	0b11111010;
const int O	=	0b11110111;
const int P	=	0b11100110;
const int Q	=	0b11101101;
const int R	=	0b11110010;
const int S	=	0b11110000;
const int T	=	0b11111101;
const int U	=	0b11110001;
const int V	=	0b11100001;
const int W	=	0b11110011;
const int X	=	0b11101001;
const int Y	=	0b11101011;
const int Z	=	0b11101100;
const int _SPC	=       0b11101111;
const int _0	=	0b11011111;
const int _1	=	0b11001111;
const int _2	=	0b11000111;
const int _3	=	0b11000011;
const int _4	=	0b11000001;
const int _5	=	0b11000000;
const int _6	=	0b11010000;
const int _7	=	0b11011000;
const int _8	=	0b11011100;
const int _9	=	0b11011110;
const int _BRK	 =      0b11010010;
const int _WAIT  =	0b10000000;

// Format du message : 1er nombre = longueur, Caractères utilisent les constantes pour une équivalence binaire
const int msg[] = {26, X, V, _4, Y, _BRK, B, _SPC, X, V, _4, Y, _BRK, B, _SPC, _1, _0, W, _SPC, P, S, E, _SPC, R, P, T, _WAIT};

const long intervalle = 60000; // (60 secondes ou 1 minute entre chaque transmission)

// Déclaration et initilisation des variables
byte msgIndex = 1;
byte inc_bit = 8;
byte character = _SPC;
boolean start = false;

int vitesse = 100;

byte key = 0;
byte etat = 0;
long dern_trans = 0;
long maintenant = 0;

void setup()  { 
  // on declare les pattes 12 (transistor) & 13 (LED intégrée) comme sorties
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
} 

void loop()  { 

  msgIndex = 1;

  while (msgIndex < msg[0]+1) {
    vitesse = 50 + round(analogRead(A0)/8);

    character = msg[msgIndex];

    inc_bit = 8;

    if (character == _SPC) {
        delay (9*vitesse); //
        inc_bit = 0;
    }
    if (character == _WAIT) {
        while (maintenant < (dern_trans + intervalle)) {
          maintenant = millis();
          delay (100);
        };
        dern_trans = millis();
        inc_bit = 0;
    }

    while (inc_bit) {

      etat = bitRead(character,inc_bit-1);

      if (start) {
        if (etat)
          key=3;
        else
          key=1;

        while (key) {
          digitalWrite(12, HIGH);
          digitalWrite(13, HIGH);
          delay (vitesse);
          key--;
        }

        digitalWrite(12, LOW);
        digitalWrite(13, LOW);
        delay (vitesse);
      }

      if (!etat && !start) start=true;

      inc_bit--;

    }
    delay (2*vitesse);

    start = false;
    msgIndex++;

  }

}

Kit balise QRSS

Je viens de recevoir un kit simple et rapide à réaliser. Il a été conçu par QRP Labs, groupe plus connu sous les personnes de Hans G0UPL et Steve G0XAR. Ce kit avait déjà reçu un très grand succès quant il avait été distribué aux salons de Dayton puis Friedrichaven. Plusieurs centaines de kit programmés sur place s’étaient écoulé comme des petits pains. La qualité du kit et le prix très contenu (moins de 15€ port compris) n’y sont pas étrangers.

Composants et notice du kit balise QRSS de G0UPL et G0XAR (http://capheda NULL.files NULL.wordpress NULL.com/2010/08/100_2518 NULL.jpg)Ce kit balise QRSS (QRSS QRP beacon kit (http://www NULL.hanssummers NULL.com/qrsskit NULL.html)) est composé d’une trentaine de composants. C’est un oscillateur à quartz, suivi d’un étage buffer et d’un amplificateur de puissance à FET. Il peut sortir environ 100mW pour travailler dans de bonnes conditions. L’oscillateur est modulé en fréquence par un micro-contrôlleur programmé par les auteurs du kit. Le micro-contrôlleur transmet un signal QRSS DFCW à 5 Hertz avec une longueur de point programmable (de 1 à 20s, ou CW 6 ou 12 mots par minutes). A l’achat, une fréquence sur 3,5 MHz, 7 MHz ou 10,140 MHz peut être choisie. J’ai préféré la bande des 30 mètres (10,100-10,150 MHz) car du point de vue étude de la propagation c’est celle qui offre le plus de curiosités. Elle offre une excellente couverture en tant que bande de nuit mais aussi une propagation de jour pas négligeable.

Je vous en dirai plus quand le kit sera monté et opérationnel…