[Resolu] Capteur LM335 qui varie

Bonjour à tous,

Je suis en train de me fabriquer un thermostat réglable et configurable (histerisis, temps de contrôle, etc…) avec un arduino. Tout fonctionne plutôt bien sauf que le capteur me renvoie des températures qui changent en fonction de ce qui est “allumé”… je m’explique : en mode normal, j’ai 10°C, par contre si je fais en sorte que le relais s’active, la température monte à 14°C… qui redescend aussi tôt dès que je le désactive (!) De même avec l’éclairage de l’écran LCD selon qu’il soit allumé ou pas, j’ai des variations de 1 ou 2°C…

Question alimentation j’utilise une alim 15A de laboratoire réglée sur 5V.

En ce qui concerne les branchements, voici le schéma de mon montage (en pièce jointe). J’utilise la carte Arduino pour programmer mon ATMEL afin de le mettre directement sur mon circuit par la suite. L’écran LCD est un standard 8x2.

Si quelqu’un pouvait au moins m’expliquer ce qui se passe, ce serait sympa, merci ! :slight_smile:

Zorro_X:
Bonjour à tous,
...
Si quelqu'un pouvait au moins m'expliquer ce qui se passe, ce serait sympa, merci ! :slight_smile:

Bonsoir
LM335 ou LM35 le prrobleme est le meme dans le contexte arduino
les mesures erratiques viennent essentiellement :

  • du convertisseur AD de l'arduino (AREF)
  • de l'amplitude de la mesure/AREF
  • de la connexion du LM à l'arduino

ici sur le forum , " l'expert de la bestiole" :grin: est 68tjs
une petite recherche te permettra de retrouver ses posts concernant la meilleure pratique sous arduino.
LM35 ou 335.

perso sous arduino , je n'en utilise pas

Salut;

Ton problème est typique de l'effet de champ (hall) rencontré dans l'industrie.

Les câbles qui véhiculent de la puissance crée un champ magnétique qui perturbent les câbles de faible puissance ou de transmission réseau informatiques -si ces dernier sont a proximité et joint-. C'est pour cela qu'ils sont séparés des câbles de puissances est conditionner dans des câbles blindé (masse) et des gaines isolante de champs parasite (mise a la terre). (plus il y a de longueurs et plus ça ce complique!!)

le relais s'active, la température monte à 14°C... qui redescend aussi tôt dès que je le désactive (!)

De plus ton relais est interfacé en 220V AC (variation de fréquences = champs induit) ça vas forcement crée un champ qui vas transitoirement -a l'enclenchement- modifier l'impédance (résistance) de ton câble et vas faire varier ou parasiter le faible courant du LM355. Je ne connais pas ton installation mais si ces deux câbles cheminent conjointement dans un même passage il est fort probable que ce phénomène soit la cause des perturbations transitoire que tu rencontre.
Le pire serais que les deux courant circulent dans le même câble !! A pas faire.. A pas faire .. A pas faire .. A pas faire !!!! :wink:

Essaie de faire passer le signale duLM335 dan un câble informatique blindé et si possible éloigné du passage du câble qui alimente ton relais.

Pour note: En proportion des courants l'un influera sur l'autre.
A plus!!

Merci pour vos réponses, je ne pensais pas que ce serait si "foireux" avec le LM335... :frowning:
Enfin, lors de mes tests le 230V n'était pas branché donc pas de perturbations supplémentaires de ce coté là...
Par contre, en effet, sur ma plaque d'essai j'ai des fils partout... :confused:

Je n'ai encore rien gravé, je peux encore changer de capteur, je suis preneur de vos suggestions de capteurs fiables ! Au début je voulais en prendre un en I2C mais je n'en ai pas trouvé... :frowning:

Zorro_X:
Merci pour vos réponses, je ne pensais pas que ce serait si "foireux" avec le LM335... :frowning:
Enfin, lors de mes tests le 230V n'était pas branché donc pas de perturbations supplémentaires de ce coté là...
Par contre, en effet, sur ma plaque d'essai j'ai des fils partout... :confused:

Je n'ai encore rien gravé, je peux encore changer de capteur, je suis preneur de vos suggestions de capteurs fiables ! Au début je voulais en prendre un en I2C mais je n'en ai pas trouvé... :frowning:

je ne sais pas ce que tu cherche effectivement comme capteur de T°
je ne sais pas comment il doit être intégré dans ton process

