La loi drones oblige les aéromodélistes à équiper leurs modèles de plus de 800g d'une balise de signalement électronique à distance.
L'objectif ici est de fabriquer soi-même une balise de signalement répondant aux caractéristiques de l'arrêté du 27 décembre 2019.
Résumé des règles
Voilà un résumé des cas dans lesquels utiliser ou pas une balise, pour des modèles de + de 800g:
je suis licencié FFAM ou UFOLEP:
je vole sur le terrain de mon club, terrain exempté de balise: pas balise
je vole sur le terrain de mon club, terrain NON exempté de balise: balise
je suis invité sur un autre terrain que celui de mon club, exempté de balise: pas balise
je suis invité sur un autre terrain que celui de mon club, NON exempté de balise: balise
je vole sur une pente déclarée et exemptée de balise: pas balise
je vole dans un endroit "sauvage": balise
je ne suis pas licencié FFAM ou UFOLEP:
je suis invité sur le terrain d'un club, exempté de balise: balise
je suis invité sur le terrain d'un club, NON exempté de balise: balise
je vole sur une pente déclarée et exemptée: balise
je vole dans un endroit "sauvage": balise
Norme
La norme technique définie dans le document légifrance est respectée:
Quelques grands principes: Réseau wifi, canal 6, émission d'une trame toutes les 3s ou si le modèle a fait plus de 30m, etc.
L'identifiant à déclarer sur AlphaTango
pour fabriquer puis utiliser sa propre balise DGAC, il fallait jusqu'à une certaine date demander un trigramme "constructeur". Maintenant, il faut utiliser le trigramme 000.
En ce qui concerne l'identifiant de la balise (et non pas du modèle, puisqu'une balise peut changer de modèle, sous certaines conditions), celui-ci est construit comme ceci :
- il comporte 30 caractères alphanumériques (pas d'espace, de tirets ou autres caractères)
- les 3 permiers caractères sont ceux du trigramme constructeur, 000 pour une balise faite soi-même
- les 3 suivants représentent le type de votre balise, mettre ce qu'on veut, par exemple B01 pour moi, car c'est mon premier modèle de balise, ma première version de balise
- les 24 suivants sont le numéro de série de la balise (pas du modèle puisque cette balise peut changer de modèle), à définir comme bon vous semble...
exemple d'identifiant pour une balise qui va équiper un motoplaneur de 1,8kg: 000B01000000000000000000000001
000: trigramme constructeur
B01: modèle de balise
000000000000000000000001: numéro de série de la balise
C'est ce numéro d'identifiant qu'il faudra renseigner sur AlphaTango, pour le planeur choisi, et/ou pour d'autres modèles de même catégorie de masse et de type.
Caractéristiques techniques de la balise
Il est possible de fabriquer deux types de balise.
L'une est basée sur un esp01s, l'autre sur esp32.
L'esp01s est moins lourde de qq grammes et plus petite donc elle peut être casée dans un planeur fin. Elle possède une petite LED bleue intégrée.
L'esp32 (modèle 32U) possède une antenne externe qui étend sa portée, ce qui n'est pas négligeable. Elle n'a pas de LED intégrée, il est possible d'en souder une pour reproduire celle de l'esp01.
Composants utilisés pour ces mesures:
régulateur ASM117
ESP01S
GPS GY-NEO6MV2 NEO-6M -> attention ces gps sont de qualité moyenne j'ai trouvé, j'ai fini par prendre des BN220...
Alimentation
|
DC 4.75V-12V
|
Consommation
|
90mA
|
Fréquence de travail
|
2.437 Ghz (canal 6 Wifi)
|
Puissance d'émission
|
~20dBm
|
Antenne intégrée sur le PCB
|
oui
|
Portée
|
|
Dimensions
|
36mmx30mmx21mm
|
Masse
|
25g
|
Puissance d'émission
|
100mW max
|
câble
|
10cm
|
Pour la balise basée sur un composant ESP32, les caractéristiques sont les mêmes execptées celles de la masse et de l'encombrement, un peu plus grande mais moins lourde pour l'esp32.
Le gps utilisé sur l'esp32 est un BN220.
Fonctionnement de la balise
La balise s'alimente sur une sortie libre du récepteur, en 5V donc.
Dès qu'elle est alimentée, la balise émet sa trame d'identification toutes les 3s.
Tant qu'elle n'a pas fait un fix GPS, la trame ne contient que l'identifiant de la balise, le reste des informations est rempli de 0.
Dans le principe, la balise doit émettre une trame, même si le GPS n'a pas encore fixé, et surtout même s'il perd le fix. Il ne doit pas y avoir de "trou" dans l'émission des trames, dès que le modèle a décollé.
Elle va aussi, dès le démarrage, faire un fix GPS (fix qui va dépendre de la qualité de réception, il n'est pas possible de dire avec certitude combien de temps il faut attendre).
Une fois le fix réussi, la balise émet une trame complète, contenant l'identification et les informations de positionnement complètes, toutes les 3s ou si elle s'est déplacée de + de 30m.
La balise émet aussi un code d'information qui permet de savoir dans quelle état elle est... (mais ça, c'est pas dans la norme, voir plus loin)
Une LED rouge et une LED bleue permettent aussi de vérifier son bon fonctionnement:
- La LED rouge indique que la balise est bien alimentée
- au démarrage, un clignotement lent de la LED bleue, de 5 impulsions, indique que la balise s'initialise
- ensuite, tant que la LED bleue est éteinte, la balise n'a pas encore eu son fix GPS
- la LED bleue se met à flasher très rapidement une demi-seconde, la balise vient de réussir son fix, elle définie sa position de départ (qui ne bougera plus jusqu'à l'extinction de la balise)
- Ensuite, la LED bleue reste allumée, elle flashe très brièvement à chaque émission d'une trame, si la trame n'est pas valide (perte de gps, autre) elle flashe 2 fois, si elle est valide, 4 fois.
La balise que je présente ici ne crée aucun site web, aucun réseau wifi visible.
On ne peut pas se connecter dessus en wifi pour vérifier son fonctionnement.
C'est important ici car l'accès à un site web sur la balise, via un réseau wifi, peut perturber le fonctionnement du récepteur du modèle, qui n'est en général pas très loin...
Autant une simple émission d'une trame toutes les 3s via le wifi, émission qui dure qq millisecondes, ne pertube pas le récepteur, autant une connexion permanente wifi sur la balise, avec un smartphone par exemple, et le dialogue wifi qui s'en suit, peut perturber le fonctionnement du récepteur.
C'est pourquoi j'ai choisi de gérer toute la partie contrôle sur un équipement séparé, qui n'est pas dans le modèle mais au sol vers le pilote.
Cet équipement, tout aussi simple à fabriquer, une sorte de récepteur, va récupérer les trames émises par la balise (sniffer), puis les présenter sur un site web en wifi (v3 max), ou via une application pour smartphone Android en BT (Bluetooth).
Tout le dialogue se passe entre le récepteur au sol et soit un navigateur web au sol connecté en wifi (v3 max) sur ce récepteur, soit une application android depuis un smartphone et en BT.
Ce récepteur a son chapitre dédié, plus loin...
Composants de la balise DGAC
la balise est composée d'un GPS, d'une carte ESP01S ou ESP01, et d'un convertisseur de tension 5V vers 3.3V.
Chacun peut se fournir selon ses habitudes.
Voilà un exemple de schéma de câblage de l'ensemble, basé sur une carte ESP32:
Programmation de la balise
La balise se programme via l'IDE Arduino et le programme fourni. Comme je m'adresse ici à des connaisseurs d'arduino, je n'entre pas dans les détails..
Pensez à changer l'identifiant de votre balise dans le code:
const char drone_id[] = "ILLEGAL_DRONE_APPELEZ_POLICE17";
remplacer ILLEGAL_DRONE_APPELEZ_POLICE17 par votre identifiant.
De plus, vous pouvez choisir le mode de calibrage du gps.
Il y a deux façons d'estimer que notre gps est assez précis pour pouvoir démarrer la balise: la précision horizontale et la précision 3D.
La précision 3D (PDOP) est plus difficile à obtenir mais elle est plus adaptée au mode de fonctionnement de la balise. Tous les GPS ne permettent pas non plus de récupérer cette valeur.
La précision horizontale (HDOP) est suffisante pour ce qu'on en fait.
Par défaut c'est la précision horizontale qui est activée.
Il est possible d'activer la précision 3D.
Dans le code de la balise, il y a cette ligne:
//#define PDOP
il suffit de la décommenter:
#define PDOP
pour passer en précision 3D simplement.
Attention, il est possible ensuite que votre GPS arrive à faire son fixe, mais que la balise estime qu'il manque de précision, et qu'elle n'arrive jamais à définir la position de départ, puis qu'elle n'émette jamais une trame valide.
Dans ce cas là repassez en mode précision horizontale (hdop).
Les logiciels fournis
Je fournis plusieurs programmes pour gérer cette balise, ils sont donnés comme ça, sans garantie etc, pour partager.
Je suis parti de programmes que l'on trouve sur le net, notamment ici:
je remercie aussi Ardisoft qui m'a autorisé à prendre une partie du code de son sniffeur pour l'intégrer dans mon récepteur.
j'ai donc ensuite adapter ce que je voulais pour obtenir quelque chose qui me convient bien.
il est possible de prendre les fichiers un par un en navigant dans ce dossier:
il contient:
- un dossier balise_dgac_esp01_noweb qui est le projet arduino pour programmer la balise à base de esp01s
- un dossier balise_dgac_esp32_noweb qui est le projet arduino pour programmer la balise à base de esp32
- un dossier recepteur_esp32_web_BT qui est le projet pour programmer le récepteur
- un dossier appli-smartphone qui contient un fichier recepteur_web_BT.apk qui est l'application android à installer sur un smartphone pour vérifier le fonctionnement de la balise, en BT.
(on y trouve aussi un fichier recepteur_web_BT.aia qui est le fichier projet pour appinventor, ne sert pas dans notre cas sauf pour les curieux qui veulent voir la source de l'appli smartphone)
J'ajoute une version 4 de ce pack balise, qui contient notamment un récepteur débarassé de son site web, et donc qui envoie uniquement en BT au smartphone les infos de la balise.
Cette V4 contient aussi une information supplémentaire permettant de s'assurer que la balise émet bien une suite de trames sans en sauter (un numéro de trame s'inscrémente automatiquement du côté balise émettrice, il est réceptionné et affiché par le récepteur)
il est possible de prendre les fichiers un par un en navigant dans ce dossier:
il contient:
- un dossier balise_dgac_esp01_noweb qui est le projet arduino pour programmer la balise à base de esp01s
- un dossier balise_dgac_esp32_noweb qui est le projet arduino pour programmer la balise à base de esp32
- un dossier recepteur_esp32_BT qui est le projet pour programmer le récepteur (sans le mini site web donc)
- un dossier appli-smartphone qui contient un fichier connecteur_recepteur_BT_v4.apk qui est l'application android à installer sur un smartphone pour vérifier le fonctionnement de la balise, en BT.
je ne détaille pas les procédures d'installation ou de programmation.
Le récepteur BT
Afin de vérifier que la balise émet correctement, de voir dans quel état est le GPS, il est possible de programmer une carte ESP32 (uniquement) avec le logiciel que je fournis.
Cette carte possède un port mini-usb, qui sert à la programmer et à l'alimenter.
Dès qu'elle est alimentée (en 5V via un chargeur de téléphone par exemple, ou via une batterie de secours pour smartphone, et un câble USB), la carte analyse le canal 6 wifi pour récupérer les trames qui y sont émises.
Dès qu'une trame est reçue, elle est décomposée et déposée sur un site web qu'elle fournit (jusqu'en V3), ou via BT si elle est connectée à un smartphone depuis l'application Android fournie aussi (et qu'il faut installer sur un smartphone).
Elle fournit aussi des messages d'information en focntion du code reçue dans la trame en cours, et le numéro de la trame reçue, pour la V4.
Bon, il est temps de voir tout ça en images...
La balise et le récepteur
Bon, côté récepteur il n'y a rien à voir, la carte ESP32 est utilisée sans ajout, directement connectée au port usb d'un ordinateur, d'un chargeur de smartphone ou d'une batterie de secours d'un smartphone.
Et voilà un exemple d'une balise un peu volumineuse, base esp01s, c'est celle dont les caractéristiques sont indiquées plus haut:
maintenant une balise à base de esp32u avec antenne externe, gps bn220:
le site web du récepteur
Attention, à partir de la V4, le site web du récepteur n'est plus fourni, ceci afin d'améliorer la récepteion des trames qui pouvait être perturbée et par le site web en wifi et le BT...
L'objectif de ce site web, situé sur le récepteur, est de vérifier si la balise émet une trame, le contenu de la trame, et de trouver des messages d'information sur le wifi émetteur et sur l'état du GPS.
La connexion au site web du récepteur se fait avec un navigateur, en étant connecté sur le wifi généré par ce récepteur.
Ce réseau wifi s'appelle DECODEUR_DGAC_XAV, le mot de passe programmé est 1234567890
Il est sur le canal 6
l'adresse ip de ce site web est 192.168.1.1
Les messages d'information donnés par le récepteur
le récepteur reçoit dans la trame un code d'information, et ce code est ensuite traduit en message.
sur le site web du récepteur on peut le voir dans la trame brute "Codeinfo=9" par exemple.
voilà les correspondances:
code 0: Initialisation en cours...
c'est un code qui ne doit pas apparaitre ou si peu... s'il reste, c'est qu'il y a un souci au niveau de la trame. Un code 0 n'est pas envoyé par la balise, donc le récepteur décode mal la trame et lit un 0 là où il ne devrait pas...
code 1: GPS non détecté, aucune donnée GPS reçue
là, il y a un souci entre le gps et la carte esp01 de la balise, les fils sont mal soudés, ou désoudés, inversés, etc, le gps est cassé, c'est un souci sur la balise, entre le gps et la balise donc.
code 2: Positionnement du GPS non valide (fix en cours)
le gps existe, il est en train de faire son fix
code 3: Fix du GPS perdu...
le fix avait été fait mais il a été perdu, donc le gps refait son fix
code 4: Le nombre de satellites captés est trop faible
le fix du gps a été fait, mais pour que la balise fonctionne bien, précisément, il lui faut un nombre de satellites mini, qui est de 4. Tant que le gps ne capte que 3 satellites on ne peut pas utiliser la balise, même si par ailleurs le fix est fait (le fix est moins exigeant)
code 5: La précision GPS est trop faible
le fix du gps a été fait, mais pour que la balise fonctionne bien, précisément, il lui faut une précision mini.
Cette précision est soit une précision 2D (horizontale uniquement) soit 3D (avec l'altitude en plus).
Cette précision doit être de moins de 5m donc inférieure à 5.0. Tant qu'elle n'est pas atteinte, on ne peut pas utiliser la balise, même si par ailleurs le fix est fait (le fix est moins exigeant)
code 6: L'altitude est indéfinie
Il se peut que l'altitude soit à 0 pendant un certain temps (pas la hauteur par rapport au sol, l'altitude vraie - bon pour ceux qui sont au bord de la mer ça va poser souci... on verra :-) ) cce qui indique que le gps n'a pas encore pu la calculer.
En général cette étape est très rapide et on ne devrait pas voir ce code longtemps...
code 7: Stockage de la position de départ OK
Ici, tout est ok, le gps a fixé, toutes les précisions sont ok, altitude définie. La permière fois que ces valeurs sont ok, la balise stocke la position, qui est donc considérée comme la position de départ de la balise.
code 8: cas non prévu!!!
comme dit ci dessus!
code 9: Dernière trame reçue valide
Ce message indique que tout est ok, fix, précision, home défni, la trame est bonne, c'est le fonctionnement normal.
Voilà présenté ci-dessous différents états de la balise:
Le récepteur reçoit des trames, mais le GPS n'a pas encore fait son fixe, donc les positions sont vides:
On a reçu une trame valide qui date de 2 secondes, et le fix GPS vient d'être perdu:
La dernière trame reçue valide date de 12s, la balise n'émet plus de trame (éteinte?)
Avec cette info on peut peut-être retrouver où est cette balise si entre temps elle est cassée ou éteinte suite à un crash...
là un problème temporaire de GPS:
et là tout est ok:
L'application Android du récepteur
Il est possible aussi de se connecter au récepteur avec un smartphone, en BT (Bluetooth), avec l'application fournie dans le fichier zip plus haut.
Là, pas besoin d'activer le wifi sur le smartphone, il suffit de démarrer l'application.
Les fichiers log
Attention, l'application sauvegarde sur le téléphone des fichiers qui contiennent les trames reçues afin de pouvoir les analyser ensuite.
Ces fichiers (un fichier se crée à chaque connexionBT et est sauvegardé à la déconnexion) sont stockés dans:
/stcokage interne/android/data puis il y a un dossier de l'application.
Les paramètres de l'application smartphone
Il est possible de choisir certains paramètres, en cliquant sur le bouton paramètres de la page principale.
Si on souhaite être averti au dessus d'une certaine hauteur, on peut donner cette hauteur à ne pas dépasser (1) et indiquer qu'on souhaite une alerte sonore (3)
Si la balise ne renvoie pas la hauteur mais juste l'altitude (cas de la balise naveol), on indique en (2) l'altitude de départ et un calcul est fait pour déterminer la hauteur en cours en fonction de l'altitude en cours. Ensuite l'alerte hauteur maxi peut être utilisée.
Si on souhaite être averti en cas de perte de trame, c'est en (4) que ça se passe
Enfin, il est possible de filtrer la recherche de balise, en indiquant en (5) sur quelle chaine de caractères on souhaite filtrer.
Dans le principe, s'il y a en vol plusieurs balises, le récepteur va toutes les voir et les envoyer à l'appli.
Pour retrouver uniquement la sienne, il suffit d'indiquer une chaine de caractères que les autres n'ont pas...
Pour une balise NAVEOL l'idéal est de filtrer sur les 6 derniers chiffres par exemple.
Quelques images
Au démarrage, pour le moment le récepteur n'est pas encore connecté à une balise:
Dans l'application, un clic sur le bouton "scan récepteur", le bouton "connexion" apparait. Un clic dessus pour obtenir cette fenêtre, dans laquelle on voit bien le récepteur:
Il suffit d'appuyer dessus pour être connecté.
Ensuite, l'application montre les différents états de la balise:
Pour le moment, le GPS n'a pas encore fait son fix, on a donc juste l'identifiant de la balise:
Là ci dessous, le fix GPS vient d'être fait, la position de départ est stockée:
à ce moment-là, en version 4, l'application émet un bip pour indiquer que la balise est prête.
Perte de fix:
et là, plus de trame reçue depuis 14s, on garde la trace de la dernière trame, avec la localisation, si nécessaire de chercher:
enfin, un cas où tout est ok:
il est à noter qu'en version 4, un nouveau champs existe: numéro de trame, qui indique quelle trame la balise a envoyé et le récepteur a reçu. Normalement, ces numéros doivent se suivre.
S'il y a un uméro de sauté, avec un écart de 6s, c'est que le récepteur a raté une trame.
S'il y a une perte de trame de + de 6s mais que le numéro de trame au retour de la réception est le numéro suivant directement de la dernière trame reçue, la balise n'a pas émis de trame pendant l'intervalle (pas bon ça...)
Le récepteur dans sa boite
Il est possible d'imprimer en 3D une boite qui va contenir le récepteur et son antenne, c'est plus pratique à transporter, à utiliser.
Voilà ce que ça donne:
on voit sa batterie grise de recharge de téléphone portable, en dessous de la boite noire.
L'intérieur:
Les fichiers pour l'impression 3D sont dans ce zip (le fichier cura directement et les fichiers freecad pour les plus curieux)
Remarque importante
J'ai ajouté un truc qui fait que ma balise n'est sans doute pas "dans la norme":
j'ai ajouté un champs en fin de trame, un seul octet, qui contient un code d'info, ce code est récupéré sur le récepteur, et il est traduit en messages d'infos, notamment pour avoir les infos du gps, que je récupère ensuite soit sur le site web du récepteur, soit sur l'appli smartphone que je adaptée pour ça aussi...
cet octet ne change rien à la longueur de la trame qui est bien supérieure à sa "charge utile", mais faut le savoir, moi j'ai fait ça pour moi et je prends le risque d'être "hors norme" (risque très limité à mon avis) -> donc si vous utilisez mes codes faut le savoir quoi :-)
Je parie sur la "flemme" des développeurs qui vont faire l'outil de contrôle de la trame, et qui ne décoderont sans doute que la partie utile de cette trame sans aller au delà du 11ième champs (le 12ième étant normalement le champs de tout ce qui reste d'inutilisé de la trame, rempli de 0...
Evolutions
Le site web du récepteur contient maintenant des informations sur le réseau wifi de la balise, afin de vérifier qu'il est bien paramétré et son niveau de réception:
et maintenant, dehors, environ 100m de distance entre balise et récepteur, au sol avec un obstacle (gros mur en pierre):
La largeur de bande du wifi de la balise est limitée à 20MHz car c'est la norme définie.
La vitesse d'émission est fixée à 6 Mbps en wifi 802.11g car c'est ainsi qu'on obtient la meilleure portée...
On retrouve les mêmes informations sur l'appli smartphone.
Il est important de bien faire correspondre les versions entre le récepteur et l'appli smartphone pour avoir toutes les infos sans erreur des deux côtés.
Il faut bien comprendre que toutes ces informations ne modifient pas la trame émise par la balise qui elle, reste normalisée comme prévue au départ.
Les informations affichées sur le mini site web du récepteur et de l'appli smartphone sont construite sur le récepteur directement, en combinant la trame officielle et d'autres infos que le sniffeur wifi capte (vitesse, bande, canal, rssi entre autres)
Voilà ce que ça donne sur l'appli smartphone:
on voit bien que le sniffeur côté récepteur trouve un réseau wifi sur le canal 6, d'une bande de largeur 20MHz.
La vitesse d'émission de cette trame est de 6 Mbps afin d'optimiser la portée pour la trame.
Le RSSI donne une indication de la qualité du signal, plus il est bas et moins c'est bon...
Les tests de portée
Afin de juger de l'efficacité relative de tout ça, je vous invite à voir les cartes résumant mes tests de portée avec la balise esp01s:
on est à un max de 200m de portée, sans savoir si c'est le récepteur qui perd la liaison wifi ou la trame qui est émise à un max de 200m...
donc pour retrouver un modèle c'est pas top...
Voilà, ça relativise bien l'intérêt de tout ça à part pour avoir une balise DGAC faite soi-même!
La suite:
avec une antenne externe sur le récepteur, j'arrive à 350m ce qui est bien mieux, et je me rends compte si ça se trouve que je ne vais pas plus loin avec mon planeur...
voilà un exemple de relevés sur un vol de 40mn environ, vu la concentration des points je n'ai pas l'impression de perdre des trames à cause de la portée trop faible:
voilà une analyse croisée entre la balise et la vario, installés tous les deux dans le planeur en même temps pour ce même vol:
la balise est en bleu
pas si mal que ça côté altitude, les écarts sont dus à la fréquence qui n'est pas la même, 3s pour la balise et 1s pour le vario.
voilà un autre exemple d'exploitation des données de la balise, ici un essai de calcul de finesse de mon planeur:
un extrait des logs dans le tableau, la courbe de descente, et un petit calcul de distances entre les coordonnées.
ça donne une finesse de 8 (j'ai divisé la distance totale par l'atitude perdue totale)
on remarque deux points rouges, avec une grosse perte de trame entre les deux... pourtant, le RSSI est correct, la distance est classique, la vitesse du planeur aussi.
Avec la balise esp32u
bientôt :-)
Conclusion
Pour discuter de tout ça, c'est ici que ça se passe: