4.1.2 – Réalisation d’une jauge de carburant avec un arduino (pour récepteurs D, S, X, …)

Mise en garde : je vous déconseille de vous lancer dans cette réalisation si vous n’avez pas quelques connaissances sur la mise en oeuvre de l’arduino (dans ce cas vous pouvez vous orienter vers la jauge à carburant simplifiée décrite au § 4.1.3). C’est l’occasion de regarder les tutoriels sur la toile pour vous former. Après deux semaines studieuses vous aurez les notions suffisantes pour vous lancer. J’ai essayé d’être le plus exhaustif possible. Il vous faudra malgré tout paramétrer du code (config.h) pour l’adapter à votre modèle et activer où désactiver certaines lignes en commentaire dans le code pour la mise au point initiale.

La mesure du niveau de carburant s’effectue avec un détecteur capacitif (fait maison) et un arduino.

Le principe de la mesure de la capacité a évolué par rapport à la version que j’avais précédemment décrite. La mesure de capacité ne s’effectue plus en recueillant la tension aux bornes d’un diviseur capacitif auquel on applique un échelon de tension (trop de problèmes liés à la longueur des fils (inductifs) du réservoir)). La capacité est déterminée par la mesure de tension aux bornes d’un condensateur (le réservoir), pendant sa charge, via une résistance de 2Mohms, ce qui semble élevée mais nécessaire lorsqu’on cherche le pF. La notion de temps (taux = RC) est importante ce qui justifie l’appel à quelques instructions en assembleur dans le code.

Cette version permet de réaliser une mesure de niveau sans installer des électrodes dans le réservoir.

Le réservoir n’est plus percé. Il est seulement revêtu de deux bandes adhésives cuivrées qui constituent les armatures d’un condensateur.

Pour améliorer la mesure du niveau de carburant une centrale inertielle (IMU) GY 521 contrôle l’attitude de l’avion. Les mesures s’effectuent uniquement lorsque l’avion vole à faible inclinaison (angles de roulis et de tangage < 30°, réglables par logiciel).

Pour réaliser ce montage il faut :
– 1 arduino pro mini ATmega328 (5V, 16MHz) à 2 euros l’arduino pro mini 3.3V, 8MHz, n’est pas assez rapide. «Vous êtes prévenus»
– 1 centrale inertielle GY 521 MPU 6050 à moins de 1 euro
– 1 carte de programmation FTDI basic program downloader USB to TTL FT232 for arduino à 5 euros (éviter les clones à moins de 2 euros car vous aurez des problèmes de téléversements surtout avec Windows 10)
– du scotch cuivré largeur 50mm
– une résistance de 2MΩ pour la mesure de capacités (charge le condensateur à mesurer)
– une résistance de 4.7 KΩ pour protéger l’entrée S_PORT du récepteur S, X, …
– une résistance de 4.7 KΩ et un condensateur de 2.2µF pour réaliser un filtre passe-bas si vous utilisez un récepteur de la série D (filtrage de la tension PWM)
– des câbles M/M, M/F, F/F et des prises M, F Futaba pour effectuer l’interconnexion entre les modules et pour réaliser les essais
– de la gaine thermorétractable pour fils et modules (GY 521 et arduino)
– un fer à souder 60W maxi avec de la soudure, …

Les récepteurs utilisés pour les tests sont un S6R (S_PORT) et un D8R-II Plus (entrée A2) de FrSky.

Le réservoir est recouvert de 2 bandes scotch cuivré de 50 mm de largeur qui constituent les armatures d’un condensateur. Les variations de capacités sont obtenues avec les armatures du condensateur en mode plan. La formule théorique de calcul de capacité d’un condensateur plan ne s’applique plus car la longueur de l’armature n’est plus très grande devant l’épaisseur du diélectrique imposée par les dimensions du réservoir (le diélectrique est constitué des 2 parois du réservoir et du carburant). En revanche, on suppose que la valeur de capacité reste quasi proportionnelle au niveau de carburant dans le réservoir.

Le réservoir avec la voie de mesure (ancienne photo : éviter de laisser les fils de mesure en mode sindex pour réduire la capacité parasite)