Mais ce que je sais , c'est que pour du capteur de T° basé sur de la techno "semi-conducteur" la précision "courante" sera quasi toujours donnée pour du +/- 0.5°C et ce pour une etendue relativement étroite et centrée.

Perso pour du capteur de T° "tout venant" pour traitement par "arduino" , je prend du DS18B20

Merci pour vos réponses, je ne pensais pas que ce serait si "foireux" avec le LM335... :(

Et c'est reparti...pauvre LM35/LM335

Ce n'est absolument pas un problème de blindage : c'est un problème U=RI.

Un fil de cuivre ce n'est pas un court-circuit : c'est toujours un tout petit peu résistif.
Quand tu traites des signaux numériques tu ne t'en rends pas compte : L'entrée numérique décrete que tout ce qui est supérieur à 2,5V c'est un niveau haut et tout ce qui est inférieur est un niveau bas donc ce n'est pas 10 ou 100 mV qui peuvent faire quelque chose.
En analogique si, et pour le LM335 100 mV c'est 10 °C.

Ce qui se passe c'est qu'a coup sûr tu utilises le même fil de masse pour les relais et les capteurs de température.
Donc quand le relais est activé il se produit un U=RI dans le fil de masse et c'est la cata.

Solution : Il ne faut absolument pas partager le fil de masse d'un LM335 avec un autre composant.
Le fil de masse du LM335 doit être connecté sur la carte arduino au plus prêt des entrées analogiques.
D'une manière générale les masses analogiques doivent être connectées en étoile : le centre de l'étoile étant la carte arduino, chaque pointe de l'étoile étant un composant.
Perso je ramène les masses analogiques au plus prêt des entrées analogiques et les masses numériques sur le connecteur GND situé en haut de la carte. Comme cela j'évite au maximum que les signaux numériques polluent les signaux analogiques.

Capteurs analogiques/numériques :
Un capteur numérique est un capteur analogique qui a été encapsulé dans de l'électronique numérique.
Leur usage est plus simple pour un non analogicien.

Il existe le favori d'Artouste (l'expert en la matière) le DS18B20 qui n'est pas le mien parce que le protocole one wire Dallas, qui fonctionne très bien, est horriblement compliqué et je suis incapable d'entrer à l'intérieur de la bibliothèque . On peut les chaîner, de ce fait une seule E/S suffit pour plusieurs capteurs.

Il existe aussi les AM2301 (DH11) a éviter peu performant ou AM2302(DH22) bien meilleurs : une E/S par capteur. Fait aussi l'hygrométrie. Fonctionne bien si on choisi la bonne bibliothèque.

Il existe aussi des capteurs I2C.

Si tu te sens plus à l'aise avec un capteur numérique fais comme tu le sens, mais modifie quand même ton cablage rien que pour le plaisir de n'avoir pas fui devant une difficulté et de l''avoir dominé.

68tjs:
Et c'est reparti...pauvre LM35/LM335

...
Si tu te sens plus à l'aise avec un capteur numérique fais comme tu le sens, mais modifie quand même ton cablage rien que pour le plaisir de n'avoir pas fui devant une difficulté et de l''avoir dominé.

ça , c 'est une réponse comme j"aime bien 8)

Merci de prendre votre temps pour me répondre, j'ai fait une recherche comme l'a suggéré Artouste et en effet, le problème semble récurrent... désolé...
Il est clair que mes masses ne sont pas "nettes" dans ma plaque d'essai, si le problème ne vient "que de ça", je le verrai très vite en faisant ce que tu me dis, 68tjs.
La précision que je cherche est de +/- 0.5°C, donc un capteur "tout venant" ferait l'affaire aussi.
Question capteur digital, I²C c'est seulement parce que les autres protocoles je ne les connais pas...

Par contre il m'a semblé lire un sujet que j'ai égaré où il était question d'une boucle d'auto-calibration (qui lit la tension sur une entrée analogique) est-ce utile en fin de compte ? si oui quel serait le câblage / branchement ?

Salut tous!

Enfin, lors de mes tests le 230V n'était pas branché donc pas de perturbations supplémentaires de ce coté là...

ça change tout !! 68Tjs => juste un effet de charge.

Je viens justement de publier la traduction française du DS18B20. sur le forum TUTO.
Lit le pour t'en faire une idée. Un petit bijoux!!

