Arduino : initiation à l’usage des radioamateurs. 8ème partie.
Enfin, voilà le récepteur VHF évolutif
Nous allons commencer par un récepteur VHF « minimaliste ! » pour nous familiariser avec la programmation en langage C de l’Arduino et les commandes à envoyer vers le SA818.
Il évoluera jusqu’à devenir un Emetteur/Récepteur capable de scanner une bande de fréquences, ou une liste de fréquences.
VERSION1 : Récepteur VHF couvrant de 134 à 174 MHz au pas de 12.5 KHz et utilisant 2 boutons poussoirs (1 = Descente, 2 = Montée en fréquence de 12.5KHz).
(Pour le câblage de l’Arduino et de l’afficheur voir les précédentes descriptions).

Tout est là …. les prix sont indicatifs et variables en fonction des sites marchands et des quantités commandées.

La platine pour le montage du SA818 est simplement réalisée à la lame de scie sur un petit morceau d’époxy.

On soude quelques queues de résistances pour faciliter le montage du SA818, un millepattes qui n’a rien de répugnant !

Début du montage, déjà le SA818, ensuite les quelques autres composants.

Inutile de réinventer, voici le schéma vu sur le site du regretté F5MNA, l’essentiel est là, 5 résistances, 1 diode, 1 LED et un condensateur !

La partie électronique est terminée, on va pouvoir passer à la programmation ….
Comment ça marche : La borne D1 (TXD = Transmission de DATA) de notre Arduino est connectée à la borne 16 (RXD = Réception de DATA) de notre SA818, nous allons dans notre programme C envoyer des séquences d’informations vers le module VHF.
Format des séquences :
AT+DMOCONNECT
initialise la communication
AT+DMOSETGROUP=0,145.5125,145.5125,0012,4,0003
Voilà une séquence complète pour paramétrer le SA818
0 c’est la bande passante 0 = 12.5Khz 1 = 25KHz
145,5125 c’est la fréquence d’émission (utilisation future)
145,5125 c’est la fréquence de réception
0012 c’est le CTCSS émission (utilisation future)
4 c’est la valeur du Squelch (entre 0 pas de squelch et 8 maxi)
0003 c’est le CTCSS émission (utilisation future)
exemple simplifié, pour écouter un relais sur 145.500 sans squelch et avec une déviation de 12.5KHz nous passerons simplement:
AT+DMOSETGROUP=0,145.5000,145.5000,0000,0,0000
AT+DMOSETVOLUME=1
Réglage logiciel du volume du récepteur entre 1 et 8 (utilisation future)

Et maintenant le code en langage C, nous utilisons des « morceaux » déjà décrit dans les précédents articles, seul le sous programme qui transmet les données au SA818 est nouveau.
/////////////////////////////////
// Recepteur SA818 minimaliste //
/////////////////////////////////
// Ajouter librairie de gestion de l'écran LCD:
# include <LiquidCrystal.h>
// initialisation des broches à utiliser pour l'écran LCD.
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
/////////////////////////////////
// Initialisation des variables //
/////////////////////////////////
int Bouton_1 = 2; // Notre bouton 1 utilisera la borne 2 de l'Arduino
int Bouton_2 = 3; // Notre bouton 2 utilisera la borne 3 de l'Arduino
float frx,ftx, Pas, squ;
void setup() {
// Préparation de notre afficheur qui comporte 16 colonnes sur 2 lignes
lcd.begin(16, 2);
// Afficher sur l'écran LCD.
lcd.setCursor(2, 0);
lcd.print("FREQUENCE : ");
pinMode(Bouton_1, INPUT_PULLUP); // Nous utilisons Bouton_1 comme une entrée digitale
pinMode(Bouton_2, INPUT_PULLUP); // Nous utilisons Bouton_2 comme une entrée digitale
frx = 145750, ftx = frx; //Fréquence favorite.
Pas = 12.5; // Pas
squ = 1; // mettre a 0 pour entendre le souffle
lcd.setCursor(2, 1);
lcd.print((frx / 1000), 4);
envoyer_info_vers_SA818 (); // Appel du sous programme qui envoi les DATA
// Le récepteur va se posionner sur 145.750MHz au Pas de 12.5KHz et squelch à 1
}
void loop() {
////////////////////////////////////////////////////////////
// Boucle qui scrute si on appuie sur l'un des 2 boutons ///
////////////////////////////////////////////////////////////
lcd.setCursor(2, 1);
if (digitalRead(Bouton_1) == LOW)
{
delay(200);
frx=frx-Pas;
lcd.print((frx / 1000), 4);
envoyer_info_vers_SA818 ();
}
if (digitalRead(Bouton_2) == LOW)
{
delay(200);
frx=frx+Pas;
lcd.print((frx / 1000), 4);
envoyer_info_vers_SA818 ();
}
}
void envoyer_info_vers_SA818 ()
///////////////////////////////////////////
// Sous programme qui permet d'envoyer ///
// les informations au module SA818 ///
///////////////////////////////////////////
{
Serial.begin (9600); // On ouvre le port série
Serial.println ("AT+DMOCONNECT"); // On initialise la connection
Serial.println("");
Serial.println ("");
delay (100); // On laisse réagir le SA818
Serial.print ("AT+DMOSETGROUP="); // Début de la séquence
Serial.print ("0"); // Déviation à 12.5KHz
Serial.print (",");
Serial.print (ftx / 1000, 4); // Fréquence d'émission même si on n'utilise pas
Serial.print (",");
Serial.print (frx / 1000, 4); // Fréquence de réception
Serial.print (",");
Serial.print ("0000"); // Fréquence CTCSS émission même si on n'utilise pas
Serial.print (",");
Serial.print (squ,0); // 0 pas de Squelch puis de 1 à 8
Serial.print (",");
Serial.println ("0000"); // Fréquence CTCSS de réception même si on n'utilise pas
Serial.println("");
Serial.println ("");
}
Après avoir décortiqué le programme avec NOAM, il n’a pas résisté à l’envie de câbler et programmer en quelques minutes le bouton 3 pour basculer le squelch de 0 a 1 et inversement
Déjà la VERSION2 : Récepteur VHF couvrant de 134 à 174 MHz au pas de 12.5 KHz et utilisant 3 boutons poussoirs :
1 = Descente,
2 = Montée en fréquence de 12.5KHz
3 = Passage du squelch de 0 a 1 et inversement !
Il suffit d’ajouter (au bon endroit) :
int Bouton_3 = 4; // Notre bouton 1 utilisera la borne 3 de l’Arduino
pinMode(Bouton_3, INPUT_PULLUP); // Nous utilisons Bouton_3 comme une entrée digitale
if (digitalRead(Bouton_3) == LOW)
{
if(squ > 0)
{
squ = squ – 1;
envoyer_info_vers_SA818 ();
delay(200);
} else {
squ = squ + 1;
envoyer_info_vers_SA818 ();
delay(200);
}
}
