Go Down

Topic: Capteur de température LM35 (Read 18434 times) previous topic - next topic

alex877

May 10, 2014, 11:59 am Last Edit: May 10, 2014, 12:29 pm by alex877 Reason: 1
Bonjour à tous, aujourd'hui je vous propose un petit tuto su l'utilisation du capteur de température LM35.
Alors déjà pour commencer voici un code détaillé sur la programmation du capteur :
Code: [Select]

float volt; //le voltage du capteur
float temp; // On initialise la variable de température
void setup()
{
  Serial.begin(9600);
}
void loop()
{
   volt = analogRead(0); //On lit les données du capteur sur le port ou tu l'as branché (dans cet exemple c'est le port analogique 0)
   volt = 5*volt/1023; //on calcule le voltage
   temp = volt/0.01; //puis la température
   Serial.println(temp); //on affiche la valeur (ici dans ton IDE)
   delay(1000); //un délai pour que le tout soit lisible
}


Ensuite le calcule permettant de passer des Volts (du capteur) au degrés :

Le 5 est le voltage max de la sortie (ici 5v), les 1023 sont en fait le CAN : le convertisseur analogique numérique de la carte (donc sur  10 bits soit 1024-1 = 1023), les 0,01 la sensibilité du capteur soit 10mv donc 0,01V (rf doc du capteur).

Et pour le branchement c'est très simple :


Voilà en espérant que ce petit tuto pourra vous aider, sinon n'hésitez pas à commenter ;)

fdufnews

Merci pour ce tuto mais je me permettrais 2 remarques:

  • La sensibilité du LM35 c'est 10mV/°C donc si on reste dans des températures inférieures à 100°C on à tout intérêt à utiliser la référence interne de 1,1V ce qui donne une bien meilleure résolution.

  • Le montage tel qu'indiqué ne permet pas de mesurer des températures négatives.



La doc pour les curieux : http://www.ti.com/lit/gpn/lm35

alex877


Merci pour ce tuto mais je me permettrais 2 remarques:

  • La sensibilité du LM35 c'est 10mV/°C donc si on reste dans des températures inférieures à 100°C on à tout intérêt à utiliser la référence interne de 1,1V ce qui donne une bien meilleure résolution.
La référence interne ?

Quote

  • Le montage tel qu'indiqué ne permet pas de mesurer des températures négatives.

Ah oui tien je n'y avais pas pensé :/

68tjs

Quote
La référence interne ?

Oui, celle qui sert au convertisseur analogique et au comparateur analogique.

A noter que cette référence interne n'est précise qu'à 10% ce qui se répercute sur la précision de la température.

A cela deux solutions :
1) Utiliser une vraie référence de tension (1,25V, 2V, .....) raccordée sur la broche aref.
2) Mesurer pour chaque micro-controleur la valeur exacte de cette référence interne.
Elle est disponible sur la broche Aref quand la réference est activée.
La variation de +/- 10%  tient compte des différents lots de fabrication mais la valeur la référence interne est  quasiment fixe pour un lot de fabrication donné .

Autre point il faudrait préciser que le LM35 ne supporte pas des liaisons capacitives ce qui se manifeste par des mesures très instables. La solution, dès que les fils sont longs, est d'insérer  une résistance entre 2k et 5k entre sa sortie et le fil de mesure .

john_lenfr

#4
May 21, 2014, 05:26 pm Last Edit: May 21, 2014, 05:31 pm by john_lenfr Reason: 1
Il faut également tenir compte du fait que la première lecture donnée par l'ADC est fausse donc faire plutot:
Code: [Select]
float lm35dz(){
 analogRead(3);
 delay(10);
 reading = analogRead(3); //LM35DZ connect to Analog pin 3
 //convert the voltage into temperature because the LM35DZ is at 10mV per °C
 voltage = reading * 5.0 / 1024.0;
 temperature = voltage * 100 ;
 return temperature;
}


Dans ton code c'est mieux de préciser A0 que 0 dans la dclaration du pin utilisé, et même le mieux est de prévoir une constante à changer au début du programme directement, dans ta déclaration il faut spécifier:
Code: [Select]
analogRead(A0);
et non:
Code: [Select]
analogRead(0);
car cela peut poser des problèmes sur certaines carte.

Et je ne sais pas pourquoi mais ton schéma Fritzing ta sortie du LM35 ca entre les pins VIN et A0 mais pas sur A0?
;)

Erwan19

Bonjour
Je viens de faire aussi le montage du LM35.
Je constate que comme l'a dit plus haut john_lenfr, la 1ère mesure du CAN est fausse. Je ne comprends pas pourquoi. Il n'y a rien dans la doc constructeur à ce sujet.
Quelqu'un pourrait-il en donner la raison
Merci d'avance

hbachetti

#6
Apr 20, 2018, 09:45 am Last Edit: Apr 20, 2018, 09:48 am by hbachetti
Salut

Cela est du à la capacité d'entrée de l'ADC.
Normalement on rencontre ce problème avec des impédances fortes, par exemple avec un pont diviseur de plusieurs centaines de kilo-ohms.
Étrange, le LM35 a pourtant une impédance de sortie faible.
Comme l'a déjà dit  john_lenfr, on résout ce problème en faisant une lecture à vide.

Code: [Select]

analogRead(0);
volt = analogRead(0);
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

68tjs

#7
Apr 20, 2018, 01:21 pm Last Edit: Apr 20, 2018, 01:23 pm by 68tjs
Quote
Je ne comprends pas pourquoi. Il n'y a rien dans la doc constructeur à ce sujet.
Si tout est expliqué mais il faut lire la documentation du bon constructeur.

C'est celle du microcontrôleur qu'il faut lire et aller la chercher sur le site de son concepteur  : ATMEL.
Le fabricant du LM35 ne va pas expliquer comment utiliser son produit pour 5000 microcontrôleur différents !

Le problème est simple :
Si tu change quoi que soit dans le circuit analogique  le premier résultat sera faux.

Dans les microcontrôleurs il n'y a qu'un seul convertisseur et plusieurs entrées à possibilité analogique.
Pour que cela fonctionne il y a un multiplexeur analogique entre les différentes entrées à possibilité analogique et le convertisseur analogique.
Il faut laisser le temps au multiplexeur de se positionner correctement.
Complément : si tu lis la datasheet tu pourra lire que le première mesure analogique est plus longue que les suivantes même sans changer d'entrée.

C'est pour cela qu'il faut rejeter la première mesure.

Tout est expliqué dans la datasheet du microcontrôleur, il ne faut pas se contenter de la doc arduino est est trop incomplète.
Lire la datasheet du micro permet aussi de voir que le micro est capable de bien plus de chose que ce que l'utilisation par arduino en fait.

Erwan19

Merci à hbachetti et 68tjs pour leur réponse éclairante. J'avais en effet remarqué que la 1ère mesure était altérée dès lors que je venais lire l'entrée A0 pour reconnaître quel bouton de mon shield LCD était enfoncé.

Go Up