Archives par mot-clé : beacon

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++;

  }

}

100mW pour 8700km (13750km en fait!)

J’ai fini ma balise QRSS 30m (http://capheda NULL.wordpress NULL.com/2010/08/16/kit-balise-qrss/) il y a quelques jours. Le temps de la tester, de la mettre dans une boîte pour améliorer sa stabilité et de peaufiner les réglages et j’ai pu la mettre en émission les trois dernières nuits. Pour mémoire, la transmission se fait en QRSS6 (durée des points de 6 secondes) sur 10,140 045 MHz et le shift est de 4Hz.

Apres deux nuits de mauvaise propagation et des problèmes de batterie, hier 12 octobre, Peter de ZL2IK (http://www NULL.qrz NULL.com/db/zl2ik)XV4TUJ reçu par ZL2IK (http://capheda NULL.files NULL.wordpress NULL.com/2010/10/argo56 NULL.jpg) a enfin reçu mon signal à 8771km de chez moi. Oh ce n’est pas un exploit, d’autres ont fait mieux avec moins de puissance encore! Toutefois, mes antennes n’étant pas du tout taillée pour cette bande j’en suis fier tout de même. A côté vous verrez la copie d’écran de son récepteur.

Stephen de HS0ZHB (NM7J) qui dispose de la même balise que moi m’a informé d’une bonne surprise. Il a découvert que tout deux nous avions été reçu par le grabber “Big EARS” en Nouvelle Ecosse, Canada. Ca fait quand même une distance de 13751km, un bout de chemin pour nos quelques 100mW.

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…