K3NG pstrotator

Lors de la construction de ma station télécommandée, j'ai recherché une solution pour télécommander mon rotor à distance, donc via Ethernet.

Il existe plusieurs possibilités, mais j'ai finalement adopté celle proposée par K3NG et son interface développée sur Arduino. J'avais déjà construit une interface de ce type pour une commande via USB et mon rotor HAM IV.
Une carte d'extension (shield) Ethernet est nécessaire et doit être connectée à l'Arduino. La carte shield Ethernet utilise le chip W5100 et est enfichée sur un Arduino UNO.
J'utilise la platine universelle que j'ai développée. Voir cet article.

J'ai utilisé une platine  Arduino UNO bien que le programme rentre au chausse-pied... Une carte Arduino MEGA est recommandée par l'auteur K3NG.
Cependant, en limitant les fonctions au minimum (pas d'afficheur, boutons, etc...) et en commentant ou décommentant les lignes suivantes dans le fichier rotator_features.h  comme ci-dessous pour économiser de la mémoire, je n'ai pas eu de problème :

//#define DEBUG_DUMP
#define OPTION_SAVE_MEMORY_EXCLUDE_REMOTE_CMDS

Configuration du logiciel:

En plus des configurations à faire pour le type de rotor, il faut valider l'utilisation du protocole TCP/IP.

Le premier fichier à configurer est rotator_features.h, en décommentant les lignes suivantes  :

#define FEATURE_ETHERNET
#define FEATURE_MASTER_WITH_ETHERNET_SLAVE

Le fichier suivant à configurer est rotator_settings.h en modifiant les paramétres IP souhaités:

#define ETHERNET_MAC_ADDRESS 0xAA,0xBB,0xCC,0xDD,0x00,0x01
#define ETHERNET_IP_ADDRESS 192,168,1,173
#define ETHERNET_IP_GATEWAY 192,168,1,1
#define ETHERNET_IP_SUBNET_MASK 255,255,255,0
#define ETHERNET_TCP_PORT_0 23
#define ETHERNET_TCP_PORT_1 24

La platine Ethernet utilise les pins 10,11,12 et 13 pour l'interface Ethernet. La pin 4 est réservée au lecteur de carte SD. Ces pins ne sont donc pas disponibles pour commander le rotor.
J'ai utilisé la pin A5 pour la lecture du potentiomètre qui donne la direction. Les pins 6, 5 et 7 pour les commandes de directions horaires (CW), antihoraires (CCW) et le frein (BRAKE). Les pins 8 à 13 sont utilisables pour l'afficheur LCD dans le cas d'une platine permettant soit une version avec affichage, soit une version Ethernet.

Le fichier  rotator_pins.h doit être modifié en conséquence :

#define rotator_analog_az A0
#define rotate_ccw 7
#define rotate_cw 6
#define brake_az 5

 Après cela, il faut compiler le fichier k3ng_rotator_controller.ino et le charger dans l'Arduino à l'aide de l'IDE Arduino.

Une fois tout cela programmé, il faut vérifier que l'interface fonctionne correctement.
On relie un terminal sur le port COM (dépend de votre environnement et votre configuration) , on envoie la commande C. L'interface devrait retourner l'azimut actuel (qui sera probablement faux). Si ce n'est pas le cas, commencez par régler ce problème !
Ensuite, se reporter à la doc ou mon article au sujet de l'interface pour les autres réglages !

Utilisation :

Avec une utilisation avec prise de main à distance d'un PC sur lequel est raccordé le transceiver et le rotor via USB, il n'y a pas de difficulté majeure.
L'interface est raccordée à un port USB qui apparait alors comme un port série.

Pour pouvoir utiliser cette interface avec un logiciel de contest ou de carnet de trafic sur un PC local et un transceiver + rotors distants, il faut établir une connexion Telnet entre l'ordinateur et l'Arduino.

La solution la plus simple est d'utiliser un logiciel qui le fait nativement tel que PSTrotator par YO3DMU qui est un superbe logiciel!

Une solution plus universelle qui permet d'interfacer directement le rotor avec les logiciels de contest ou carnet de trafic, est de créer un client Telnet qui transforme les commandes série envoyées par le logiciel en commandes Telnet vers le serveur (la platine Arduino).
J'ai pour cela utilisé l'émulateur gratuit en version 32 bits VSPE et/ou com0com .

Client Telnet avec VSPE :

1) Créer un nouveau périphérique avec l'icône  "Créer un nouveau périphérique". Choisir "Connecteur'. Choisir un port COM disponible, par exemple COM3.

2) De la même manière, créer un périphérique  en choisissant "TcpClient". Entrer l'adresse IP de l'Arduino dans "Hôte TCP distant", mettre 23 dans "Port TCP distant".

Dans "Port" série source", mettre le numéro de COM créé précédemment COM3. Cocher la case "DTR/DSR dépendant de l'état de la connexion".

Une fois l'émulation démarrée, si tout est correct, vous devriez voir un nouveau port série dans le gestionnaire de périphériques et dans les choix proposés par les logiciels. Le rotor devrait répondre aux commandes envoyées par l'ordinateur.

Client Telnet avec com0com

Une autre solution que j'ai retenue est d'utiliser le logiciel com0com. A l'aide de l'interface "Setup command prompt", créer une paire de ports virtuels ( par exemple si COM5 est libre ) COM5<->CNCB0 (consulter le fichier com0com's ReadMe.txt pour plus d'infos). Entrer la commande suivante :

command> install 0 PortName=COM5,EmuBR=yes -

Le fichier com2tcp-rfc2217.bat lance une série de commandes qui émule le port créé. J'ai créé un fichier batch avec la ligne suivante  :

com2tcp-rfc2217 \\.\CNCB0 adresse_IP_Arduino 23

Lancer ce fichier batch et com2tcp démarrera et redirigera le port série virtuel COM5 vers le serveur Telnet du rotor via TCP.

Utilisation de PSTrotator :

Dans PSTrotatorAz ouvrir le menu "Communication", sélectionner  "TCP Client". Dans la fenêtre de paramétrage du client TCP, entrer l'adresse IP et le port paramétrés dans le fichier rotator_settings. La connexion devrait s'établir avec le rotor et un voyant vert devrait s'allumer en haut à gauche du cadran azimut.

Ouvrir le menu "Setup" et sélectionner "Start as TCP Client", et choisir une fréquence de rafraîchissement appropriée avec le menu "Refresh rate".

Le rotor est prêt à être commandé.

Utilisation de WTrotator :

Pour l'utilisation de Wintest, il faut passer par l'utilitaire WTrotator. Attention, la version à utiliser est à minima la 1.5 disponible ici : http://download.win-test.com/wtRotators/bin/wtRotators-1.5.exe
Avec le menu "Controllers", ajouter un contrôleur en choisissant "K3NG".
Sélectionner le port série virtuel créé précédemment, nommer le Rotor et ajouter au moins une antenne.

Utilisation avec Logger32
Dans la configuration du rotor, choisir le port COM déclaré ci-dessus, GS232A dans "rotor type", 9600 bauds N,8,1 dans les paramètres du port COM
Dans PSTrotatorAz, il faut choisir Logger32 dans le menu "Tracker" .
Les combinaisons de touches Ctrl+A et Alt+A font tourner le rotor dans la direction du "short path" ou "long path".

Petit bonus avec PSTrotatorAz, il y a possibilité de mettre l'antenne en sécurité dans une direction lorsque la vitesse du vent dépasse une valeur seuil.
Voir les menus "Setup" + "WX information" + "WX setup".
J'utilise comme mesure du vent ma station météo décrite ici.