Le projet de station météo APRS mobile : Présentation

Lors de situations météorologiques inhabituelles ou d’événements importants, il est essentiel d’avoir des relevés météo du terrain ; ce sont eux qui permettent le suivi en temps réel de la situation mais ils permettent également l’anticipation et la prévision de l’évolution pour les prochaines heures. Cependant, le maillage actuel des stations météo ne permet pas toujours d’avoir des relevés dans les zones voulues, de plus ces stations transmettent leurs données à travers internet, or ce réseau pour être altéré en cas de catastrophe majeure.

L’idée est donc de créer une station météo portable, déployable rapidement sur n’importe quel secteur, et entièrement autonome : son alimentation électrique est assurée par une ou plusieurs batteries (ce qui lui permet de tenir plusieurs jours), les transmissions des données sont assurées grâce à un poste radio qui émet sur le réseau APRS ; la station n’a donc ni besoin d’une alimentation électrique « classique » ni besoin d’une connexion internet.

Vidéo de présentation pour la finale nationale des Olympiades de Sciences de l’Ingénieur 2018 :

Cette station est réalisée dans le cadre des projets pluridisciplinaires pour mon BAC. Ces projets se réalisant par groupe, nous sommes 4 à travailler dessus :

  • SIRVENT Thomas,
  • JULIAN Bastien,
  • CHAUVET Louis,
  • BECAMEL Enzo (F4IAI, moi même).

En plus d’être un projet de BAC, cette station est à vocation de sécurité civile, elle est notamment développée avec l’ADRASEC 30/48, dont je fais partie, nous avons également le soutiens de HAND et sommes en contact avec le SDIS30 , il continuera donc même après le passage de l’épreuve de BAC (qui a eu lieu le 31/05/18).

Un grand merci à tous ceux qui aident ou ont aidé sur ce projet :

Différents articles plus techniques seront mis en ligne au fil du temps.

 

La V3 de la station météo APRS Mobile

Le projet de station météo APRS mobile continue d’évoluer, nous en sommes à sa 3e version !

Quels changements par rapport à la V2 ?

Cette version a pour but d’optimiser la V2 et de corriger certains dysfonctionnements.
Les premiers changements concernent l’alimentation électrique. Alors que sur la précédente version la console de la station météo était alimenté par 3 piles C, sur cette nouvelle version les piles ont été remplacée par un convertisseur 12V continu vers 5V continu. La Raspbbery qui était alimentée par un adaptateur prise allume-cigare -> USB est désormais alimentée par le convertisseur 12V vers 5V.

Les autres changements ont été apportés sur la partie informatique de la station. Pour commencer, la partie logicielle a été simplifiée : il n’y a plus besoin du client APRS. Le fichier wxnow.txt est désormais directement interprété par le TNC virtuel, DIREWOLF. Le logiciel de lecture de la station météo a aussi été changé, WEEWX a été remplacé par CumulusMX, qui intègre directement la création d’un fichier wxnow.txt.

Le convertisseur 12V vers 5V

Nous allons commencer par voir le montage qui transforme le 12V continu fournit par la batterie en 5V continu. Ce montage doit alimenter la Raspberry et la console. Il est réalisé avec un LM317T, un régulateur de tension variable, qui nous permettra de changer facilement la tension de sortie pour l’adapter si la Raspberry est remplacée par un autre système qui demande une autre tension.

Ce convertisseur doit être capable de sortir une intensité d’environ 1,15A (1A pour la Raspberry + 30mA pour la console + 120mA lorsque le rétroéclairage de la console est activé).

Une photo du convertisseur 12V vers 5V une fois monté
Schéma du montage
Liste des composants

Voici la liste des composants nécessaire à ce convertisseur :

NomTypeValeurAutre info
R2Résistance330
R1, R3Résistance 470
RV1Résistance variable1kBoitier horizontal
C1Condensateur0.1uFNon polarisé, vertical
C2Condensateur1uFNon polarisé
C3, C5Condensateur10uFAxial
C4Condensateur1000uFAxial
D1DELVerteDiamètre 5mm
D2Diode1N4007
X1, X2Bornier à vis2 bornes
CI1Régulateur de tensionLM317TBoitier TO-220
Circuit imprimé

