Catégories
EMS Moteur

Moteur : EMS Arduino

J’ai réalisé un petit EMS bon marché sur une base Arduino . (Coût du prototype environ 60 Euros avec les capteurs, les plaquettes de test et les composants).

Il est composé d’un module d’acquisition « Arduino Nano » à placer dans le compartiment moteur et d’un couple « Arduino Mega » / afficheur TFT de 3.5″, le tout dialoguant par une liaison série.

L’image ci dessous montre le prototype réalisé par câblage soudé sur des plaques de test. L’unité d’acquisition sera implantée sur un circuit imprimé après validation lors des essais moteur.

Liste des mesures et capteurs associés

  • Tension Batterie : Mesure par pont diviseur de tension)
  • Courant Batterie : Mesure non intrusive par capteur à effet Hall +/-30 A WCS1800
  • EGT : Thermocouple K + module MAX6675 interface SPI
  • Température Eau : Capteur TMP36GZ (-40/150°C 10mv/°C)
  • Température Huile : TMP36GZ
  • Température compartiment Moteur : TMP36GZ (soudé sur le circuit d’acquisition)
  • Température Air admission : Capteur Peugeot d’origine : NTC (28 kOhms à 0°C / 876 Ohms à 100°C)
  • Pression Air admission : Capteur Peugeot d’origine : (25/369 kPa absolu 0.25/4.75 V)
  • Pression Huile : Capteur 1/4 NPT, 0/100 PSI, 0.5/4.5 V
  • Régime Moteur : Prise W tension alternateur

Ci dessous les capteurs utilisés. (De gauche à droite : pression huile, température eau ou huile, pression + température air admission)

Les sondes de température eau / huile (format transistor , photo en haut au centre) sont soudées à des câbles de liaison isolés par de la gaine thermorétractable. Les sondes sont placées dans des doigts de gant en aluminium ( Photo en bas au centre)

Le capteur de pression d’huile est placé dans la partie basse du moteur sur une platine en aluminium. Il est relié au circuit d’huile par l’intermédiaire d’un tube de petit diamètre pour limiter les échanges thermique et diminuer la température de fonctionnement. (Photo de droite)

Schéma de l’unité d’acquisition

Bien que l’ « Arduino Nano » possède un régulateur 5V intégré la tension 12V est abaissée par un régulateur 7805 en boitier TO-220 pour permettre une meilleure tenue en température.

Chaque capteur externe nécessitant une alimentation 5V est relié par une résistance de limitation afin d’éviter une perte totale de l’unité d’acquisition en cas de court circuit d’un capteur.

Les mesures analogiques (A0 à A7) sont filtrées par un circuit RC.

La varistance de mesure de la température d’admission est alimentée par un pont diviseur de tension (R10, R11) présentant une résistance équivalente de 2.7 kOhms. Cela donne une tension au borne du capteur à peu près linéaire (linéarité +/-4 ° entre 0 et 110 °C)

La tension alternateur pour la mesure de vitesse moteur est redressée en mono-alternance et limitée à 5V par le circuit (D7, D8, R20, R21). Le signal est câblé sur l’entrée interruption INT0

La sortie Tx0 de l’unité d’acquisition est reliée à l’entrée Rx2 de l’unité d’affichage.

Ci dessous le prototype avec du haut en bas:

  • le module courant dans lequel faut passer le câble batterie
  • le module mesure thermocouple
  • Le module Arduino Nano avec alimentation et circuit phase W
  • Une plaquette avec les filtres RC et les connecteurs des mesures

le module Thermocouple relié en SPI .

Unité d’affichage

Le module est composé d’un « Arduino mega » sur lequel est enfiché un afficheur TFT 3.5″ (non tactile). Une plaquette à trou, intégrant un bouton poussoir et une résistance reliés à l’entrée D51, est enfichée dans le connecteur inférieur. Ce bouton poussoir est utilisé pour changer de vue.

Un connecteur placé sur le coté permet de relier l’entrée ligne série Rx2 avec le module d’acquisition.

Ci dessous une photo du module TFT vue de dessous et de l’arduino Mega.

Fonctionnement

Acquisition des données

