PROJET MANOMETRE [RESOLU]

Bonjour à toutes et à tous,

Je me décide enfin à m'inscrire et à poster ici car j'ai solutionné beaucoup de choses sur mon projet en vous lisant ( et en prenant aussi des cours avec les tutos), mais là j'arrive au bout des solutions proposées et j'ai toujours un souci de parasitage. Je sèche quoi!

Pour commencer je ne suis pas électronicien, donc mes connaissances dans le domaine sont limitées, et j'avoue que sur certain sujet que j'ai pu lire je ne comprend pas toujours les abréviations.

Bref tout ceci étant dit passons Descriptif de l'assemblage:

Je me suis décidé à réaliser un ensemble manomètre pour ma voiture qui réalise les fonctions suivantes:

-Température d'huile moteur
-Température d'huile de pont
-Pression d'huile moteur
-Pression pipe admission (pour futur montage turbo)

Pour ceux que ça intéresse la voiture est une BMW E30 des années 80 :smiley: ( la voiture jouet en somme)

Partie affichage:

Pour respecter l'harmonie visuelle de l'habitacle j'ai opté pour de l'affichage sur des 7 segments.
Un groupe de 3 par afficheur de température et un groupe de 2 par afficheur de pression ( le point étant allumé en permanence car je n’oscille qu'entre -2 et 8 bar au mieux)

Alors cette partie la fonctionne au poil, avec "multiplexage des sorties de l'arduino, le tout sur un CD4017 ( un compteur de décade je crois) et tout et tout!

Partie "mesure"

Sur les Entrées analogiques de l'arduino j'ai donc deux sondes de température identiques qui fonctionnent en 12v et en NTC, une sonde de pression d'huile (0-10bar) qui fonctionne en 12v et en PTC ( plage: 3-160ohms), et enfin un capteur de pression d'air qui possède un pont de wheatstone qui me sort donc deux valeurs que je passe dans un comparateur pour avoir une seule donnée en entrée de l'arduino!

Les datasheets:

-Les sonde de Température:
http://www.produktinfo.conrad.com/datenblaetter/175000-199999/188103-da-01-ml-TEMPERATURFUEHLER_9409900030_de_en.pdf

-La sonde de pression d'huile:
Là j'ai pas trouvé de data dessus car ça sort d'une boutique en ligne pour automobile, les données que j'ai c'est la plage de fonctionnement (0-10bar), le voltage (12v) et la plage ohmique(3-160ohms)

-La sonde de pression d'air (26PCD):
http://docs-europe.electrocomponents.com/webdocs/0026/0900766b80026163.pdf

-Le ci faisant office de comparateur (LM2901N)
https://www.jameco.com/Jameco/Products/ProdDS/836561.pdf

Description de l'alimentation:

Pour alimenter tout ce petit monde en 12v "propre" et pour ne pas avoir de variation sur mes mesures je passe le courant qui arrive de la voiture dans un convertisseur de tension 7812 (filtrage avec deux condo C1:033 micro, C2:0.1 µF). Ensuite je distribue ça à toutes mes sondes. Pour avoir aussi du 5v j'envoie ce 12v sur un 7805 (filtrage C1=C2= 47µF) que je donne à l'arduino et à mon affichage

Description du montage pour les Températures (j'en décris un mais les deux sont fait pareil):

J'ai créé un "diviseur de tension" avec ma sonde qui va du +12 jusqu'au milieu du pont et un résistance de 2740ohms qui elle va du milieu du pont jusqu'à la masse. La plage de tension est encore trop élevée pour l'arduino je la repasse dans un autre diviseur avec "en haut" une résistance de 1400ohms et "en bas" une résistance de 1000ohms, la mesure étant prise entre ces deux résistances et collant parfaitement bien à l'entré analogique de l'arduino

Pour la sonde de pression d'huile c'est plus simple, j'arrive en 12v sur une résistance de 230ohms et fini sur la sonde, la plage de tension alors obtenue est comprise directement entre 0 et 5v

Enfin la sonde de pression d'air et aussi alimentée en 12v, de là sortent 2 fils pour les valeurs des deux côtés du pont de wheatstone. Là je me sers du LM2901N pour faire un montage suiveur par ligne et ensuite je compare les valeur pour n'avoir qu'une seule donnée à envoyer à l'arduino , j'ai calculé mes résistances sur la partie comparateur pour que même les pressions négatives donnent un voltage bas mais positif et du fait je reste encore une fois dans une plage 0-5v.

Alors tout ce petit monde fonctionnait très bien sur la plaque de test (breathbord???) donc je me suis dis c'est top ça fonctionne du premier coup, j'ai donc créé un circuit imprimé double face, soudé mes petits composants, mis en gros 5m de fils (aller) par sonde (seul le capteur de pression d'air est sur le circuit imprimé), le programme étant déjà implanté dans l'arduino je le place sur les pin de mon circuit maison, et là surprise!!!!!!!!!!!!!!!!!!
Plus aucun affichage correct, tout "yoyote" fort!
Après plusieurs contrôles du montage, tests en tout genre seul l'affichage concernant la pression d'air change. Oui le LM2901N vient de cramer, je l'alimentais aussi en 12v >:( (en même temps le datasheet du capteur comme celui du comparateur ne me sont pas apparus aussi clair que les autres et j'avoue mes fortes lacunes en anglais)

Voilà donc un premier problème identifié (enfin il me semble) si quelqu'un peut confirmer ça m'arrage.

Pou le reste je me suis gratté la tête longtemps, passé quelques longues heures à fouiller le net et du coup les topics tuto et autre de ce forum. Résultat: faut filtrer!

Je redémonte enfin je déssoude tout et laisse en place une seul sonde de température, je ressors la plaque de test, j'y assemble un filtre passe bas (RC) et j'effectue des tests. Après moultes bataillages j'arrive aux résultats suivants:

j'ai essayé avec un condo non polarisé: choux blanc
j'ai essayé avec un 10µF chimque: pas assez gros
je peux placer un condo chimque compris entre 47µf et 100µf la ça marche
n'ayant pas de condo entre 10 et 47µF je ne peux pas affiner plus
au niveau des résistances testés je ne vois pas de différence de comportement pour une plage allant d'environ 7kilo a 16kilo.

Avec ce constat le sourire revient, je duplique donc ce montage sur la deuxième sonde de température, en laissant bien sur la première en fonction. Miracle et hop deux valeurs sur mon petit afficheur c'est top!

Je continue sur ma lancé et fait encore une fois pareil avec la sonde de pression d'huile, et là c'est le drame tout est de nouveau parasité, j'ai beau essayer tout ce que je veux, surtout ce que je peux avec le matériel que j'ai à disposition, rien y fait!

Donc voici mon problème sur lequel je vous demande de l'aide.

J'espère ne pas avoir été trop long mais bon j'ai essayé de détailler au mieux, et merci d'avoir pris le temps de me lire.

En espérant toucher au but sur ce projet grâce à vos lumières je vous souhaite une bonne soirée

Nico-M10:
Description de l'alimentation:

Pour alimenter tout ce petit monde en 12v "propre" et pour ne pas avoir de variation sur mes mesures je passe le courant qui arrive de la voiture dans un convertisseur de tension 7812 ...

Bonsoir
lecture rapide et réponse intuitive :grin:

mais AMHA mettre un 7812 sur le "12V" compte tenu du low drop peut etre une grosse source de problème selon les circonstances.

Merci pour cette réponse rapide, mais je ne comprend pas se que cela veut dire :-[

ah j'oubliai si ça peut servir, je tourne sur une carte LEONARDO

Bonjour,
J'ai fais une installation dans un véhicule aussi mais en 24v.
Pour l'alim j'ai utilisé des modules à base de LM2596 que l'on trouve sur la baie (tension de sortie réglable).
Pas de probleme de parasite avec.
j'alimente l'arduino (Mega) et les différents composant en 5v.
Pour les sondes CTN j'ai fait un pont diviseur avec un potar multi tour, par contre c'est alimenté en 5V
J'ai fait une linéarisation car calcul, toute les secondes.
Pour le pression d'huile (sonde d'origine pour galva) c'est pareil : un pont diviseur en 5v.

Voila
Si cela peut d'aider...

C'est intéressant, vous auriez plus d'info a me donner sur votre montage???

Nico-M10:
Merci pour cette réponse rapide, mais je ne comprend pas se que cela veut dire :-[

ah j'oubliai si ça peut servir, je tourne sur une carte LEONARDO

bonsoir
J'expliquai qu'un 7812 (regulateur 12V) mis sur une "ligne 12V" peut se retrouver "dans les choux" :grin: , il a besoin d'une difference mini entre V entrée et V sortie (régulée) pour bien faire son "job" 8)

Bonjour,
Cette conversation sur les Arduino/Manomètres m’intéresse grandement, mais je suis un grand débutant et je me pose cette question :
Pourquoi installer des ponts diviseurs pour passer en 5v, plutôt que de mettre en place de "simple" régulateur en 5v (type 7805) ?
Est-ce que cela viendrait fausser les mesures d'entrée dans l'Arduino ?

Je n'ai pas réussi à trouver la réponse à cette question sur le web, mais si vous avez une réponse ou un lien je vous en remercie d'avance !

Bonjour,
Dans un pont diviseur la tension de sortie est proportionnelle à la tension d'entrée. Avec un régulateur de tension 7805 tu auras 5 V en sortie tant que ton entrée est supérieure à 5V + chute de tension aux bornes du régulateur.
Conclusion : ta tension de sortie n'est en aucun cas représentative de l'état de ton capteur.
@+

EMR3:
Bonjour,
Cette conversation sur les Arduino/Manomètres m’intéresse grandement, mais je suis un grand débutant et je me pose cette question :
Pourquoi installer des ponts diviseurs pour passer en 5v, plutôt que de mettre en place de "simple" régulateur en 5v (type 7805) ?
Est-ce que cela viendrait fausser les mesures d'entrée dans l'Arduino ?

Je n'ai pas réussi à trouver la réponse à cette question sur le web, mais si vous avez une réponse ou un lien je vous en remercie d'avance !

bonjour

Comme expliqué par icare
un diviseur de tension permet de conserver la representation (image) de la tension présente en l'adaptant à la possibilité (valeur max admissible) du MCU.

un regulateur de tension lui peut etre utilisé (mais ce n'est pas son utilisation initiale) pour simplement produire un niveau haut (logique) correspondant à un niveau haut de V plus importante (typiquement sur des circuits utilisant du 12 ou 24V= )

Voilà le problème de parasitage est résolu, c'était l'alim de test qui n'allait pas, après un essai "in situ" plus de parasite!!! Si j'avais commencé par ça....

Cependant une nouvelle question me ramène vers vous:
je me suis rendu compte que mes sondes de température n'étaient pas linéaires, donc il faut passer par la formule de Steinhart and Hart qui utilise les logarithmes!

Après "transformation ça donne :
Tc= (1/(((1/B)ln(Rc/Rref))+1/(tref+273)))-273

avec:
-Tc: température cherchée
-Rc: résistance recherchée ( donnée par la sonde)
-Tref: température de référence (ici 25°C)
-Rref: Résistance de référence ( ici 2251ohms à 25°C)

Pour que mon calcul soit juste, il faut que je "remonte" d'abord mes ponts diviseur, c'est à dire multiplier par 2.4 pour remonter mon second diviseur potentiomètrique.
Ensuite je me sers de la formule des diviseurs pour ressortir la resistance de la sonde pour le calcul dela formule de Steinhart and Hart!

Toujours sur une carte LEONARDO

J'ai donc cherché sur le net et il s'avère qu'il faut inclure la bibliothèque math.h

premier point:
peut-on la déclarer comme ça ou il faut télécharger un fichier à ajouter aux croquis??

Deuxième point:
Si on déclare la bibliothèque comme ça, quelle est la syntaxe pour les logarithmes? Car après pleins de recherche j’aboutis au code ci dessous, mais ça ne fonctionne pas, alors qu'en faisant exactement la même chose sur la calculatrice j'ai le bon résultat! Si ça peut aider, "log" apparait en orange dans le code.

Encore merci de votre aide

// déclaration broches affichage
byte seven_seg_digits[11][7] = {
  { 
    0,0,0,0,0,0,1   }
  , // = 0
  { 
    1,0,0,1,1,1,1   }
  , // = 1
  { 
    0,0,1,0,0,1,0   }
  , // = 2
  { 
    0,0,0,0,1,1,0   }
  , // = 3
  { 
    1,0,0,1,1,0,0   }
  , // = 4
  { 
    0,1,0,0,1,0,0   }
  , // = 5
  { 
    0,1,0,0,0,0,0   }
  , // = 6
  { 
    0,0,0,1,1,1,1   }
  , // = 7
  { 
    0,0,0,0,0,0,0   }
  , // = 8
  { 
    0,0,0,0,1,0,0   }
  , // = 9
  { 
    1,1,1,1,1,1,1   } // tout éteint
}; 
int pin;

// déclaration broche clock CD4017
const int CD4017 = 9;

// déclaration broches analogiques sondes
const int temp_huil = A0;
const int temp_pont = A1;
const int pres_huil = A2;
const int pres_admi = A3;

//déclaration sous forme décimale des tensions des sondes utilisées pour calcul et affichage
double tension0 = 0.0;
double tension1 = 0.0;
float tension2 = 0.0;
float tension3 = 0.0;
double calcul0 = 0.0;
double calcul1 = 0.0;
// déclaration des variables de stockage des tensions brutes lues (0 à 1023) sur les sondes
int sonde0 = 0;
int sonde1 = 0;
int sonde2 = 0;
int sonde3 = 0;

#include <math.h>

void setup()
{
  //définition des broches de sortie
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(CD4017, OUTPUT);
  pinMode(10, OUTPUT);

  //mise à l'état HAUT des sorties pour éteindre les LED de l'afficheur
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(7, HIGH);
  digitalWrite(8, HIGH);

  //mise a l'état bas de la sortie du clock CD4017
  digitalWrite(CD4017, LOW);
} // fermeture du setup

void loop()
{
  digitalWrite(10, HIGH);
  digitalWrite(10, LOW);
  // lecture et mise en forme sonde de température d'huile
  calcul0 = 1/298;
  sonde0 = analogRead(temp_huil);
  tension0 = sonde0 * 5;
  tension0 = tension0 / 1024; // récupération tension
  tension0 = tension0 * 2,4 ;   // remonté second diviseur
  tension0 = 32880 / tension0; // récupération de la valeur de la résistance de la sonde
  tension0 = tension0 - 2740;  // fin de récupération valeur resistance sonde
  tension0 = tension0 / 2251;  // calcul linéarisation par formule Steinhart and Hart
  tension0 = log (tension0);
  tension0 = tension0 / 3852;
  tension0 = tension0 + calcul0;
  tension0 = 1 / tension0;
  tension0 = tension0 - 273; // résultat en °C

Il y a deux logarithmes disponibles :http://arduino.cc/en/Math/H

double log (double __x) // logarithme naturel Ln(x) en base e=2.71828
double log10 (double __x) // logarithme en base 10

ok merci pour l'info, mais j'ai beau tourner ça dans tous les sens dans mon programme je n'arrive pas à l'utiliser!

#include "math.h"
#define M_LN2   0.69314718055994530942 /* log_e 2 */

je déclare bien ma bibliothèque, et sur le lien j'ai trouvé l'autre "truc"

et après j'ai essayé ça :

 calcul0 = 1/298;
  sonde0 = analogRead(temp_huil);
  tension0 = sonde0 * 5;
  tension0 = tension0 / 1024;
  tension0 = tension0 * 2,4 ;
  tension0 = 32880 / tension0; 
  tension0 = tension0 - 2740;
  tension0 = tension0 / 2251;
  double log (double __tension0);
  tension0 = log (tension0);
  tension0 = tension0 / 3852;
  tension0 = tension0 + calcul0;
  tension0 = 1 / tension0;
  tension0 = tension0 - 273;

mais ça ne donne rien

bref je m'arrache les cheveux sans résultat, je ne trouve pas la bonne syntaxe, ou la bonne façon d'écrire la chose

Bon en fait mon log fonctionne, mais c'est la carte qui n'aime pas les valeurs a virgule trop petite, du coup j'ai multiplié le haut et le bas de ma formule par 10000000, et hop ça fonctionne :grin:

pour m'en assuré j'ai fait un tout petit programme avec un affichage de chaque étape de calcul sur l'écran d'ordi et c'est comme ça que j'ai trouvé ou ça mer*µ%$ait!