Ci-dessous les implantations des composants sur le circuit imprimé :

Vue de dessus
Vue de dessous

Si vous voulez les fichiers EAGLE ou un circuit vous pouvez me contacter par mail à l’adresse suivante : meteobruno@gmail.com

Les logiciels de la Raspberry

CumulusMX pour la station météo

Alors que l’ancienne version utilisait Weewx, cette nouvelle version utilise CumulusMX. Weewx fonctionnait mais nécessitait un plugin pour générer le fichier wxnow.txt et pouvait planter lors de la connexion de la station météo à la Raspberry à chaque démarrage de la station APRS mobile. CumulusMX intègre lui directement la génération du fichier wxnow.txt et fonctionne mieux à chaque lancement, mais il faut prévoir d’ajouter son lancement dans les « paramètres » du système d’exploitation, nous verrons comment le faire plus bas.

Installation

CumulusMX est disponible ici. Il vous suffit de télécharger l’archive et de la décompresser dans le répertoire voulu. Cependant, pour pouvoir le lancer, il vous faut également installer Mono.

Pour installer Mono, il vous suffit de suivre la procédure indiquée ici en fonction de votre système d’exploitation.

Une fois Mono installé, pour lancer CumulusMX, tapez les commandes suivantes :

cd /votre-repertoire/

sudo mono CumulusMX.exe

Direwolf pour la partie APRS

DIREWOLF est un TNC virtuel. Dans la précédente version il se contentait de générer l’audio des trames fournies par YAAC (le client APRS) et de gérer le PTT. Dans cette nouvelle version le client APRS a été supprimé, c’est DIREWOLF qui s’occupe de récupérer les infos météo du fichier wxnow.txt pour générer la trame. Il est important d’avoir une version de DIREWOLF qui intègre la fonction COMMENTCMD (sur la station j’utilise la version 1.5).

Dans le ficher de configuration de DIREWOLF, direwolf.conf, il faut créer une balise PBEACON qui enverra automatiquement à un intervalle voulu les coordonnées GPS et le contenu du fichier wxnow.txt.

Le fichier de configuration de DIREWOLF

Une fois que le fichier direwolf.conf est configuré pour l’indicatif, la carte son… il faut créer la balise. Pour cela, il faut utiliser PBEACON comme suit (trame issue du manuel utilisateur de DIREWOLF):

PBEACON LAT=42^37.14N LONG=71^20.83W SYMBOL= »weather station » COMMENTCMD= »tail -1 wxnow.txt »

Il suffit maintenant d’adapter la balise à la configuration actuelle :

  • LAT : latitude
  • LONG : longitude
  • SYMBOL : symbole de la station
  • COMMENTCMD : lien vers le fichier .txt à envoyer

Il est possible de rajouter d’autres paramètres :

  • DELAY : temps avant le premier envoi de trame (entre le démarrage de DIREWOLF et le premier envoi)
  • EVERY : délai entre 2 envois de trame
  • DEST : destinataire
  • VIA : chemin à prendre (WIDE1-1, WIDE2-1…)

Par exemple, la configuration de la trame actuelle de la station est :

PBEACON DELAY=0 EVERY=1 DEST= »APRS » LAT=43^49.71N LONG=04^19.12E SYMBOL= »weather station » COMMENTCMD= »tail -1 /home/pi/CumulusMX/wxnow.txt »

Lancement au démarrage

LANCEMENT AU démarrage de cumulusm

Afin que CumulusMX se lance automatiquement au démarrage de la Raspberry, il faut créer une tâche CRON qui va exécuter un fichier .sh

Il faut commencer par créer le fichier .sh qui contient les commandes pour lancer CumulusMX :

cd CumulusMX
sudo mono CumulusMX.exe
cd

Une fois ce fichier créé, il faut créer la tâche CRON avec la commande suivante :

sudo crontab-e

