Micro-EMS Arduino

(Mise à jour par Benjamin le 17/04/2023)

Une nouvelle version du Micro-EMS, basée sur une carte Teensy 4.0, est désormais disponible.

l’EMS (Engine Monitoring System) est l’appareil dédié à la surveillance du fonctionnement du moteur. Il centralise les informations de tous les capteurs et affiche les résultats en temps réel sur un écran. Les paramètres habituellement surveillés sur un avion léger monomoteur à pistons sont la vitesse de rotation (RPM), la pression et la température de l’huile, les températures des culasses et des gaz d’échappement, le débit et le niveau du carburant, la pression d’admission, la tension et l’intensité.

Le micro-EMS présenté ici repose sur une carte Arduino Uno. Micro-EMS, car en dehors de sa petite taille, il ne surveille qu’un petit nombre des paramètres cités plus haut. A savoir le RPM, le débit et le niveau du carburant et la tension du bus principal. Dans la première version du micro-EMS, le courant de charge/décharge de la batterie était également monitoré, mais désormais, l’EMS principal assure cette fonction de façon nettement plus efficiente. Les paramètres surveillés sont transmis à l’EMS par le CAN Bus, cette fonctionnalité a également été rajoutée à la seconde et actuelle version.

L’avion sur lequel il est monté est motorisé par un Rotax 912 80 CV dont les allumeurs électroniques Ducati d’origine ont été remplacés par des boîtiers programmables adaptés du modèle Ignitech DC-CDI-P2. Ces allumeurs sont configurés pour générer une impulsion par tour sur leur sortie “Tacho”, vers le compte-tours. Cette sortie délivre un signal carré avec un rapport cyclique de 50% et une amplitude constante de 16 volts quelque soit le régime.

L’affichage

L’affichage utilise un écran couleur Adafruit 2,2″ TFT LCD 240×320, toutes les informations sont affichées sur un seul écran. Cet écran économique n’est pas “sunlight readable”, mais, placé sous la casquette du tableau de bord, il est facilement lisible en vol en toutes circonstances (fig. 1).

Figure 1 : La première version du micro-EMS en vol, sur le tableau de bord du MCR Sportster
Figure 2 : Le système utilise une carte Arduino UNO, couplée à un protoshield Keyes sur lequel sont soudés les quelques composants externes
Figure 3 : Schéma et photo du protoshield de la première version avec les composants en place
Figure 4 : Le micro-EMS V2 en place sur le tableau de bord. Le module CAN bus est visible sur le dessus.

Faisant de nombreux appels directs aux registres du microcontrôleur ATmega328P, le programme du micro-EMS ne fonctionne que sur les cartes Arduino Uno, Nano ou compatibles.

Fonction compte tour :

L’étage d’entrée, pour le traitement préalable du signal en provenance des allumeurs, fait appel à un optocoupleur à bascule de Schmitt. Avec ce même étage d’entrée, le système pourrait aussi bien exploiter le signal délivré par le capteur natif du Rotax.

Le signal ainsi traité est appliqué sur la broche digitale 3 de l’Arduino, puis exploité en utilisant le Timer 1, et l’interruption externe Int1.

Le programme mesure la période du signal, et en déduit sa fréquence. Référence ici. C’est la plus efficace des différentes solutions testées, pour mesurer la période d’un signal de ce type et dans la gamme de fréquences qui nous intéresse. Les techniques simples qui comptent le nombre d’impulsions pendant un certain intervalle de temps sont peu réactives et peu précises, car la fréquence est basse. L’utilisation de la fonction PulseIn s’est également avérée décevante.

En vol, la différence d’affichage du RPM entre le micro-EMS et le compte tours digital commercial installé sur le tableau de bord n’excède jamais 10 tours par minute. Un facteur correctif de la fréquence du microcontrôleur est à appliquer pour obtenir cette précision, voir les remarques dans le code source du programme.

Fonction ampèremètre :

La version 1 du micro-EMS affichait l’intensité du courant de charge ou de décharge de la batterie, grâce à un amplificateur numérique de tension High End bidirectionnel INA219 12 bits. Le système exploitait le shunt 50 mV/20A/0.0025Ω monté à la construction dans le circuit électrique de l’avion. Ce n’était ni très précis, ni très exact, la résolution était faible. Dans la version 2, cette fonction a été supprimée. Les mesures de courant sont réalisées dans l’EMS “principal”.

Fonction voltmètre :