Les pin A1 et A0 de l’arduino sont connectées à la résistance de 2 MΩ
Les pin A0 et la masse de l’arduino sont connectées au réservoir
La pin A4 de l’arduino est connectée à la pin SDA du GY 521
La pin A5 de l’arduino est connectée à la pin SCL du GY 521
La pin 2 de l’arduino est connectée à la pin INT du GY 521.
La pin 4 de l’arduino est connectée via une résistance de 4.7 KΩ à l’entrée S_PORT du récepteur
La pin 6 de l’arduino est une sortie PWM (f = 980 Hz) après un filtrage passe-bas avec une résistance de 4.7 KΩ et une capacité de 2.2 µF, elle délivrera une tension continue sur l’entrée A2 du récepteur, proportionnelle à la capacité mesurée.

L’alimentation de l’arduino s’effectuera par la prise S_PORT du récepteur pour simplifier le câblage.

Je conseille d’alimenter l’arduino directement sur l’entrée Vcc plutôt que par l’entrée RAW si vous utilisez une alimentation NiMH à 4 éléments. La précision de mesure s’en trouvera améliorée.

L’alimentation du GY 521 s’effectuera par une reprise de câblage sur le Vcc de l’arduino et la masse.

Mise à jour : ayant modifié l’alimentation de ma réception avec 2 accus LiFe (6.6V) sans UBEC, je conseille dans ce cas d’alimenter l’arduino par l’entrée RAW et le GY 521 par la sortie Vcc de l’arduino.

Les avertis me diront que la datasheet indique que l’alimentation du GY 521 ne doit pas dépasser 3.3V mais avec une batterie NiMH de 4 éléments ou avec l’alimentation Vcc de l’arduino ça passe…

L’arduino et le GY 521 sous thermorétractable cablés en S_PORT. On visualise la prise qui va sur le récepteur et la prise qui va sur le réservoir
Le circuit de programmation FT232RL FTDI 5V 3.3V
L’arduino raccordé au circuit de programmation (à l’envers voir texte)

Mise en garde : certains arduino pro mini ont le brochage : GND, GND, VCC, RXD, VXD, DTR inversé. Il faudra donc retourner la carte sinon vous chercherez (longtemps … ???) pourquoi le téléversement du logiciel dans l’arduino ne fonctionne pas.

Précautions de câblage :
– Réduire au maximum la longueur des fils de la voie de mesure et éviter de les laisser cote à cote en mode sindex car ça augmente la capacité parasite (même si on effectuera une calibration).
Maintenant que vous avez effectué vos 2 semaines de formation, ce qui va suivre n’aura plus de secret pour vous.

Il faut à présent installer toutes les librairies dans l’IDE Arduino :
Wire.h
I2Cdev.h
MPU6050.h
math.h
FrSkySportSensor.h
FrSkySportSensorFcs.h
FrSkySportSingleWireSerial.h
FrSkySportTelemetry.h
Google vous permettra avec le renfort de github.com de trouver les librairies ( I2Cdev.h
MPU6050.h).

Pour les librairies FrSkySportxxx, vous irez voir le post :
FrSky S-Port telemetry library – easy to use and configurable
https://www.rcgroups.com/forums/showthread.php?2245978-FrSky-S-Port-telemetry-library-easy-to-use-and-configurable

Le fichier FrSkySportTelemetry_20190824.zip (ou une version plus ancienne) fera votre bonheur.

Le fichier de configuration config.h sera créé par nos soins.

Il ne reste plus qu’à installer dans un même répertoire au nom de Test72_SPORT_3108, les librairies, config.h, Test72_SPORT_3108.ino et lancer la compilation puis le téléversement dans l’arduino.

lien xlsx : Test72_SPORT_3108

lien doc : Test72_SPORT_3108

A cause des protections WordPress, il n’est pas possible d’enregistrer un fichier .txt on va donc créer un fichier .xlsx

Il faut ouvrir le fichier Excel puis ctrl A (pour tout sélectionner) puis ctrl C (pour copier dans le presse papier)
On ouvre le bloc note ctrl V (pour coller) et on enregistre sous : Test72_SPORT_3108.ino
ça fonctionne sans perdre le formatage.

lien xlsx : config

lien doc : config

Même manipulation pour obtenir : config.h

Beaucoup de commentaires on été ajoutés dans le code pour une meilleure compréhension.

