[RESOLU] LM35 - Arduino NANO

Bonjour à tous !!

En cours de Domotique on me demande de faire un projet qui est : "Gestion d'un chauffage à distance"

Nous devons utiliser un capteur de température numérique et un analogique et un carte Arduino NANO.

Pour le numérique nous avons choisi un DS18B20 et nous avons réussi à le faire fonctionner grâce à différents codes trouvés sur Internet. 8)

Pour le capteur analogique nous avons choisi un LM35. L'école nous a fournit un LM35DT et c'est là que le problème se pose. :cold_sweat:
En effet, nous avons essayé quelques programmes, et on obtient toujours le même résultat, à savoir entre 40°C et 46°C or le DS8B20 nous donne bien la température 21°C. A savoir que c'est dans une salle de cours...

Voilà le code que nous utilisons (tiré d'internet), mais nous ne comprenons pas d'où vient l'erreur

int analogPin = 0;
int readValue = 0;
float temperature = 0;
float temperatureF = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  readValue = analogRead(analogPin);
  //Serial.println(readValue);
  temperature = (readValue * 0.0049);
  temperature = temperature * 100;
  temperatureF = (temperature * 1.8) + 32;
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print("C ");
  Serial.print(temperatureF);
  Serial.println("F");
  delay(1000);
}

Le conversion en Fahrenheit ne nous intéresse pas pour notre projet.

Le LM35DT a un boitier TO220. Il est connecté suivant la datasheet. Il est alimenté par la pin 5V de l'arduino NANO, qui elle est alimenté par cable USB. La précision doit se faire à 0.5°C près, et la vitesse d'acquisition de mesure peut s'effectuer toutes les 10 minutes, voir 15.

Merci d'avance :wink:

Et si je ne suis pas assez clair, dites le, j'essaierai de formuler mon projet autrement :slight_smile:

Tchernobil:
Bonjour à tous !!

En cours de Domotique on me demande de faire un projet qui est : "Gestion d'un chauffage à distance"

Nous devons utiliser un capteur de température numérique et un analogique et un carte Arduino NANO.

Pour le numérique nous avons choisi un DS18B20 et nous avons réussi à le faire fonctionner grâce à différents codes trouvés sur Internet. 8)

Pour le capteur analogique nous avons choisi un LM35. L'école nous a fournit un LM35DT et c'est là que le problème se pose. :cold_sweat:
En effet, nous avons essayé quelques programmes, et on obtient toujours le même résultat, à savoir entre 40°C et 46°C or le DS8B20 nous donne bien la température 21°C. A savoir que c'est dans une salle de cours...