Le programme affiche en continu la tension en volts, mesurée également par l’INA 219. La mesure par la carte Arduino elle-même, via une entrée analogique, et un pont de résistances diviseur de tension aurait été tout aussi efficace. Mais avec la carte INA, pas de pont diviseur, et aucun calibrage n’est nécessaire.

La tension affichée ne diffère jamais de plus de 0.1 volt par rapport à un multimètre de référence.

Fonction “Idiot Lamp” :

Une LED RGB joue le rôle “d’Idiot Lamp intelligente”. Si la tension du bus est supérieure à 13,3 V, la LED est verte, c’est une situation normale. Si la tension baisse alors que la vitesse de rotation du moteur est en dessous d’un certain seuil, elle est rouge, fixe. C’est aussi une situation normale, lorsque le moteur est au ralenti. Par contre, si la tension baisse avec un régime moteur plus élevé, elle clignote (avec l’aide du Timer 2) pour mieux attirer l’attention : situation très anormale !

Avec ces premières fonctions, l’arduino UNO (ou Nano) a encore de la ressource. Et il y a encore de la place sur l’écran. Prochaine étape : la gestion du carburant.

Gestion du carburant :

L’EEPROM est disponible pour mémoriser le niveau de carburant dans le réservoir après extinction du système.

PCINT1 et les broches analogiques A1 et A2 sont utilisées par les boutons d’ajustement du niveau d’essence dans le réservoir en début de vol, grâce à la bibliothèque PinChangeInterrupt.h.

La broche analogique A0 est utilisée pour la mesure en continu du niveau réel de carburant dans le réservoir grâce à la jauge. Il s’agit d’une sonde résistive haute résolution WEMA S3 (0 à 190 Ohms) de 35 cm, sa résistance varie entre 0 ohms réservoir vide et 190 ohms avec le plein. Les 29 reed switches de cette sonde assurent une résolution très honnête. Contrairement aux sondes capacitives, cette sonde est insensible à la nature du fluide jaugé : SP 98 ou 100LL, ou mélange des deux, peu importe.

La sonde est utilisée en série avec une résistance de 220 Ohms pour constituer un pont diviseur. Cette résistance est située en amont du connecteur 3 broches de la sonde elle-même, de façon à ne pas risquer de griller l’Arduino en mettant distraitement le contact alors que le réservoir a été déposé ! Si cette résistance était placée sur le Shield “maison”, l’oubli de reconnecter la jauge appliquerait alors directement du 8 volts sur A0. En effet, l’ensemble du Micro-EMS est alimenté en 8 volts par un régulateur L7808. On a également placé un condensateur de 100µF dans ce connecteur pour amortir les variations rapides de la tension aux bornes de la sonde, liées aux ondulations à la surface du carburant.

On souhaite utiliser l’interruption externe INT0 sur la broche 2 et le Timer 0 pour le fuel flow. Mais le Timer 0 est déjà utilisé par l’environnement Arduino pour les fonctions delay(), millis() et micros(), et pour de la PWM sur les broches 5 et 6… Il faut donc ruser, référence ici. Voir également les remarques dans le code source.

Le fuel flow utilise donc le Timer 0, Int 0 et la broche digitale 2. Le capteur de débit “Red Cube” (Electronic International FT-60), avec une résistance pull up de 10kΩ sur le bus 14v, génère en vol un signal carré, la largeur des impulsions est très variables, la fréquence du signal est hautement instable. Dans ces conditions, la méthode employée consiste à compter les impulsions pendant un intervalle de temps donné, puis à lisser le résultat pour stabiliser l’affichage du débit.

Les résultats obtenus avec ce calculateur de carburant sont très satisfaisants. Comme on le voit sur la vidéo ci-dessous, l’affichage est stable (contrairement à la caméra, tenue à la main, et qui subit quelques turbulences…). En fin de vol, même prolongé (jusqu’à 4 heures), les niveaux de carburant restant, soit affichés par le calculateur, soit mesurés manuellement dans le réservoir, ne diffèrent jamais de plus d’un litre. Et ce niveau est toujours dans l’intervalle de 3 à 4 litres mesuré par la sonde Wema.

Vidéo du Micro-EMS Arduino en vol.

Chronomètre :

Et enfin, comme l’échantillonnage du fuel flow est réalisé exactement toutes les secondes par le Timer0, on en profite pour ajouter une dernière fonction annexe à ce micro-EMS : l’affichage du temps écoulé depuis la mise en route du moteur. Le chronomètre ne “tourne” en effet que s’il y a consommation d’essence.

