Bonjour, comme indiqué dans le titre, j'ai un problème de mesure avec mon montage de tmp36...
J'ai créé un programme test pour voir si j'avais bien 0 en branchant mon pin du capteur (A0) sur le GND, et 1023 en le branchant sur le plus, comme indiqué dans ce topic : Problème tension analogue
(la première réponse)
Voici mon code complet (il n'est pas tout à fait terminé, si vous avez d'autres remarques
)
Donc lorsque j'execute mon code, j'obtiens une mesure qui ondule aux alentours de 26°C, au lieu de 19-20, j'imagine, n'ayant pa d'autre thermomètre à proximité.
quand j'essaie avec mon code test, en branchant A0 sur GND, je n'ai effectivement pas 0 mais une mesure qui oscille entre 1 et 4, parfois plus, ça change assez vite.
Pourtant, cela fonctionnait très bien il y a quelques temps, avant je branche mes 3 leds (voir plus bas
)
mais j'ai beau chercher dans mon montage,
je ne vois pas de faux contact ou fil débranché, etc...
C'est un thermostat et ici, les leds simulent les leds qui afficheront l'état des appareils de chauffe ou ventilation le temps d'essayer mon code.
Notes: J'ai mis 133 pour "temp-ext" car je n'ai qu'un tmp36 pour l'instant.
#include <LiquidCrystal.h>
int capteur_interieur = 0;
int capteur_exterieur = 1;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int vert = 9;
int rouge = 8;
int bleu = 7;
/*
int chauffe = 8;
int arret = 7;
int ventil = 6;
*/
void animpoint() {
lcd.setCursor(14, 0);
lcd.print( "." );
delay(700);
lcd.setCursor(14, 0);
lcd.print( " " );
delay(700);
}
void setup() {
pinMode(vert, OUTPUT);
pinMode(rouge, OUTPUT);
pinMode(bleu, OUTPUT);
digitalWrite (vert, HIGH);
digitalWrite (rouge, HIGH);
digitalWrite (bleu, HIGH);
/*
digitalWrite (chauffe, HIGH);
digitalWrite (arret, HIGH);
digitalWrite (ventil, HIGH);
*/
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print( "INITIALISATION" );
for (int a = 0; a < 3; a++) {
animpoint();
}
digitalWrite (vert, LOW);
digitalWrite (rouge, LOW);
digitalWrite (bleu, LOW);
/*
digitalWrite (chauffe, LOW);
digitalWrite (arret, LOW);
digitalWrite (ventil, LOW);
*/
}
int lastTemp_int = -100;
int lastTemp_ext = -100;
void loop() {
float temp_int = lectureTemp_int(); //appel fonction avec retour de temperature_int
if ( abs(temp_int - lastTemp_int) < 0.20 )
return;
lastTemp_int = temp_int;
lcd.setCursor(0, 0);
lcd.print( "Int. :" );
lcd.print( temp_int );
lcd.write(223); // affiche le signe degré
lcd.print( "C" );
lcd.print( " " );
delay(600);
float temp_ext = lectureTemp_ext();
if ( abs(temp_ext - lastTemp_ext) < 0.20 )
return;
lastTemp_ext = temp_ext;
lcd.setCursor(0, 1);
lcd.print( "Ext. :" );
lcd.print( temp_ext );
lcd.write(223); // affiche le signe degré
lcd.print( "C" );
lcd.print( " " );
delay(600);
if (temp_int < 18) {
digitalWrite(rouge, HIGH); //en chauffe
}
if (temp_int > 23) {
digitalWrite(rouge, LOW); //éteindre le chauffage
}
if (temp_int > 26) {
digitalWrite(bleu, HIGH); //ventilateur
}
}
float lectureTemp_int() {
int valeur_int = analogRead(capteur_interieur);
float tension_int = valeur_int * 5.0;
tension_int /= 1024.0;
float temperature_int = ((tension_int * 1000) - 500) / 10;
return (temperature_int);
}
//______________________________________________//
// //
float lectureTemp_ext() {
int valeur_ext = 133; //analogRead(capteur_exterieur);
float tension_ext = valeur_ext * 5.0;
tension_ext /= 1024.0;
float temperature_ext = ((tension_ext * 1000) - 500) / 10;
return (temperature_ext);
}
/*
if (temp_int < 18) {
digitalWrite(rouge, HIGH); //en chauffe
}
if (temp_int > 23) {
digitalWrite(rouge, LOW); //éteindre le chauffage
}
if (temp_int > 26) {
digitalWrite(bleu, HIGH); //ventilateur
}
}
*/