Un fichier s’ouvre dans l’éditeur, il suffit maintenant de taper sur sa dernière ligne la commande pour ouvrir le .sh au démarrage (le lien vers le fichier peut bien entendu être différent) :

@reboot /home/pi/start.sh

lancement au démarrage de DIREWOLF

Pour DIREWOLF, c’est un peu plus compliqué. Il faut déjà créer dans le répertoire PI un fichier dw-start.sh comme celui-ci : cliquez ici pour voir le fichier

Une fois le fichier créer, il faut demander à une tâche CRON d’exécuter ce fichier chaque minute (on demande chaque minute pour qu’en cas de plantage de DIREWOLF, il soit relancé automatiquement, et si DIREWOLF est en cours d’exécution, rien ne change).

Comme pour la tâche CRON de CumulusMX, il faut ouvrir l’éditeur de tâches CRON avec :

sudo crontab -e

Une fois l’éditeur ouvert, il faut saisir la ligne suivante à la fin (là encore le lien vers le fichier peut être différent) :

* * * * /home/pi/dw-start.sh >/dev/null 2>&1

Pour utiliser la station, il suffit maintenant de tout brancher et de mettre sous tension, les trames avec les données météo s'enverront alors automatiquement

Le projet de station météo APRS mobile : le matériel de la V1

Comme il faut bien commencer par quelque chose, pour la station météo APRS il a été choisi de commencer par du matériel principalement de récupération. Voici donc une présentation du matériel utilisé pour la station V1.

Les capteurs :

L’anémomètre / girouette

L’anémomètre / girouette est issus d’une de mes ancienne station météo, il s’agit d’un LaCrosse TX23. Nous lisons les données qu’il envoi grâce à une librairie Arduino dédiée, cette librairie nous permet de récupérer la vitesse et la direction du vent toutes les 2 secondes. Les fils sont connectés à l’Arduino de la manière suivante :

  • Fil marron : fil de données, sortie PWM nécessaire,
  • Fil rouge : +5v,
  • Fil vert : ne pas connecter,
  • Fil jaune : masse.
le pluviomètre

Le pluviomètre est celui issus d’une de mes ancienne station météo. C’est un Oregon Scientific PCR800. Il fonctionne avec un godet et un ILS (interrupteur à lame souple). Étant donné qu’il est conçu pour envoyer ses données à la console de la station d’origine sur le 433Mhz, nous avons soudé des fils aux bornes de l’ILS pour récupérer ses données câble. Pour avoir la pluviométrie, il nous suffit donc de compter le nombre de changements d’états de l’ILS avec l’Arduino qui correspond aux nombre de basculements du godet.

le thermomètre / hygromètre

Le thermomètre / hygromètre n’est lui pas de récupération. Il s’agit d’un DHT22 que l’on trouve entre 5 et 10€ sur internet. Au début nous avions essayé le DHT11, moins cher, mais aussi moins précis, avec une plage de fonctionnement moins grande et qui consomme plus en énergie.

Quelques différences entre le DHT11 et le DHT22 :

 DHT11DHT22
Consommation2,5mA1,5mA lors d'une mesure, 50µA au repos
Mesure de la températurede 0°C à 50°C, avec une précision de +/- 2°Cde -40°C à 80°C, avec une de précision de +/- 0,5°C
Mesure de l'Hygrométrie (Humdité)de 20% à 80%, avec une précision de +/- 5%de 0% à 100%, avec une précision de +/- 2 à 5%
Fréquence de mesure1 mesure par seconde4 mesures par seconde

Pour lire les données du DHT22 (comme pour le DHT11 si c’est celui que vous avez), il suffit d’utiliser la librairie Adafruit Sensor et la librairie DHT Sensor.

le baromètre

Le baromètre (ou capteur de pression atmosphérique) n’est pas un capteur de récupération. Il s’agit d’un BMP180, que l’on trouve autour de 10€ sur internet. Nous l’utilisons uniquement pour la pression atmosphérique, mais il peut également donner la température et l’altitude.

ParamètrePlage de fonctionnement et précision
Pression atmosphériquede 300hPa à 1100 hPa, avec une précision de +/- 0,03 hPa
Températurede -40°C à 85°C, avec une précision de +/- 2°C
Altitudede -500m à 9000m par rapport au niveau de la mer, avec une précision de +/- 0,25m

