Capteur de température LM35

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 :

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 :wink:

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

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.

La référence interne ?

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

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

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 .

Il faut également tenir compte du fait que la première lecture donnée par l'ADC est fausse donc faire plutot:

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:

analogRead(A0);

et non:

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?
:wink:

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

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.

analogRead(0);
volt = analogRead(0);

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.

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é.