Si tu te sens plus à l'aise avec un capteur numérique fais comme tu le sens, mais modifie quand même ton cablage rien que pour le plaisir de n'avoir pas fui devant une difficulté et de l''avoir dominé.

Je "Kife" => Quant on tombe faut savoir pourquoi si non on recommence a tomber !! :wink: .

A plus !

Zorro_X:
Par contre il m’a semblé lire un sujet que j’ai égaré où il était question d’une boucle d’auto-calibration (qui lit la tension sur une entrée analogique) est-ce utile en fin de compte ? si oui quel serait le câblage / branchement ?

Le mieux ça reste quand même d’avoir une tension de référence super stable … Donc d’êviter le 5v de l’arduino si alimenté par l’usb . Si tu as un truc qui varie même de quelques mv ça va fausser la mesure enfin surtout ta conversion en °C

Je n'ai pas encore pu tester aujourd'hui, mais j'ai bien compris ce que 68tjs m'a dit. Le même phénomène se produit dans le domaine des automobiles avec des "masses foireuses". Je cherchais avant tout une explication et j'en ai eu une très claire : encore merci !

Comme je compte me graver un CI au final pour mon thermostat, la masse sera une "plaque de masse" comme dans tout CI qui se respecte. Ceci étant, je mettrai donc le connecteur pour le capteur assez près de l'entrée analogique de l'UC pour limiter les "interférences".

Par contre, je compte mettre le capteur au bout d'un fil d'environ 1m. J'utiliserai donc un fil "blindé" de réseau à paires torsadées. Je comptais mettre la masse sur le blindage (!), la sortie capteur sur 2 brins liés ainsi que la sortie d'ajustement (sur 2 brins liés aussi), c'est une bonne idée ou je me plante complètement ?

Bon, je viens de tester... même en branchant la masse du capteur directement sur la broche GND de l'arduino et sans utiliser le rhéostat d'ajustement, j'ai une différence de ~5°C dès que j'enclenche le relais... (?)
Reste peut-être la résistance des fils dans le +5V qui feraient varier la tension de tout le circuit (?)

Zorro_X:
Bon, je viens de tester... même en branchant la masse du capteur directement sur la broche GND de l'arduino et sans utiliser le rhéostat d'ajustement, j'ai une différence de ~5°C dès que j'enclenche le relais... (?)
Reste peut-être la résistance des fils dans le +5V qui feraient varier la tension de tout le circuit (?)

bonjour
à ce niveau d'imprecision , je penche plus pour une variation d'AREF.
quelle AREF analogReference() utilise tu ?
DEFAULT ? (le cas commun, )
ou INTERNAL

euh... dans la mesure où je ne sais pas ce que c'est ni comment on s'en sert, je suppose que ca doit être sur "DEFAULT" (?)
La broche AREF n'est connectée sur rien (cf. schéma sur 1er post).
Enfin, je rappelle que j'utilise la puce directement sans la carte Arduino.

Edit : après une brève lecture de la doc analogReference(), je suppose que je devrais la brancher sur le +5V qui va vers le capteur et la configurer en "EXTERNAL" (?)

Zorro_X:
euh... dans la mesure où je ne sais pas ce que c'est ni comment on s'en sert, je suppose que ca doit être sur "DEFAULT" (?)
La broche AREF n'est connectée sur rien (cf. schéma sur 1er post).
Enfin, je rappelle que j'utilise la puce directement sans la carte Arduino.

Edit : après une brève lecture de la doc analogReference(), je suppose que je devrais la brancher sur le +5V qui va vers le capteur et la configurer en "EXTERNAL" (?)

bonjour
J'ai parlé de la ref interne (1.1V sur 328P) mais j'avais oublié que le 335 sort 10mv/°K , c'est donc inexploitable
ce qu'il te faudrait c'est une vrai ref externe de tension , pas un simple 5V approximatif.
avec une ref facile à trouver de 4.096V tu peux monter jusqu'à 135°C , mais si tu regarde bien ton etendue de mesure n'est pas enorme et la resolution de l'ADC de l'arduino n'est que de 1024 points

Salut,

Une chose à faire !!

Regarde ce lien qui correspond a la référence donner sur ton schéma.
Si je te demande ça c'est a cause de ce que je viens de lire dans le datasheet.

http://www.jameco.com/jameco/products/prodds/187151.pdf