Il communique les données à l’Arduino en I2C, pour les lire il faut installer la libraire BMP085/BMP180, et faire les branchements suivants :

  • Pin VCC sur le 3.3V (ATTENTION, selon votre version du capteur, il peut ne pas supporter le 5V, je vous conseille donc d’utiliser le 3.3V),
  • Pin GND sur la masse,
  • Pin SCL sur A5,
  • Pin SDA sur A4.

Le contrôle de la station:

Comme indiqué au fil de cet article, la station est basée sur une carte Arduino, plus précisément sur une Arduino Uno.

Cette Arduino Uno récupère toutes les données des capteurs, construit la trame APRS et envoi la trame BF au poste radio (un article sur cette partie sera mis en ligne prochainement).

Afin d’éviter des branchements complexes, nous avons créé notre propre shield (plans disponibles en me contactant par mail : meteobruno@gmail.com ), sur lequel nous venons connecter un connecteur IDC 10 broches qui regroupe tous les capteurs.

Le GPS :

Le GPS est un GPS Trimble de radiosonde M10. Pour le réutiliser nous avons suivi les travaux d’un autre radioamateur, F1BSW. Il suffit de couper une piste et de souder quelques fils pour pouvoir le réutiliser : lien vers la page de F1BSW.

La radio :

Le poste radio utilisé est un TALCO CS3, programmé pour l’APRS. L’Arduino contrôle le TALCO (envoi de la trame et PTT) grâce à sa prise micro, dont voici les correspondances des fils :

Correspondance des fils sur la prise micro du TALCO

La batterie :

La batterie utilisée actuellement est une batterie 12V / 65 Ah de voiture. La conversion 12V vers 5V pour alimenter l’Arduino est assurée par le shield cité plus haut.


Voilà la fin de cette petite présentation des composants de la station. D'autres articles dédiés à des éléments comme le shield ou le GPS seront bientôt mis en ligne.

 

Continuer la lecture de Le projet de station météo APRS mobile : le matériel de la V1

Le projet de station météo APRS mobile : le matériel de la V2

Alors que la version 1 de la station été basée sur une Arduino UNO et plusieurs capteurs (voir présentation du matériel de la V1), la version version 2 est basée une Raspberry et une station Davis Vantage Vue.

La Version 2 de la station lors d’une présentation pour les pompiers du Gard. En vert est encadré l’ISS ; le bloc qui contient les capteurs. En bleu est encadré la console qui reçoit et affiche les données météo pour les renvoyer à la Raspberry.

La station météo

Les différents capteurs de la V1 ont été remplacés par une station plus professionnelle, une Davis Vantage Vue.

La station est en deux blocs : l’ISS qui contient les capteurs (cadre vert sur la photo ci-dessus), et la console qui reçoit et affiche les données (cadre bleu sur la photo ci-dessus).

La partie « ISS » de la station.

La liaison entre les deux blocs se fait en 868 Mhz, cette fréquence est nettement mieux pour notre utilisation que les 433 Mhz, d’une part car la bande des 433 Mhz est très occupée, d’autre part car le poste radio va émettre sur les 144 Mhz et il sera proche physiquement de la station météo, donc plus on est éloigné en fréquence moins il y aura de brouillage de la part du poste radio.

Les données météo (température, hygrométrie, vitesse et direction du vent, pluviométrie) sont transmises toutes les 2 secondes à la console.

La Raspberry

La Raspberry (PI2 minimum) remplace l’Arduino Uno. Sur cette Raspberry sont installés les logiciels Weewx, YAAC et Direwolf. Chaque logiciel a un rôle précis :

  • Weewx lit les donnés de la station qui est branchée en USB (grâce au data logger de Davis Instrument) et construit grâce à un plugin un fichier .txt
  • YAAC est un client APRS. Il est chargé de lire le fichier .txt généré par Weewx pour le transformer en trame APRS. La trame APRS est ensuite envoyée au TNC virtuel
  • Direwolf est le TNC virtuel. Il va transformer la trame envoyée par YAAC en une trame audio (la raspberry n’ayant pas de carte son intégrée, il faut rajouter une carte son USB). Direwolf gère également le PTT du poste radio grâce à un montage sur les GPIO (voir schema ci-dessous)

