Voici un recueil de modifications (matérielle et logicielle) effectuées sur la base des travaux présentés précédemment sur la réalisation de balises de signalement électronique pour modèles réduits volants.
Objectifs
Une balise moins encombrante, moins gourmande en électricité et surtout ayant la capacité d’être paramétrable de manière autonome et déplaçable d’un modèle à l’autre.
Ces modifications portent à la fois sur la partie matérielle et sur la partie logicielle.
Je ne change en revanche ni le contrôleur utilisé (ESP32), ni les librairies utilisées droneID_FR et TinyGpsPlus qui font parfaitement le travail.
Une seule balise pour tous les modèles
La première chose qui me chagrine est cette idée qu’il faille se doter de plusieurs balises en fonction du type de modèles (avions, drones, planeurs) et de leur gamme de masse. En effet, les instructions de la FFAM imposent d’avoir des identifiants de balise différents suivant la combinaison Pilote/Type de Modèle/Plage de Masse du modèle. Pour rappel, les gammes sont les suivantes :
Pour les types de modèles, les groupes sont les suivants :
- Groupe 1 : aérostat captif / aéromodèle de vol circulaire / aéromodèle de vol libre / montgolfière
- Groupe 2 : planeur, aile (non motorisé) / dirigeable / parachute, parapente / aéronef à ailes
- battantes
- Groupe 3 : hélicoptère / multirotors / convertible / combiné / paramoteur / autogire
- Groupe 4 : avion, aile, planeur (motorisé)
Pour les plages de masse, les groupes sont les suivants :
- Entre 800 g et 2 kg
- Entre 2 kg et 4 kg
- Entre 4 kg et 25 kg
- Entre 25 kg et 150 kg
- Plus de 150 kg
J’ai donc décidé d’ajouter des switches sur ma balise pour permettre de choisir le groupe et la plage de masse. Le positionnement des switches aura une incidence sur l’identifiant qui sera émis dans les messages. J’ai donc pris le parti de découper l’identifiant émis ainsi :
000 AM1 00000000 G MMM XXXXXXXXXXXX
Voyons de quelle façon il se décompose.
Les caractères 000
au début de l’identifiant désigne un numéro de constructeur obtenu et utilisable légalement sur AlphaTango. Les personnes qui font elles-même leurs balises peuvent utiliser 000
comme indiqué ici.
AM1
est censé définir le modèle de balise, ici, c’est le code que j’ai décidé d’affecter à mes premières balises.
Il y a une palanquée de 00000000
que je vais laisser comme ça, comme ils sont au début de l’identifiant de la balise, je n’aurai pas à les saisir dans AlphaTango.
les X
sont remplacés par l’adresse matérielle de la balise (l’adresse MAC de son interface Wifi)
Le G
est remplacé par le type de modèle (1
, 2
, 3
, 4
)
Le MMM
est remplacé par la masse maximale de la plage du modèle :
002
pour les modèles de moins de 2 kg004
pour les modèles entre 2 et 4 kg025
pour les modèles entre 4 et 25 kg150
pour les modèles entre 25 et 150 kg
En théorie, il devrait être nécessaire d’avoir aussi un code comme 999
pour les modèles de plus de 150 kg, mais je ne suis pas concerné !
Les interrupteurs sont donc voués à choisir quelle valeur de G
et de MMM
annoncer. Les interrupteurs sont au nombre de 4.
Les interrupteurs 1 et 2 permettent de choisir le type de modèle :
Groupe choisi | Position Switch 1 | Position Switch 2 |
G1 |
OFF (bas) | OFF (bas) |
G2 |
OFF (bas) | ON (haut) |
G3 |
ON (haut) | OFF (bas) |
G4 |
ON (haut) | ON (haut) |
Les interrupteurs 3 et 4 permettent de choisir le plage de masse :
Groupe choisi | Position Switch 3 | Position Switch 4 |
< 2 kg (002 ) |
OFF (bas) | OFF (bas) |
< 4 kg (004 ) |
OFF (bas) | ON (haut) |
< 25 kg (025 ) |
ON (haut) | OFF (bas) |
< 150 kg (150 ) |
ON (haut) | ON (haut) |
Les habitués du codage en binaire ne seront pas spécialement surpris par ces combinaisons de switches.
Pour expliciter l’usage, prenons quelques exemples :
Ma limande, planeur pur de voltige de 1.8kg est dans le groupe 2 et dans la plage de masse 002, le positionnement des interrupteurs est donc :
Type de modèle G2 |
Plage de masse 002 |
||
Position Switch 1 | Position Switch 2 | Position Switch 3 | Position Switch 4 |
OFF (bas) | ON (haut) | OFF (bas) | OFF (bas) |
Exemple d’identifiant émis : 000 AM1 00000000 2 002 123456ABCDEF
Mon Tucano, avion de 4.5 kg est dans le groupe 4 et dans la plage de masse 025 le positionnement des interrupteurs est donc :
Type de modèle G4 |
Plage de masse 025 |
||
Position Switch 1 | Position Switch 2 | Position Switch 3 | Position Switch 4 |
ON (haut) | ON (haut) | ON (haut) | OFF (bas) |
Exemple d’identifiant émis : 000 AM1 00000000 4 025 123456ABCDEF
Dernier exemple, mon motoplaneur (groupe 4
) de 3.7 kg (plage 004
) impose des interrupteurs dans la position suivante :
Type de modèle G4 |
Plage de masse 004 |
||
Position Switch 1 | Position Switch 2 | Position Switch 3 | Position Switch 4 |
ON (haut) | ON (haut) | OFF (bas) | ON (haut) |
Exemple d’identifiant émis : 000 AM1 00000000 4 004 123456ABCDEF
Les interrupteurs sont simplement connectés sur 4 entrées de l’ESP32, si possible côte à côte et dans le bon ordre pour éviter que les fils ne se croisent trop lors du câblage.
J’ai choisi les IO 12, 14, 27 et 26, dans cet ordre. L’autre pôle des switches est connecté au 3.3V du circuit.
Consommer moins
La balise présentée consomme en continue dans les 130-140 mA. Ça peut sembler faible, mais je n’aime pas que ce genre de dispositif réglementaire ait un impact sur la durée de vol et je sais que l’on peut faire bien mieux.
Côté matériel
Sur la partie matérielle, le GPS préconisé (BN-220) consomme dans les 50 mA en continu, et simplement en le changeant pour des modules plus modernes, il est possible de la faire baisser.
Avec des modèles de chez Quectel comme le L80-R (celui visiblement utilisé dans la balise commerciale de Naveol) ou le L96 on descend dans les 20-30 mA.
Par la même occasion, l’encombrement et la masse sont également réduits.
Attention toutefois, le module BN-220 avait l’avantage d’embarquer une petite batterie qui rend théoriquement le temps d’acquisition plus rapide.
Mes tests n’ont pas nécessairement confirmé cette théorie.
Autre point sur la partie matérielle dont nous aurons l’occasion de reparler, il est intéressant de retirer tous les composants gourmands en énergie (l’adaptateur USB notamment) et inutiles en vol.
Pour ce faire, j’ai pris le parti de partir sur un ESP32 seul que j’ai assemblé.
C’est aussi l’occasion de choisir entre une module avec une antenne intégrée ou un connecteur pour installer une antenne externe comme on en trouve sur nos récepteurs 2.4 GHz.
Dernière source de consommation de courant, le LDO qui convertit l’alimentation électrique fournie par le modèle réduit en 3.3V pour l’ESP32 et le GPS. Le modèle utilisé, un AMS1117-33 a deux défauts qui mériteraient de lui chercher un remplaçant :
- Chute de tension forte, ce qui semble peu approprié aux alimentations avec 1 seul LiPo
- Une consommation à vide élevée, de l’ordre de 5 mA
Mais il a pour lui l’avantage de permettre de fournir largement assez de puissance au moment des pics de consommation du dispositif (lors des émissions Wifi, qui ne durent quelques millisecondes) et de supporter une tension d’entrée forte, parfaitement compatible avec les alimentations 5V jusqu’à 8.4V (2S LiPo pour le HV) de nos modèles réduits.
Il est en plus très facile à trouver sous forme de module prêt à l’emploi.
Le HT7833 pourrait être une solution plus intéressante, mais à confirmer.
Côté logiciel
Le premier axe de travail a consisté à simplement abaisser la fréquence de fonctionnement de l’ESP32.
80 MHz (la vitesse de fonctionnement minimale possible) suffisent amplement pour les tâches qu’il a à exécuter : attendre des messages sur le port série de communication avec le GPS, faire quelques calculs très simples et émettre une message Wifi très rarement.
Pour être suffisamment fin dans les réglages, j’ai préféré quitter l’environnement de développement Arduino et utiliser directement ESP-IDF.
Le second axe consiste à mettre l’ESP32 en mode « économie d’énergie » le plus souvent possible.
Il est capable de l’endormir de façon périodique entre deux messages GPS. Ils sont espacés d’une seconde, ce qui est amplement suffisant et cela laisse donc 90 à 95 % du temps où il n’y a rien à faire.
Autant mettre en sommeil le processeur au repos.
En fonction du modèle de GPS utilisé, deux stratégies peuvent être adoptées :
- Le BN-220 envoie de façon très régulière ses messages. Il est donc assez facile de compter précisément combien de temps dormir avant le message suivant
- Les GPS de la marque Quectel (L80-R et L96) sont un peu moins réguliers, mais ils sont capables de prévenir quand ils vont envoyer le message au travers d’un fil supplémentaire : PPS ou TimePulse. Dans ce cas, on ne compte pas combien de temps dormir, on attend à se faire réveiller par le GPS puis lire le port série
Quelque soit la stratégie, il est intéressant de rendre la conversation entre le module GPS et le contrôleur la plus courte possible. Par défaut, les modules GPS envoient beaucoup trop d’informations et lentement qui plus est. Ces deux caractéristiques font que l’on perd un temps précieux et énergivore à lire le port série.
Le boulot consiste donc à configurer les modules GPS pour les rendre plus véloces et moins verbeux :
- Changer la vitesse de dialogue de 9 600 à 115 200 bauds, on passe alors 12 fois moins de temps à lire sur le port série
- Demander de n’envoyer que des informations nécessaires. Pour les connaisseurs, seuls les messages NMEA de type
$GPGGA
et$GPRMC
contiennent des informations intéressantes pour nos chères balises.
Pour les GN-220 tous ces réglages peuvent être faits une fois pour toutes en utilisant l’application U-center fournie par U-Blox.
Pour les L80-R et en partie les L96, il faut faire ça au démarrage du programme.
Emballage final : prendre moins de place et alléger le tout
Voilà, il reste juste à assembler tout ce petit monde dans un paquet le plus compact et léger possible.
Comme il s’agit pour le moment de prototypes, je n’ai pas encore lancé la réalisation de PCB et travaille à l’artisanale et au fer à souder. Le résultat, sans être élégant, a le mérite d’être moins encombrant que la version initiale, beaucoup plus simple à mettre en œuvre. Attention, on se lance dans de très petites soudures, assez nombreuses et avec assez peu d’espace pour travailler.
Quelques contraintes doivent être respectées pour l’assemblage :
- Une face relativement plane pour fixer (avec du Velcro par exemple) la balise sur un support plat et horizontal comme une platine par exemple
- Le module GPS avec l’antenne bien vers le haut et les interrupteurs facilement accessibles.
- Mettre au moins de la gaine thermo pour emballer le tout
- Rendre la LED de signalisation facilement visible, sur la même face que le GPS et les switches.
J’ai pris le parti de toujours rendre le module GPS démontable au travers d’une prise. C’est déjà le cas pour le BN-220, et j’ai décidé d’en faire de même pour les L80-R et L96, même si j’aurais pu les souder directement.
Ça reste très pratique lors de la mise au point ou de la configuration de pouvoir les brancher directement sur un PC avec un simple adaptateur USB-Série.
J’ai réutilisé des connecteurs 6 fils (les mêmes que juste après), même si 5 sont réellement utilisés.
Le fait de retirer l’adaptateur USB du dispositif impose d’ajouter un autre connecteur 6 fils pour permettre le débogage et la programmation de l’ESP32. Les fils à connecter : +3.3V, masse (GND), TX0, RX0, IO0 et Reset (EN).
Pour la partie alimentation, j’ai donc utilisé un module AMS1117-3.3V dans sa version compacte (avec des composants sur les deux faces du PCB).
J’ai retiré la broche 3 pins pour y souder des fils. J’ai également retiré la LED et sa résistance de 1 kΩ pour les mettre sur une GPIO de l’ESP32.
Elle sert à l’indication de l’état de fonctionnement de la balise : acquisition, recherche de position initiale, fonctionnement normal.
Le schéma logique ressemble à ça (cliquer pour agrandir) :
La disposition physique ressemble à ça (cliquer pour agrandir) :
Quelques remarques
- Le câblage est dans sa version éclatée pour plus de lisibilité, mais en vrai, le module GPS et le module AMS1117 sont assemblés sur la carte principale
- Il y a 5 fils pour connecter le module GPS, mais si vous choisissez l’option BN-220, seuls 3 fils suffisent : 3.3V, GND et le fil blanc/gris qui permet au GPS d’envoyer des données vers l’ESP32. Les fils vert et jaune ne sont utiles que dans le cas des GPS L80-R ou L96
- le fil très moche de masse peut en fait reprendre la masse n’importe où sur l’ESP32, même sur le blindage métallique.
Résultats
Le résultat de tous les composants assemblés donne les deux prototypes qui suivent.
Version | Poids | Consommation hors pic d’émission |
---|---|---|
BN-220 version initiale | 14 g | 130-140 mA |
BN-220 optim. avec swiches | 11 g | 50-60 mA |
L80-R optim. avec swiches | 9 g | 25-40 mA |
L96 optim. avec swiches | 6 g | 25-40 mA |
Côté liste des courses :
- Niveau GPS, au choix :
- Un ESP32. Choisir le ESP32-WROOM-32D pour la version avec antenne intégrée ou le ESP32-WROOM-32U pour la version à antenne externe.
- Le LDO AMS1117 3.3 V (par 5).
- Les connecteurs (par 10). Choisir les modèles SH 1.0, en version 10 cm 6 pins si vous n’avez pas peur de faire des soudures très proches (1mm entre chaque plot).
- Des blocs de 4 switches version gros modèle (par 10) ou petit modèle (choisir les black smd 1.27, par 5).
- Pour la résistance de 10kΩ entre le 3.3 V et le Reset, c’est plus compliqué de trouver des résistances par petites quantités. J’ai personnellement fait de la récup sur des cartes. Mais je pense que celles-ci doivent faire l’affaire.
- Côté antenne, j’ai récupéré des antennes 2.4 GHz de récepteurs FrSky ou Spektrum de 20 cm de longueur environ. Sans faire de mesures précises, j’ai constaté des RSSI toujours meilleurs avec une antenne externe. J’ai l’impression que celles-ci ou celles-ci pourraient convenir.
- Côté connectique avec le PC, je travaille souvent avec l’adaptateur fourni dans ce kit. Sinon, un adaptateur standard peut faire l’affaire, mais il faudra jongler un peu avec les fils Reset(EN) et Prog (IO0) pour basculer l’ESP32 en mode programmation. Celui-ci a l’air très bien car il semble le gérer automatiquement, mais il est un peu plus cher.
En cadeau et parce que c’est bien pratique pour vérifier que tout fonctionne, un récepteur de messages a été codé vite fait sur la base du code initial.
Arnaud Mazin