Si c'est bien le même ton relais pompe trop de puissance (intensité) d’où l'effet de charges.
De plus un relais 5V prendrais 79.4mA alors que les broches d'Arduino sont en nominale de 40mA.
Tu pourrais y laisser ta carte !!!

même en branchant la masse du capteur directement sur la broche GND de l'arduino et sans utiliser le rhéostat d'ajustement, j'ai une différence de ~5°C dès que j'enclenche le relais... (?)

La seul chose dont tu peut être sure c'est que l'origine du problème viens du relais.

A plus !!

!? Si tu regardes le schéma du 1er post, le relais est alimenté par le +5V de l'alim (je rappelle que j'utilise la puce de l'Atmega 328P SANS la carte Arduino), la sortie de l'arduino ne sert qu'à activer le transistor BC337 (Q1) qui active le relais...
Au niveau de l'alim, qui fait 3A finalement (pas 15 comme je croyais au début), rien ne bouge, elle reste sur 5V. Et au multimètre j'ai toujours 5V aussi...

Il commande pas le relais en direct donc devrait pas y avoir de soucis pour l'arduino si le transistor est bien "dimensionné" (je parle pas de l'erreur de mesure :wink: ).

Perso j'ajouterais un L7805 ou équivalent dédié juste pour ton LM35 avec la masse reliée à celle de l'arduino .

EDIT : grillé :slight_smile:

BrUnO14200:
EDIT : grillé :slight_smile:

pourquoi "grille" ?

Sinon, je viens de tester en mettant la AREF en EXTERNAL (d'abord) puis en branchant le +5V sur l'entrée AREF... Ca réduit la marge de variation à 3°C (au lieu de 5°C) lorsque le relais s'enclenche, mais ca ne résous pas le problème...

Par contre je n'ai pas très bien compris comment utiliser la référence interne de 1.1V sur l'entrée virtuelle N° 14 pour avoir une mesure précise (?)

Attention la valeur de la référence de tension doit être supérieure à la plus haute tension a mesurer, donc la référence interne 1,1V (qui en fait peut faire entre 1 V et 1,2 V) n'est pas utilisable avec un LM335.

L'ADC de la l'atmega ne fait que découper la tension de référence en 1024 ce qui donne le pas de mesure.
L'atmega donne le nombre de pas pour une tension donnée. Donc si la référence de tension n'est pas stable ou est fausse, la mesure ne sera pas stable ou fausse.

C'est un point très important pour la qualité du montage. Si tu tires trop de courant sur l'alim générale avec le relais et que le Vcc varie ce ne sera pas les variations du LM335 que tu verra mais celle de l'alim générale.

La référence de tension proposée par Artouste est une très bonne idée pour le montage final mais dans un premier temps pour la mise au point si tu n'en possède pas tu peux utiliser un régulateur de tension 3,3V que tu peux modifier avec 2 résistances pour avoir une tension de 4V ( la modif est indiquée dans toutes les datasheet : c'est du banal de chez banal).

Excuse moi si tu l'as déjà dit mais quelle est ton alim ?
Perso je choisirai une alim 12 V et des relais sous 12 V ce qui diminue le courant dans la bobine.
Je placerais deux régulateurs :

  • un 5V pour l'atmega
  • un 4V (référence ou 3,3V modifié) uniquement pour la référence de tension.

Point important :
AVcc ne DOIT PAS être relié DIRECTEMENT à Vcc. Atmel est catégorique sur le sujet : voir la datasheet du micro et la note d'application :
Atmel AVR042: AVR Hardware Design Considerations

Arduino n'a rien compris à ce sujet et comme tu fais ton propre circuit imprimé il vaut mieux éviter de faire les mêmes bétises.

Tu peux aussi lire avec intérêt :
AVR120: Characterization and Calibration of the ADC on an AVR
AVR121: Enhancing ADC resolution by oversampling
AVR126: ADC of megaAVR in Single Ended Mode
AVR127: Understanding ADC parameters

Cablage :
Le Lm335 ne présente pas les mêmes défauts que le LM35 qui ne supporte pas de liaison trop longue a cause de la capacité apportée. Néanmoins si les mesures sont trop instables je donnerais une solution matérielle (pas la peine de compliquer pour le plaisir).
Si tu utilise des fils blindés il ne faut relier le blindage que d'un seul coté sinon il y aura circulation de courants non désirés et le remède pourra être pire que le mal. Le blindage est là pour capter les parasites et les écouler à la masse, le blindage doit être relié à la masse coté micro-controleur.