Montage pour permettre à la Raspberry de contrôler le PTT du poste.

Au final, comment la station fonctionne ?

L’ISS de la station météo envoi ses données à la console sur 868 Mhz. La console est reliée par USB à la raspberry grâce au data logger vendu par Davis Instrument.

Les données sont lues par la raspberry grâce au logiciel Weewx, qui génère toutes les minutes un fichier .txt. Ce fichier .txt est ensuite récupéré par le client APRS « YAAC », qui va généré une trame APRS avec les données saisies par l’utilisateur à l’installation du logiciel (position GPS, indicatif…) et les données météo actualisées toutes les minutes. Cette trame est envoyée à intervalle régulier au TNC virtuel.

Le TNC virtuel, ici Direwolf, récupère la trame et la transforme en trame audio. Cette trame audio est générée grâce à une carte son USB, la raspberry n’ayant pas de carte son intégrée. C’est également Direwolf qui bascule le poste en émission grâce à un montage PTT sur les GPIO.

Fin de cette petite présentation du matériel de la V2.
D'autres articles dédiés aux logiciels utilisés seront mis en ligne.

Le projet de station météo APRS mobile : création de la trame météo

La librairie présentée dans l’article précédent nous permet d’envoyer une trame APRS grâce à une simple arduino Uno. Cependant cette trame il faut savoir quoi mettre dedans.

La composition d’une trame météo

Plusieurs schémas sont possibles pour faire une trame météo. La liste des trames APRS est disponible dans ce document.

Le schéma retenu est le suivant :

4401.27N/00437.22E_188/007g008t079r000p000P000h40b09947adrasec30

Le découpage est le suivant :

4401.27N → Latitude au format Degrés Minutes en décimales

00437.22E → Longitude au format Degrés Minutes en décimales

188 → Direction du vent en degrés

007 → Vitesse moyenne du vent en mph

g008 → Vitesse rafale de vent en mph

t079 → Température actuelle en °F

r000 → Pluviométrie de la dernière heure en inch

p000 → Pluviométrie sur les dernières 24h en inch

P000 → Pluviométrie depuis minuit en inch

h40 → Humidité en %

b09947 → Pression atmosphérique en mb

adrasec30 → commentaire

L’acquisition des données

Les données des différents capteurs sont acquises grâce à leurs librairies et programmes. Ces acquisitions se font dans le fichier principal du programme.

Cependant, pour pouvoir envoyer les données, elles doivent être sous la forme de « string », ce sont les différentes chaines de caractères (String) qui seront assemblées pour former la trame APRS. Il faut donc penser à convertir les résultats des lectures des capteurs qui peuvent donner des valeurs sous d’autres format (sous le format « float » par exemple).

Outre les formats qui doivent être respectés, tout (ou presque) est permis pour lire les données des capteurs.

L’assemblage de la trame

Une fois les données récupérées, il faut encore les assembler pour obtenir le bon format.

En ce qui concerne les coordonnées GPS, on peut utiliser les variables prévues à cet effet dans la librairie.

Pour la direction du vent on peut utiliser la variable « tempaprscourse », pour la vitesse moyenne on peut utiliser « tempaprsspeed », par contre pour les autres informations il n’y a pas de variable pré-établie. Du moins au premier abord, car il suffit simplement de les mettre dans la variable dédiée au commentaire.

Lorsque les décodeurs APRS vont recevoir la trame, si elle est bien construite ils ne considéreront pas les informations de la variable « tempsaprscomment » comme des commentaires, mais comme des données météo. Pour cela il faut assembler dans la variable « tempaprscomment » les caractères qui définissent les données (« g », « t », « h »…) et les données en elles mêmes.

C’est là où il est important d’avoir augmenté le nombre de caractères autorisés.

