S-Mètre Externe pour Radios Icom via CI-V et Arduino
Composants et fournitures
- 1x Arduino UNO (ou Nano)
- 1x Potentiomètre mono-tour 10 kΩ
- 1x Résistance 10 kΩ
- 1x Résistance 4,75 kΩ
- 1x Diode 1N4148
- 1x Condensateur 10 µF
- 2x Câble avec noyau de ferrite
- 1x Connecteur Jack 3,5 mm (1/8")
- 1x Connecteur tuner Icom (récupéré sur alim PC)
À propos de ce projet
Ce circuit utilise un Arduino Uno ou Nano pour envoyer une commande CI-V à une radio Icom afin de demander les informations de signal, lire la réponse, la convertir et l'afficher sur une sortie analogique où l'on peut connecter un S-mètre analogique (type Arsénoval).
Il est alimenté par le port "Antenna Tuner" de la radio Icom. Si votre Icom n'a pas de port tuner, vous pouvez utiliser tout autre port ou connecteur fournissant une sortie +12V (au moins 200 mA). Une source d'alimentation DC externe peut aussi être utilisée.
Si vous n'avez pas de connecteur Antenna Tuner, vous pouvez utiliser un connecteur d'alimentation de PC et le tailler avec une pince pour qu'il s'adapte au connecteur tuner Icom.
Ce projet est conçu pour un transceiver Icom IC-7000, mais peut être adapté à toute radio Icom disposant d'un port CI-V.
Vous pouvez utiliser l'adresse universelle CI-V "00" sur certains Icom, rendant ce convertisseur compatible avec toute radio Icom sans changer l'adresse CI-V dans le code.
Des ferrites sont installées sur les câbles d'entrée et de sortie pour éliminer les inductions RF. Le +12V DC vers le S-mètre n'est pas nécessaire ; il pourrait servir à alimenter un rétroéclairage du mètre ou d'autres fonctions optionnelles.
Le potentiomètre de 10 kΩ sert à atténuer le signal de sortie (trop fort pour la plupart des mètre analogiques) et à calibrer le mètre analogique pour obtenir une lecture à pleine échelle avec un signal local puissant (+60 dB).
D'autres projets similaires utilisant Arduino comme interface CI-V :
- https://on7dq.blogspot.com/2017/02/ic-7300-paddle-or-key-easy-solution.html
- https://www.qsl.net/on7eq/en/ (cliquer sur "projects")
Code
Icom CI-V S-meter (C/C++)
// IC7300 Testbed for S-meter readout and other functions
// by Luc Decroos - ON7DQ/KF0CR
// modified & adapted by Daniel VE2BAP, 2018-12-01
#include <SoftwareSerial.h> // pour communication avec IC7000
#define BAUD_RATE 19200 // Vitesse CI-V
#define TRX_address (0x70) // HEX $70 = Icom IC-7000
//#define TRX_address ((byte)00) // $00: adresse universelle Icom (fonctionne pour toutes les radios).
// connexion série
// RX = Radio Icom vers Arduino : sur pin 2 via résistance 4k7
// TX = Arduino vers Radio Icom : sur pin 7 via diode 1N4148, avec pull-up 10k vers Vcc (5V) sur la pointe du connecteur 3.5 mm
SoftwareSerial mySerial = SoftwareSerial(2, 7); // (RX, TX)
int readCounter; // compte le nombre d'octets reçus de la radio
int sMeterVal1; // stocke l'octet BCD le plus significatif contenant l'info de signal
int sMeterVal2; // stocke l'octet BCD le moins significatif contenant l'info de signal
int sMeterOut = 11; // S-mètre analogique externe connecté sur pin 11.
//---------------------------------------------------------------------------------------------
void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW); // force la LED (pin 13) à s'éteindre.
pinMode(2, INPUT); // Communication série CI-V depuis IC7000
pinMode(7, OUTPUT); // Communication série CI-V vers IC7000
pinMode(sMeterOut, OUTPUT); // configure sMeterPin en sortie
mySerial.begin(BAUD_RATE);
mySerial.listen(); // un seul port peut écouter avec SoftwareSerial
// voir référence https://www.arduino.cc/en/Reference/SoftwareSerialListen
while (mySerial.available()) mySerial.read(); // nettoie le buffer
}
//---------------------------------------------------------------------------------------------
void loop() {
// lecture et affichage de la valeur S-mètre
mySerial.flush(); // séquence de début : envoi commande "read S meter" à la radio.
mySerial.write(0xFE);
mySerial.write(0xFE);
mySerial.write(TRX_address);
mySerial.write(0xE0);
mySerial.write(0x15);
mySerial.write(0x02); // Lecture S-mètre, commande 15 02
mySerial.write(0xFD); // fin de séquence
delay(20); // maintenant lecture infos depuis la radio
int nbChar = mySerial.available();
if (nbChar > 0) {
for (int readCounter = 0; readCounter < nbChar; readCounter++) {
byte byteRead = mySerial.read();
if (readCounter == 6){
sMeterVal1 = ((byteRead/16*10) + (byteRead%16)); // Premier octet : conversion BCD vers décimal.
}
if (readCounter == 7){
sMeterVal2 = ((byteRead/16*10) + (byteRead%16)); // Second octet : conversion BCD vers décimal.
analogWrite(sMeterOut, ((sMeterVal1 * 100) + sMeterVal2)); // Calcule et écrit la valeur S-mètre sur la broche de sortie.
delay(20);
}
}
}
}
Pièces personnalisées et boîtiers
Photos du boîtier et du montage :
Schémas

Processus de fabrication
- Défibrillateur externe : histoire, conception et fabrication
- L'évolution et l'ingénierie de la technologie radio
- Adoucir les mouchoirs : comment la lotion améliore confort et performance
- Xilinx lance le Zynq RFSoC DFE – Une solution Hard IP haute performance et économe en énergie pour les radios 5G
- Renesas et eProsima lancent le port micro-ROS pour MCU RA, permettant la robotique ROS 2
- Acceed IGS-9822DGP : switch industriel 12 ports Gigabit avec 4 ports SFP – solution réseau haute performance
- Surveillance précise de la température dans un placard serveur avec Raspberry Pi
- E3.Series : Optimiser la documentation de projet avec PDFs externes hyperliés
- Stores intelligents : contrôle automatisé de la lumière avec Arduino et énergie solaire