Voilà le code que nous utilisons (tiré d'internet), mais nous ne comprenons pas d'où vient l'erreur

int analogPin = 0;

int readValue = 0;
float temperature = 0;
float temperatureF = 0;

void setup() {
 Serial.begin(9600);
}

void loop() {
 readValue = analogRead(analogPin);
 //Serial.println(readValue);
 temperature = (readValue * 0.0049);
 temperature = temperature * 100;
 temperatureF = (temperature * 1.8) + 32;
 Serial.print("Temperature: ");
 Serial.print(temperature);
 Serial.print("C ");
 Serial.print(temperatureF);
 Serial.println("F");
 delay(1000);
}




Le conversion en Fahrenheit ne nous intéresse pas pour notre projet.

Le LM35DT a un boitier TO220. Il est connecté suivant la datasheet. La précision doit se faire à 0.5°C près, et la vitesse d'acquisition de mesure peut s'effectuer toutes les 10 minutes, voir 15. 



Merci d'avance ;)

Et si je ne suis pas assez clair, dites le, j'essaierai de formuler mon projet autrement :)

il vient d'où ce bout de programme ?
le LM35 en montage basique (temperature positive) renvoie 10mV/°C
soit pour 20° C 200 mV
avec un arduino "standard" la pas de conversion est de 5/1024 soit 0,0048828125 ~arrondi à 0.0049 V
un nano il me semble a une aref de 3.3V/1024 soit 0,00322265625 arrondi à ~ 0,0032

remplace

temperature = (readValue * 0.0049);

par

temperature = (readValue * 0.0032);

Je ne m’occupe pas du code mais du matériel:
Le LM35 DT d'après la fiche technique correspond à une puce garantie seulement entre 0°C et +100°C. La puce est montée dans un boîtier genre TO220.
Première question est ce que la partie "radiateur" est ou pas reliée à une broche ?
A quoi est relié le "radiateur" -> laissé en l'air ou fixé sur une surface métallique ?

Deuxièmement le LM35XX délivre 10mV/degrés. C'est vraiment pas beaucoup et si le câblage est réalisé à l'arache c'est vite faux.
Conseil :

  • affecter un fil de masse réservé au LM35, le relier à la masse de l'arduino la plus proche des entrées analogiques.
  • bien découpler le +5 V -> un "gros chimique" d'environ 10 à 100µF et un "petit" 100nF en technologie céramique soudé à raz du LM35 en faisant attention de ne pas laisser les pattes trop longues.

Conseils très basiques:

  • Avant de foncer dans le code vérifier avec un voltmètre la tension en sortie du LM35.
  • Regarder si la valeur correspond à la température estimée.
  • Si le câblage est bien fait on doit trouver la même valeur que l'on place les fils du voltmètre à raz du LM35 ou qu'on les place sur la carte arduino.
  • Et lire la datasheet, surtout les exemples d'utilisation.

@ Artouste : ce bout de programme vient d'ici Temperature Sensor with Arduino and LM35 (Arduino + LM35) | Matheus Bratfisch

J'ai téléverser le programme modifié, mais la plage de valeur est juste réduit, je suis passé de 30°C à 37°C

@ 68tjs : Le boitier est bien du type TO220. La partie "radiateur" n'est reliée à aucune broche. Nous l'a laissons "en l'air. Est ce un probleme pour le capteur ?

J'ai affecté un fil de masse unique pour le lm35, a coté des broches analogiques, par contre pour les condensateurs, je ne vois pas bien comment le cabler ? les 2 en parallèle ?

Merci de vos réponses rapides !

Bonjour,

Bon ben comme 68tjs a tout dit pour le matériel je m'occupe du code :grin:

Pour lire la valeur de ton LM35 essaye ça :

float readTemperature() {
  return (5.0 * analogRead(TEMP_PIN) * 100.0) / 1024;
}

(remplace TEMP_PIN par la broche analogique que tu utilises)

C'est la fonction de base que tu trouves partout, elle te retourne directement la température en nombre flottant.

Et faire bien attention au référence analogique, surtout en USB, mais c'est valable également sur alim externe. Surtout que la on fait de la chasse au 10 mV, c'est pas grand chose. Pour une mesure juste, il faut toujours une référence de tension, et un régulateur n'en est pas une ...

temperature = (readValue * 0.0049);
temperature = temperature * 100;

---> 0.0049*100 = 0.49
ce serait plus simple !

Le LM35 sort 10mV par °C
A 21°C : 21*0.01 = 0.210V

Si la référence Aref est de 5V
La résolution du convertisseur AD est de :
5/1023=0.0049V
soit 4.9mV
pour 1°C on lira : 10/4.9=2.04 unités
soit à 21°C ~ 43unités

Vous avez presque tout bon. Faut juste diviser par 2.04 !

Faut pas croire tout ce qu'on lit sur Internet !
essayez :
temperature = (readValue *0.24);

Tout le monde parle du LM35 et jamais du LM335.

La différence entre les deux est toute simple :
Les deux donnent 10mv par degré.
Sauf que le LM35 est calibré en degrés Celsius et le LM335 est calibré en degrés Kelvin.

Pour ceux qui ne connaissent pas 0 degré Kelvin représente le "zéro absolu", température qu'en l'état actuel de nos connaissance on ne peut pas franchir (c'est comme le vitesse de la lumière).
0° Kelvin = - 273,15 °Celsius
Sinon après 1K = 1C.

Mais à l'usage le comportement entre les deux Lm est différent :
Pour une température de 20°C le LM35 donne 200mV et le LM335 donne 2,9315 Volt ce qui est plus facile à mesurer.
Avec une référence sur Aref = 3.3V on diminue fortement l'erreur d’échantillonnage.

Autres avantages du LM335 :

  • Il possède une possibilité de calibrage fin que n'a pas le LM35
    Différence entre Étalonnage et Calibration :
  • Étalonnage = table de différence entre la valeur mesurée et celle donnée par un étalon,
  • Calibration = modification des réglages du produit pour que la valeur mesurée entre dans une fourchette donnée.

-Sur Ebay il est moins cher que le LM35 : ce qui signifie qu'il est plus utilisé dans l'industrie que le LM35 et donc qu'il est fabriqué en plus grande quantité.

Edit : j'ai oublié de répondre à la question sur le "radiateur":
Non ce n'est pas un problème de le laisser vivre à l'air libre, la question était posée juste pour bien comprendre comment le composant est utilisé.
Que dit la mesure au voltmètre ?

Merci à tous !

J'ai modifié mon programme avec tous les morceaux de chacun

@68tjs : la valeur entre la masse et la broche de sortie du LM35 est de 515mV

Or avec le moniteur série, il m'affiche 26°C. La mesure est effectuée dans ma chambre.
Le DS18B20 m'affiche quant à lui 24°C. Ce qui me parait assez similaire malgré la différence de 2°C

Par contre, il m'est impossible de faire changer la valeur de la température pour le LM35...
Que je le chauffe avec mes doigts, ou que je ventile aucun effet...

la valeur entre la masse et la broche de sortie du LM35 est de 515mV
Or avec le moniteur série, il m'affiche 26°C.

Si ce que tu écris est vrai :
-Le voltmètre donne 515mV soit 51.5 °C
-Le moniteur série donne 26 °C
tu devrais trouver que c'est totalement illogique et on n’annonce pas des résultats comme ceux là sans faire un minimum de réserves et d'actions complémentaires.....

Quand ça déconne il faut procéder méthodiquement et sur des parties de schéma les plus élémentaires possible.
Teste juste le LM35 avec une alim 5V, tu vire l'arduino il ne sert à rien pour le moment.

Tu dis que quoique tu fasses le niveau de sortie reste bloqué. Fais donc les essais suivants:
Si tu manip à l'école demande a utiliser une enceinte climatique, appelée communément "étuve" et mesure le niveau de sortie à différentes températures.
PS il faut prévoir au minimum 2heures de stabilisation de la température de l'étuve.
Si tu manip à la maison tu mets ton petit montage à l'air libre puis dans le réfrigérateur.
A chaque fois tu mesures la tension de sortie.
Si c'est bon tu passe au four thermostat qui va bien pour avoir autour de 60 °C.

Si la tension évolue correctement c'est que ton câblage précédent était mauvais, tu fait un nouveau câblage correct et tu peux repartir sur le code.
Si c'est toujours déconnant c'est que le LM35 a du "souffrir" de manip non avouables et sûrement involontaires comme tout le monde en fait en débutant.

Ah mais je suis complètement d'accord avec toi pour les valeurs illogiques !!

Je viens de me rendre d'une GROSSE boulette!!! J'ai refait le montage 3 fois avant de m'apercevoir que j'avais connecté le Vout sur la masse et le GND sur le Vout ....

Je suis vraiment désolé davoir été ce boulet !!

Problème résolu!!

Merci de m'avoir répondu et de m'avoir ouvert les yeux sur mon erreur!

Merci beaucoup!
A bientôt sur le forum !

Conclusion :
Un LM35 c'est vraiment solide ou c'est vraiment bien conçu pour supporter les derniers outrages. :grin:

Ça fini bien mais il serait sage de trouver une explication si vraiment tu trouvais 26 °C avec CE composant par le programme.