Vous pouvez maintenant utiliser la librairie Arduino pour envoyer des informations météo.

Le projet de station météo APRS mobile : présentation générale de la librairie Arduino

Comme indiqué dans l’article de présentation du matériel de la V1, la station est organisée autour d’une carte Arduino Uno, je pense qu’il n’est pas nécessaire de présenter ce qu’est une Arduino Uno tellement cette petite carte est répandue…

Carte Arduino Uno.

 

Tous les capteurs sont donc connecté à cette Arduino, et c’est elle qui est chargée de collecter les données et de construire la trame APRS pour l’envoyer.

la librairie utilisée

Après avoir récupéré les données, l’Arduino va construire une trame APRS. Cette construction se fait grâce à la librairie aprslib. En téléchargeant cette librairie, vous avez 2 fichiers exemples. Un fichier avec GPS, un autre sans GPS. Je n’ai pas essayé le fichier avec GPS, je me suis contenté de la version sans GPS et je saisissais les coordonnées manuellement.

Pour pouvoir paramétrer plus facilement le programme, je vous conseille de déplacer le fichier d’exemple dans le dossier avec tous les autres fichiers :

Le dossier avec tous les fichiers de la librairie (APRS_tuto.ino étant le fichier exemple).

Lorsque vous ouvrez le fichier .ino avec l’IDE Arduino (ou tout autre IDE compatible), vous allez donc avoir également tous ces fichiers. Pensez juste à modifier dans le fichier .ino le #include <aprslib.h> par  #include « aprslib.h ». Vous pourrez donc modifier facilement différents paramètres répartis dans ces fichiers :

  • Dans le fichier aprslib.cpp vous trouverez la structure de la treme APRS.

    Capture de la structure de la trame dans aprslib.cpp

    Vous pouvez par exemple changer le symbole à la ligne 74 (le symbole pour les station météo est ‘_‘).

  • Le fichier config.h est le fichier dans lequel j’ai paramétré le plus de chose.

    Configuration du SSID, de l’indicatif de destination et du WIDE.

    A la ligne 43 se trouve le SSID, par exemple en saisissant 13 cela donnera F4IAI-13. A la ligne 46 se trouve l’indicatif de destination, je ne l’ai pas changé. A la ligne 53 se trouve le WIDE, le chemin. Pour être répéter un maximum de fois je l’ai modifié en WIDE3-3.

    Configuration des pins.

    Vous pouvez modifier les pins de l’Arduino pour le PTT et le pin duquel sortira la trame audio. Le pin audio (à la ligne 101) doit être la sortie 3 ou la sortie 11. Le pin de PTT n’a lui pas pas besoin d’être forcément une sortie PWM.

  • Le fichier radio_hx1.cpp est le fichier du PTT. Vous pouvez inversé les états du pin en modifiant les LOW en HIGH et HIGH en LOW aux lignes 28, 38 et 52.

    C’est ici que l’on peut inverser les états du PTT.

     

  • Enfin, le fichier .ino contient le programme principal.

C’est ici tout que tout le reste se paramètre. A la ligne 45 vous pouvez saisir votre indicatif (sans le SSID qui a été saisi dans un autre fichier). A la ligne 46 vous pouvez saisir l’heure, à la ligne 47 la latitude, à la ligne 48 la longitude (la latitude et la longitude doivent être en degrés minutes décimales, j’utilise ce convertisseur pour les obtenir en sélectionnant le format « marine »).

A la ligne 49 vous avez la direction, à la ligne 50 la vitesse. Enfin, à la ligne 51 vous pouvez saisir le commentaire que vous voulez, il faudra juste penser à augmenter le nombre de caractères de votre variable tempaprscomment en fonction de la longueur de votre commentaire (pour cela il faut modifier la valeur de la ligne 35).

Le delay() de la ligne 59 vous permet de choisir l’intervalle de temps entre 2 émissions, la durée doit être saisie en millisecondes.

C'est la fin de cette présentation de la librairie utilisée, n'hésitez pas à me contacter si vous avez des questions. Vous pouvez trouvez un article sur l'envoi de trames météo avec cette librairie ici.