CAN Bus

Dans la version 2 du micro-EMS, un module Joy-IT SBC-CAN01 ajoute une interface avec le CAN Bus.

Le sketch Arduino

La plupart des mesures font l’objet d’un lissage par calcul d’une moyenne glissante, ce qui assure une excellente stabilité/réactivité de l’affichage. Un filtre récursif à réponse impulsionnelle infinie serait plus simple à implémenter (c’est ce qui est fait dans le programme EFIS). Voir la page du site consacrée aux filtres.

Tous les calculs se font sur des entiers pour éviter les variables de type float au microcontrôleur ATMega328 qui ne possède pas d’unité de calcul en virgule flottante.

Deux constantes du programme sont à personnaliser, elles apparaissent par commodité au tout début du programme :

– le facteur K, en fonction des caractéristiques du capteur de débit utilisé,

– la fréquence vraie de l’horloge de la carte UNO, pas toujours exactement égale à 16 MHz.

Ces deux constantes sont à ajuster par approximations successives au cours des premiers vols, ce qui nécessite un nouveau téléversement à chaque fois. C’est moins ergonomique qu’un encodeur rotatif couplé à un système de menus, mais c’est beaucoup plus simple !

5 réflexions sur « Micro-EMS Arduino »

  1. Bonjour Benjamin,
    Merci beaucoup pour ta réponse.
    J’utilise un MGL Stratomaster Véélocity Flight-2 pour l’instrument.
    J’ai aussi un adaptateur de différence pour débitmètre.
    Pour les  résistances pull-up je ne pourrai pas te dire, je ne suis pas
    un spécialiste.
    Je vais calibrer correctement le facteur K sur mon
    instrument ce week-end pour faire des essais. Si j’ai du mieux je peaufinerais
    avec la formule que tu m’as déjà donnée.
    Bonne soirée et encore merci
    Alain

  2. Bonjour Alain,
    Le facteur K du Red Cube est de 68000 (soixante huit mille) impulsions par US gallon. Soit effectivement 17964 (dix-sept mille neuf cent soixante-quatre) impulsions par litre.
    Théoriquement, avec deux débitmètres, l’un sur le circuit de sortie du réservoir, et l’autre sur le circuit de retour au réservoir, le calculateur de carburant mesure les deux débits, puis calcule la différence qui correspond au débit vers les carburateurs. Le Micro-EMS décrit sur cette page ne permet pas de connecter deux capteurs de débit. Quel calculateur de carburant utilisez-vous ? Si elles ne sont pas incluses dans le calculateur, avez-vous monté des résistances “pull-up” sur le fil blanc du FT-60 ? En l’absence de pull-up, le Red Cube ne fournit aucun signal de sortie, ce qui n’est pas le cas de tous les capteurs de débit.
    Bonne journée,
    Benjamin

  3. Bonjour Benjamin
    J’ai deux FT-60 “Red Cube” sur mon ulm moteur BMW, un pour l’allé et un pour le retour mais cela ne fonctionne pas.
    J’ai une question: le facteur k est bien dix-sept mille neuf cent soixante-quatre ou bien
    17 virgule 964
    Par avance merci
    Bonne journée
    Alain

  4. Bonjour Alain,
    Voici un lien vers le site du fabricant du FT-60 “Red Cube”.
    Le facteur K est de 68.000 impulsions par gallon US, soit 17.964 impulsions par litre.
    Ce facteur K est en principe identique pour tous les capteurs, mais le fabricant signale que la configurations de l’installation peut affecter le facteur K.
    De fait, dans le cas du micro EMS décrit sur ce site, et pour l’avion sur lequel il est en service, le facteur K utilisé est de 220 impulsions par centilitre, soit 22.000 / litre.
    En aviation non certifiée, seuls des relevés exacts, avant et après des vols suffisamment longs (au moins 2 heures dans l’idéal), permettent de déterminer précisément, pour chaque avion/ULM, le facteur K à utiliser.
    Pour mémoire, la formule corrective à appliquer est la suivante :

    K corrigé = (quantité consommée calculée par le débitmètre x K actuel) / quantité consommée mesurée.

    Bons vols,
    Benjamin

  5. Bonjour
    Je recherche le facteur K du capteur de débit FT-60 (cube rouge)
    Pourriez vous me le communiquer SVP
    Par avance merci
    Cordialement
    A. Maffre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

The maximum upload file size: 5 Mo. You can upload: image, document, text, archive. Drop files here