Go Down

Topic: Capteur de température LM35 (Read 1 time) 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?
;)

Go Up