L’unité d’acquisition envoie toutes les 500ms un message avec les valeurs codées en ASCII sous forme d’entiers de 5 digits et séparés par un espace. La première donnée du message est un compteur incrémenté à chaque cycle. Les valeurs nécessitant des décimales sont transmises par multiple de 10 (Exemple : 1/10 Ampère pour la mesure de courant). La longueur totale du message est de 66 octets (Compteur + 10 mesures). Ce format permet de lire en clair les données transmises à l’aide du moniteur série de la console de développement « Arduino ».

Chaque mesure est définie dans l’unité d’acquisition par:

  • Des coefficients de mise à l’échelle a, b (Mesure=a.NbPoints+b)
  • Un coefficient de filtrage (Filt )
  • Une bande morte (DeadB)

Un système anti-bagotement évite des rafraîchissements intempestifs des afficheurs. ( Filtre du premier ordre puis envoi d’une nouvelle valeur si la variation par rapport à la dernière valeur envoyée est supérieure à la bande morte ou si le dernier envoi date de plus de 5 secondes)

La mesure vitesse est effectuée par 2 interruptions. Une pour le comptage des impulsions de la broche Int0 et une pour générer un timer à 500mS. Chaque 500 ms , le système mémorise le nb d’impulsions et remet à zéro le compteur. On obtient une précision de 28 rpm. La valeur est arrondie à 10 rpm avant envoi.

Restitution des données

Coté module de visualisation, les mesures possèdent les paramètres suivants:

  • Nom, Unité
  • Nombre de digits et nombre de décimal pour l’affichage
  • Couleur d’affichage à l’état normal (Hors alarme)
  • Valeur d’échelle Min/Max et nombre de tics pour les jauges
  • Valeur de seuils d’alarmes (Très Bas, Bas, Haut, Très Haut)
  • Hystérésis pour les alarmes
  • Echelle et couleur de visualisation historique

Sur réception de message, le programme calcul l’état des alarmes en fonction des seuils et de l’hystérésis et enregistre chaque donnée pour une visualisation historique. (180 échantillons avec une période 10 secondes soit 1/2 heure)

Seuls les messages de 66 octets sont traités. Le compteur de vie en tête de message est vérifié à chaque cycle de réception et est affiché dans la partie supérieur droite de l’écran.

  • Gris pas de perte de message
  • Jaune perte d’un message
  • Rouge perte de plus de 10 messages

2 types d’afficheurs sont disponibles : Afficheur Numérique simple ou afficheur type Jauge (4 tailles disponibles : Très Grand, Grand, Moyen, Petit). Les jauges ont des secteurs de couleur Rouge /Jaune /Vert /Jaune /Rouge en fonction des seuils d’alarmes. La couleur de la valeur apparaît en Jaune ou Rouge en cas d’alarme.

Il est possible de définir plusieurs vues sur la base des 10 mesures disponibles. Un appui sur le bouton poussoir permet de passer à la vue suivante. Ci dessous une vue avec toutes les mesures affichées sous forme de jauge . (Tailles Moyen et petit)

Vue Historique

L’historique des mesures est disponible sous forme de courbes. Une liste d’échelles de visualisation ( numérotées 1 à 6) est prédéfinie dans le code. Chaque mesure est associée à une de ces échelles par codage. Une mesure non associée à une échelle n’est pas visualisée.

Ci dessous la vue historique avec toutes les mesures affichées.Note : La couleur des descriptifs de mesure permet d’associer la mesure aux courbes (Exemple OilP et OilT sont visualisées par des courbes jaunes)

La couleur des valeurs de mesure (Rouge ou jaune ou vert) dépend des seuils d’alarmes

Les échelles on une couleur spécifique par unité et plage de visualisation

Programmation et mise en oeuvre

Unité d’acquisition (ArduinoNano)

Le code est disponible dans le lien ci-dessous

https://github.com/jacquesjeannier/EMS/blob/master/EMS.ino

Il faut au préalable installer la librairie SPI (Cf lien ci dessous)

https://github.com/PaulStoffregen/SPI

Unité de restitution (ArduinoMega)

Le code est disponible dans le lien ci dessous.

https://github.com/jacquesjeannier/EMSDISPLAY/blob/master/EMSDISPLAY.ino

Il faut au préalable installer les librairies MCUFRIEND_kbv (Tftglue) et Adafruit_GFX (Cf lien ci-dessous)

https://github.com/prenticedavid/MCUFRIEND_kbv

https://github.com/adafruit/Adafruit-GFX-Library