programmation pour un LM35CZ (capteur de température analogique)

Bonjour à tous, Je suis nouveau ici et je suis en train de programmer un Arduino Duimilanove. Voici le montage que je souhaite programmer:

Quelqu'un peut-il me dire comment le programmer ?

J'ai commencé avec cette base de programme que j'ai trouvé sur le forum: // sonde 1 de température LM35 readingtemp1 = analogRead(capteurtemp1); voltagetemp1 = readingtemp1 * 5.0 / 1024; temp1 = voltagetemp1 ; // ou temp1 = voltagetemp1 * 100;

Il me manque l'entrée GND !

Pouvez-vous me dire ce qu'il ne vas pas et ce que je dois changer car je ne vois pas comment programmer la sortie - ?

Ce montage permet de fonctionner sans alimentation négative. Les 2 diodes permettent de faire un décalage de potentiel pour supporter les températures négatives. Il faut entrer Vout+ sur une entrées analogique de l'arduino Il faut entrer Vout- sur une autre entrée analogique de l'arduino Il faut ensuite faire la soustraction Vout+ - Vout-

  VoutP = analogRead(pinVoutP);
  VoutM = analogRead(pinVoutM);
  readingtemp1 = VoutP - VoutM;
  voltagetemp1 = readingtemp1 * 5.0 / 1024;
  temp1 = voltagetemp1 ;// ou   temp1 = voltagetemp1 * 100;

Voir aussi faire un arrondi conditionnel de la valeur calculée afin que cela tienne sur ton afficheur dans les cases qui lui sont attribuées (genre 3 chiffres constants; 15.2°C, -11.9°C, etc.), et une intégration des fluctuations de la température, pour que cela soit plus précis et que cela semble moins "instable" à la lecture sur l'afficheur -.^

Bonsoir et merci, Grace à vos remarques j'ai bien avancé.

Salut Ekaki ! :grin:

Je pense que la formule n'est pas bonne car contrairement au capteur de température de plage +2°C à +110°C, mon capteur est cablé de -55°C à +150°C.

pour -55°C je dois avoir 0V et pour 150°C je dois avoir 5V. Donc pour 18°C la formule est : Y = 1/33 * 18 + 1.66666 = 2.21 V

Pour l'arrondi conditionnel, tu utilise la formule suivante : LCD.print(temp, 3); ? de mon coté je pensais plutôt utiliser LCD.print(temp, DEC); // ou LCD.print(temp, 10);

Sinon, comment procèdes-tu pour l'intégration des fluctuations de la température ? Avec quelle fonction ?

Salut SkyWalker -.^
C’est marrant, je trouvais qu’il y avait pas mal de coïncidences entre ton pseudo et le montage du LM35… ^.^

Ouaip, alors pour la mesure de température en différentielle avec le LM35 je fais comme ça :

setup…

// cf. datasheet LM35 pour une mesure de température avec décalage de la référence
#define LM35pin 0 // +Vout du LM35 sur l'entrée analogique n°0 de l'Arduino
#define LM35ref 1 // -Vout du LM35 sur l'entrée analogique n°1 de l'Arduino

fonction…

float readTemp(byte LM35Pin){       
  int analogVal = 0;
  for(int i = 0; i < 10; i++) { // intégration sur 10 mesures, ajustable en fonction des besoins
    analogVal += (analogRead(LM35pin) – analogRead(LM35ref));
  }
  float temp = (5.0 * analogVal * 10) / 1023;
  return temp; // retourne la température en degrés Celsius par défaut
}

Ensuite, pour l’envoie de la valeur, il y a :

Serial.println(18.23456, 1)

Tu auras → “18.2” (arrondi à la décimale).

En même temps, perso’ je préfère toujours utiliser un arrondi mathématique avec une simple fonction, mais bon, cela doit être un TOC ^.^

Hello !

Petit soucis :fearful: :

il me semble pourtant avoir bien vérifier le programme, j'ai même rajouter des ; en fin de ligne.

Comme je te l'ai dit, je suis grand débutant. J'ai appris de nouvelle fonction, cool.

autrement, si j'utilise la fonction LCD.print(temp, 1) aurais-je en retour sur le LCD 18.1 ?

Ouïe ^.^

En fait, tu n'es pas censé mettre des ";" à la fin de chaque ligne. Les ";" sont là pour dire qu'on a tout mis ce qu'il y avait à traiter dans l'instance, et que cela peut être envoyé; comme une sorte d'appui sur la touche "entrée". C'est un peu comme le "." en fin de phrase en Français, pour dire qu'on en a fini avec l'idée en cours. (je ne sais pas si je suis clair ^.^)

Donc, pas de ";" juste après l'ouverture des "{", sinon cela va coincer. Pas non plus de ";" après la déclaration de boucle "for", avant l'ouverture de la "{".

Si j'étais toi je prendrais quelques tuto' de base ou d'introduction au langage sous le bras pour lire tranquillement dans l'avion -.^ Cela te donnerait des bases, de bonnes bases pour pouvoir t'appuyer dessus ensuite et évoluer. Sinon, si tu y vas au pif tu vas non seulement galérer, mais en plus cela va durer un certain temps. (ou alors on peut s'arranger une 1/2 journée de formation.. -.^)

Note : Si j'étais toi je placerais cette fonction... Dans une fonction, plutôt que directement dans la boucle maitre.

Ca fait longtemps que j’avais imprimer le tuto et quelques trucs sur l’arduino sans vraiment rentrer dedans.
Faut que je m’y replonge mais j’ai pas toutes les fonctions décrites.

J’ai à peu près compris ta proposition et j’ai donc fait un nouveau “void”:
// sonde de température LM35
void temperature(temp){ // j’en suis pas sûr.
float readTemp(byte pinVoutP)
float readTemp(byte pinVoutM)
float analogVal = 0;
for (int i = 0; i < 10; i++); { // intégration sur 10 mesures, ajustable en fonction des besoins
analogVal += (analogRead(pinVoutP) – analogRead(pinVoutM));
}
float temp = (5.0 * analogVal * 10) / 1023;
return temp; // retourne la température en degrés Celsius par défaut
}

Mais j’ai encore la même erreur au même endroit:

Je ne comprends pas comment tu passes temp dans print.LCD avec 1 digit après la virgule ?

Ha.. Si tu modifies la fonction, il faut faire attention à ce que cela colle et que ton code soit correct, sinon cela ne fonctionnera pas. Par exemple, la variable "temp" vient d'où et sert à quoi ? Je ne vois pas ce que tu fais avec les deux float juste au début de la fonction (à priori cela part dans la nature vu que ce n'est pas stocké dans une variable et il n'y a pas de ";" comme précédemment expliqué), et pourquoi passer en float "analogVal" ?

Voici quelques pages qui pourront certainement t'éclairer : -> http://wiki.leloop.org/index.php/ArduinoCppAtelier -> http://arduino.cc/fr/Main/Reference -> http://arduino.cc/en/Reference/HomePage -> http://arduino.cc/en/Tutorial/Foundations -> http://www.ladyada.net/learn/arduino/lesson2.html

Mais comme je te disais, il faut vraiment que tu comprennes ce que tu fais, sinon tu vas galérer et te décourager mon grand. Allez, un peu de lecture et ensuite cela sera plus clair -.^

Salut, Merci pour la réponse et les liens. Je regarde ça demain matin. Effectivement, je vais peut-être avoir besoin de tes sages conseils ;)