Lire des sondes et capteurs de voiture en Arduino

Objectifs

Le but de notre projet va être de disposer d'un boitier nous renvoyant toutes les informations des sondes d'un véhicule, sans utiliser de connexion OBD, et (dans l'idéal) en permettant le fonctionnement simultané d'autres éléments de mesure (manomètres, tableau de bord d'origine du véhicule). Nous souhaitons avoir ces informations sur un écran LCD pour contrôle (même si l'on positionne le boitier dans le compartiment moteur, l'écran servira à tester son bon fonctionnement) et pouvoir les transmettre à distance et en direct aux stands lors de courses automobiles. Le tout sera alimenté avec une batterie de type LiPo (en 7.4V ou 11.1V, au choix), afin d'être indépendant du circuit électrique du véhicule (trop parasité).

1. Sondes de température

Nous allons commencer par étudier l’interfaçage de sondes de température (eau et huile notamment), qui sont dans la plupart des cas des résistances variables, avec un système à base d'Arduino.
Cet article va évoluer régulièrement, au fur et à mesure de mes tests et expériences. Donc, n'hésitez pas à revenir régulièrement voir les nouveautés !

Uniformité des valeurs entre les sondes

Sonde de température d'eau ou d'huile
Sonde de température d'eau / d'huile à deux fils

J'ai effectué une mesure de résistivité sur deux sondes du commerce théoriquement identiques, afin de voir si elles renvoyaient les mêmes valeurs.
Celle dont je dispose a deux fils, certaines n'en ont qu'un, la masse étant assurée par le filetage lorsqu'elles sont vissées sur le véhicule.
Dans notre cas, je mesure la résistance entre leurs deux fils, à température identique et stabilisée. A température ambiante, la sonde n°1 me donnait 53.30 kΩ et la n°2 53.90 kΩ.
J'ai repris des mesures régulièrement, la différence n'a jamais dépassé 3 kΩ, ce qui correspond à moins d'un degré Celsius de variation.
Nous pouvons donc partir du principe que des sondes de même modèle sont réellement interchangeables sans nécessiter d'étalonnage différent.
Dans le cas de sondes d'eau ou d'huile, n'oublions pas que les températures habituellement mesurées sont dans un ordre de grandeur assez élevé, surtout lors d'une utilisation à vocation sportive (rally, drift, etc...).

Comparaison des températures affichées par un thermomètre

Manomètre EPMAN de température d'eau
Manomètre EPMAN de température d'eau

Pour tester, nous allons utiliser un manomètre EPMAN, livré avec une sonde identique à celles vues précédemment. Notons que ce manomètre est donc conçu pour fonctionner sur 12 volts (ou un peu plus, en réalité, la tension d'une batterie chargée est aux alentours de 13-14 volts). En revanche, la tension envoyée à la sonde pour la mesure est de 5 volts (nous pouvons le constater par la mesure du voltage aux fils noir et vert, et également en alimentant l'ensemble en 6, 9 et 12 volts, tout en constatant que la mesure de température du manomètre ne change pas).
Ce manomètre est conçu pour afficher les températures entre 20° et 150° C.Si la température est inférieure à 40°C ou supérieure à 118°C, cette dernière clignote sur le mano.
J'ai comparé les informations qu'il nous affiche avec celles d'un thermomètre avec sonde connectée au multimètre UNI-T UT216C, en mesurant la température dans un récipient contenant de l'eau qui sera chauffée progressivement. Leurs sondes respectives sont plongées au même endroit dans le liquide.
La température donnée par le multimètre sera également confirmée par un thermomètre infrarouge sans contact.

Premier constat, à température ambiante (20°C), il n'y a pas de différence entre l'affichage du mano et la température réelle (maximum 1° d'écart).
Cependant, durant la phase de chauffe de l'eau, il y a une différence de température pouvant aller jusqu'à 8° à un instant T, car le manomètre à un temps de retard conséquent sur la mesure du multimètre. Deux possibilités, soit il doit faire une moyenne lissée avant de le répercuter sur son affichage, soit la sonde a une certaine inertie et met du temps à "réaliser" le changement de température. Si l'augmentation de température est stoppée (par exemple lors de l'ébullition), il faut quelques minutes pour que cet écart se réduise et que le mano affiche une valeur stable et proche de celle donnée par le multimètre (le mano indiquant toujours un petit peu moins que la température réelle).
Lors de l'ébullition, le multimètre indique 100°, le mano oscille entre 98° et 99°, donc nous pouvons dire qu'il est plutôt bien calibré !
En conclusion, plus les changements de température seront rapides, plus la température affichée par le mano sera éloignée de la température réelle instantanée..

Lecture de la résistance de la sonde avec l'arduino

Pour pouvoir mesurer la résistance de notre sonde avec l'Arduino, nous devons utiliser le principe du diviseur de tension. Cela consiste à mettre en série une résistance d'une valeur connue avec la sonde (résistance variable). Nous alimentons notre circuit avec le +5V de l'Arduino.
Sur le schéma ci-dessous, la résistance R1 est connue, la résistance R2 est la sonde. Le schéma représente un Arduino Uno mais est valable quelque soit votre module. Pour ma part, j'utilise un Arduino Nano, afin de gagner en encombrement et en poids, en espérant ne pas être limité par sa capacité mémoire très réduite, mais largement suffisante pour faire des tests sur telle ou telle sonde.
J'utilise une résistance fixe pour R1 de 7500kΩ, ce qui nous donnera une tension de 4.39V pour une résistance de la sonde de 54kΩ (ce qui correspondait à une température moyenne d'environ 20°C). Vous pouvez faire ce calcul via un petit formulaire sur ce lien. N'oublions pas que plus la température augmente, plus la résistance de la sonde diminue.

Diviseur de tension
Voila le montage que j'ai fait, pour illustration, car aucune convention respectée ! Vous pouvez cliquer sur les photos pour les voir en grand.

Arduino nano et sonde de température Arduino nano et sonde de température, vu de près !

Code source

Le code source ci-dessous va nous afficher, à une fréquence d'une fois par seconde, la résistance de notre sonde.

void setup(){
    Serial.begin(9600);
}

void loop(){
    float vout = analogRead(A0), vin = 5, r1 = 7500.00, r2 = 0;
    float vout1 = (vin*vout)/1024;
    r2 = (vout1*r1)/(vin-vout1);
    Serial.println(r2);
    delay(1000);
}
Voici un exemple du retour de données au niveau de l'interface Arduino (les valeurs sont en Ω) :

Valeurs de résistance de la sonde retournés sur l'arduino

Calibration

Les sondes étant livrées sans fiche technique, nous devons nous faire un tableau permettant de mettre en rapport la résistance mesurée aux bornes de la sonde, avec la température réelle. Pour cela nous avons besoin d'un système qui fasse évoluer la température d'un liquide et qui puisse également la stabiliser, car nous avons vu que la sonde avait une inertie qui risquerait de fausser notre calibration.
Nous allons donc utiliser un relais couplé à un thermomètre, ce genre de module existe "tout fait" pour quelques euros ici.
Cela m'a permis de relever les couples résistance-température suivants :

température (°C)Résistance (Ω)
3035603
4024873
5017330
6011729
708158
805930
904231
1002938

Ce qui nous permet de sortir le graphe suivant, :
Courbe de résistances / températures d'un capteur

Ne disposant pas de l'équation de la courbe, en admettant une équation du genre y(x)=a.ekx nous aurions a=106 et k=-0.00004 mais c'est très imprécis. Il vaut mieux faire un tableau avec plus de mesures; et dans une amplitude plus grande, notamment au dessus de 100° car n'oublions pas que cette sonde pourra servir à mesurer la température d'huile, qui peut monter jusqu'à 150°C.

Fonctionnement simultané de l'Arduino et du manomètre

La difficulté suivante est d'arriver à mesurer simultanément via l'Arduino et le manomètre.
Au début, j'ai trouvé la "feinte" de faire la mesure via le manomètre en tâche de fond, et d'interrompre sa mesure (par exemple toutes les secondes) pendant une fraction de seconde afin de faire la mesure avec l'Arduino. Pour tester, j'ai commencé avec des relais, qui m'ont permis d'effectuer la mesure en moins de 10ms. Pendant un temps aussi faible, le manomètre ne "voit" rien de l'interruption et il n'y a aucune interruption d'affichage. Pour remplacer les relais, qui ont une durée de vie limitée, j'ai commandé des MOSFET IRL540N qui permettent un déclenchement beaucoup plus rapide. J'ai également eu l'idée de "répliquer" ce qu'on lit en entrée, sur une pin en sortie de l'Arduino, qui serait connectée au fil de lecture du manomètre. Pour cela, il faut un DAC (digital to analog converter), j'ai testé le modèle YL40. Problème déjà il ne donne pas la tension voulue d'origine (explications ici), et une fois le module corrigé, j'ai un décalage de 0.6V, c'est à dire que si j'envoie la valeur 0 au YL-40, il me sort une tension de 0.6V sur sa broche AOUT quand le fil de mesure du manomètre est connecté sur cette dernière. Mais ça, c'est peut-être un simple problème d'électricité qui me dépasse. Donc là, pour l'instant, je sèche...

Mesure de la température d'air

Concernant la mesure de la température d'air, j'ai choisi une sonde DS18B20, qui est encapsulée au bout d'un câble d'une longueur d'un mètre. Son interfaçage est très facile avec l'Arduino, les trois fils de la sonde doivent être connectés comme suit : rouge au 5V, noir au neutre, et jaune sur une entrée digitale de l'Arduino, en utilisant une résistance de 4,7kΩ.

Il suffira de positionner cette sonde dans la durite d'air au plus proche du collecteur d'admission (après le filtre à air donc). Elle nous renverra donc la température de l'air avant d'être aspiré dans le moteur; et nous permettra d'optimiser le placement de notre filtration ainsi que de l'isolation des différents éléments calorifiques du compartiment moteur.

Nous l'interfacerons avec l'Arduino grâce à la librairie OneWire, qui nous permettra d'obtenir directement la température, sans calibrage fastidieux.

Cet article vous a plu ? Merci de le partager sur les réseaux sociaux :
image
Qui est l'auteur ?

Passionné de nouvelles technologies, je propose mes services de développement Web, principalement dans l'élaboration de scripts et d'algorithmes sur mesure, ainsi que plus généralement dans la réalisation de sites internet évolués (e-commerce, etc...) et du référencement (SEO).
N'hésitez pas à me contacter pour toute demande !

Abonnez-vous à ce blog par email

Rentrez votre adresse email pour vous abonner au blog et recevoir un e-mail à chaque nouvel article :

ou suivez nous sur Facebook :

Écrire un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec une *

Quelle est la troisième lettre du mot whyh ? :