Tracker APRS à base d’Arduino et de DRA818

Article en date du et modifié le mais il parle d'une autre date, le
Catégorie : Projet Tags : , ,

Tracker APRS à base d'Arduino et de DRA818V
Tracker APRS à base d'Arduino et de DRA818V

Août 2018, je m’intéresse pour la première fois à l’APRS. Dans le même temps, des petits modules RF VHF 1W FM sont commercialisés : les DRA818V. Je me lance donc dans un projet d’émetteur APRS avec ce module et un Arduino pour ma voiture !

L’APRS

L’Automatic Packet Reporting System est un système permettant l’envoi de trames AX.25. Ces trames peuvent être des positions GPS (le plus souvent), des télémétries de stations météo ou satellites et enfin des messages textes.

L’AX.25

L’AX.25 est un format dérivé de X.25. Le X.25 est un protocole utilisé à partir des années 70/80. France Télécom l’utilisait pour son Minitel par exemple. Il permet 1200 bauds en AFSK et 9600 bauds maximum en FSK.

L’AX.25 a dans son nom un « A » pour « Amateur ». En effet, le protocole ajoute l’identification des trames par l’indicatif du radioamateur qui les envoie.

Le protocole peut encapsuler des trames TCP/IP, ce qui est très pratique pour utiliser Telnet sur une station distante par radio par exemple. Je l’ai notamment utilisé sur un gros projet pour avoir le contrôle d’un Raspberry Pi par radio sans lien internet ou Hamnet.

Voici une présentation que j’ai fait à l’ADRI38. Elle comporte peut-être des erreurs. N’hésitez pas à me contacter pour les rectifier 🙂

Les composants

Voici de quoi se compose l’émetteur :

  • Un Arduino Nano
  • Un GPS NEO 6M
  • Un DRU818V
  • Des résistances (notamment 1KΩ et 2.2KΩ) et un condensateur de découplage pour l’audio
  • Une prise pour l’antenne (ici SMA femelle)
  • L’antenne (pour ma part sur la voiture : Sirio HP 2070)
  • Un filtre passe-bas VHF à fabriquer ou acheter (je ne l’ai pas fait pour ma part …)

Cartes spéciales pour le module DRA818

J’ai décidé de faire ma propre carte pour le DRA818. Cependant, je n’ai pas les talents de certains et ma carte n’a pas de filtre en sortie et n’est pas aussi belle… Voici néanmoins quelques cartes vers lesquelles j’aurai pu m’orienter :

  • La meilleure selon moi : celle de SV1AFN. Ce qu’il fait est toujours de bonne facture. De plus, celle-ci comporte un filtre !
  • Une très simple qui m’a inspirée : sur le site hamshop.cz
  • Et d’autres comme par exemple celle de Handiko
Ma petite carte pour le DRA818V avec une tentative de filtre
Ma petite carte pour le DRA818V avec une tentative de filtre

Le code

Le programme se compose de plusieurs parties :

Générer de l’AX.25 avec un Arduino

Le mode 1200 bauds utilise 2 tonalités (Modem Bell 202). 1200 Hz pour un bit à 1 et 2200 Hz pour un bit à 0. On peut les générer avec :

  • De la PWM (Pulse Wave Modulation)
  • Un DAC (Digital to Analogic Converter)
  • Un réseau R-2R

Le plus simple est d’utiliser un DAC. On stocke les sinusoïdes des 2 tonalités et on les fait « jouer » par l’Arduino. Le souci est qu’il faut un DAC… L’Arduino que j’ai avec moi est un Arduino Nano qui n’en possède pas.

Pour la PWM, ça fonctionne bien mais le signal produit est très carré ce qui n’est pas idéal pour du son.

Le réseau R-2R reste ma seule solution. Il s’agit de plusieurs résistances branchées d’une manière particulière et commandées par les sorties de l’Arduino. Ce système permet dé générer des sinusoïdes de manière « propre ». Plus d’info sur cette technique dans cet article très bien fait : https://tutoduino.fr/reseau-resistances-r-2r/

Le circuit du projet
Le circuit du projet

Une bonne bibliothèque : QARPS

Une bibliothèque très intéressante existe pour générer les trames et l’AX.25. Je ne l’ai pas trouvé souvent dans d’autres projets du même type que le mien ce qui est assez étrange. Peut-être que sa langue la rend inaccessible ? En effet, c’est un Polonais qui l’a développée, Łukasz Nidecki (SQ5RWU).

Voici sa bibliothèque : QARPS et son code source.

Elle prend en charge plusieurs types d’hardware : R-2R, Si4463 et d’autres. Vu que le mode PWM manquait, je l’ai rajouté à son projet au cas où quelqu’un veuille utiliser ce mode.

Logique du système

Voici le fonctionnement très simple du programme :

  1. Au démarrage, je regarde si la communication avec le DRA est disponible. S’il est présent, alors on est en voiture, sinon on est à pied. (Baofeng). Le symbole APRS change donc en conséquence
  2. On actualise le GPS
  3. Si on a une position et qu’on a dépassé le temps minimum entre 2 envois (pour la vitesse en cours), alors on envoie la position actuelle

Comme on peut le voir, la fonction « Smart TX » pour envoyer la position au bon moment n’est pas très intelligente. Une issue attend depuis très longtemps à ce sujet. Toutefois, au vu de la puissance du DRA818 (1W), envoyer une trame assez fréquemment est nécessaire pour arriver à se faire entendre par une IGate.

Fonctionnalités diverses

Une sortie audio avec une prise Jack a été ajouté ainsi qu’un contrôle de l’émission pour un talkie-walkie Baofeng avec un petit transistor, cela permet d’utiliser l’Arduino en mode tracker seulement.

Un mode « debug » a été implémenté pour tester l’émission. Il envoie une trame toutes les secondes même si on a aucun fix GPS.

Résultats

Mon petit projet a fonctionné pendant plus d’une année dans ma petite Peugeot 106. Mon record est de 80 Km plus ou moins (IGate de F5ZFL-4 avec son petit Watt je le rappelle).

Trajet de 70 Km aller-retour entre Saint-Jean de Bournay et Grenoble
Trajet de 70 Km aller-retour entre Saint-Jean de Bournay et Grenoble

Pour conclure toutes ces explications, voici le GitHub : https://github.com/valentintintin/arduino-tracker-aprs-dra818