Le fichier config.h vous permettra de définir les valeurs de capacité : capacité parasite, capacité réservoir vide, capacité réservoir plein pour chaque modèle.
La mesure de la capacité parasite devra se faire par l’étape calibration. Suivez bien les commentaires du code. Il va falloir activer ou désactiver certains commentaires dans void setup() et void loop() en fonction de ce que vous voulez faire. De plus certaines valeurs sont à modifier en mode debug.

Pour la calibration vous pouvez également utiliser le code (que j’ai repris et modifié pour mon besoin) disponible sur le lien suivant :
https://openrcforums.com/forum/viewtopic.php?f=86&t=6080&p=145190&hilit=openxsensor#p145190
Capacimètre spécial faibles valeurs, de 0.1pF à 100pF de Christophe Juillet

Vous pourrez améliorer la précision de mesure avec des valeurs de capacités étalons en modifiant le coefficient K = 0.059, que je n’ai pas eu besoin de modifier.

La mesure de la capacité parasite se fera l’équipement installé dans l’avion avec le réservoir vide (via le programmateur FDTI. Prenez soin dans ce cas de débrancher le câble S_PORT du récepteur, car vous allez alimenter les servos qui vont bouger dans tous les sens). Dans mon application, la valeur de la capacité parasite est de l’ordre de 40 pF (c’est beaucoup)
La mesure de la capacité du réservoir vide devrait être voisine de 0 pF une fois la valeur de capacité parasite retranchée
La mesure de la capacité du réservoir plein sera de l’ordre de 25 pF une fois la valeur de capacité parasite retranchée.
Dans le fichier config.h vous sélectionnerez le modèle que vous souhaitez configurer #define avionx et vous rentrerez les paramètres ci-dessus.

Certains auront remarqué qu’il y’a une fonction qui mesure le temps de boucle principale. Le timing est critique ne rajoutez pas des délais ou des instructions gourmandes dans le code car vous perdrez la télémétrie. C’est pour cette raison que les 2048 mesures de capacité s’effectuent par pas de 4 dans la boucle principale (il faut donc 512 passages dans la boucle principale pour obtenir une mesure de capacité, soit environ 1 seconde).

Une fois ce travail effectué vous pourrez fixer le GY 521 sur le récepteur (par exemple) avec un scotch double face pour extérieur.

Si vous utilisez comme moi une Taranis X9D Plus, rendez-vous dans le menu TELEMETRY activez la découverte de nouveaux capteurs et vous verrez apparaître :
– VFAS : tension proportionnelle à la valeur de capacité de 0V à 3V, pendant la phase d’initialisation la tension prend la valeur de 3.3V
– Curr : c’est en fait l’indicateur des angles de roulis et de tangage de l’avion. Pour la valeur 1 l’attitude de l’avion est dans la plage autorisée pour faire la mesure du niveau de carburant. Si valeur 0 les angles sont trop importants et il n’y a pas de mesure.

Pour la mise en oeuvre, il suffit de remplir le réservoir avant la mise sous tension du récepteur (et donc de l’arduino) de l’avion. A la mise sous tension le code fera la calibration des angles pour mesurer l’attitude de référence et mesurera le niveau initial de carburant dans le réservoir pendant les 5 premières secondes. Donc avion à plat et pas de mouvements….
Rappelez vous que le niveau de carburant ne peut que diminuer une fois le récepteur allumé (c’est plutôt logique). Une précaution supplémentaire (ecrêteur dans le code) car lorsque l’avion revient à plat après une inclinaison, le carburant visqueux reste devant les armatures du condensateur quelques secondes, ce qui fausse la mesure de niveau !

Le dispositif installé dans l’avion : à gauche l’arduino sous thermorétractable (sauf les pins de programmation sous scotch électricien noir pour mise à jour éventuelle), au centre le GY 521 collé au double face sur récepteur, à droite les deux fils noir et blanc qui vont sur le réservoir.

Vous pouvez à présent vous rendre sur la page 4.2.3 pour obtenir le script LUA.

Voici un exemple d’affichage :

Niveau de carburant 55%

Bons vols sans panne sèche !

N’hésitez pas à laisser un commentaire si vous rencontrez des difficultés.

Une réflexion sur “4.1.2 – Réalisation d’une jauge de carburant avec un arduino (pour récepteurs D, S, X, …)

Laisser un commentaire