thermostat couveuse
bonjour,
je suis actuellement entrain de crée un thermostat pour couveuse
j'ai donc une lcd 2*16 et une sonde de température " pour commencer"
<<les temperature afficher sont sur mon proto >>>
est ce normal que la temperature affiche soir ex: 27.46°c et passe sans que rien ne soit fait directement 28.32°c
je souhaiterai que sa monte au fur et mesure et non par tranche " est ce faisable "?
au final la t° doit etre entre 37.7 et 38.2°c
sonde utiliser lm35dz
merci par avance
code ci dessous :
je suis actuellement entrain de crée un thermostat pour couveuse
j'ai donc une lcd 2*16 et une sonde de température " pour commencer"
<<les temperature afficher sont sur mon proto >>>
est ce normal que la temperature affiche soir ex: 27.46°c et passe sans que rien ne soit fait directement 28.32°c
je souhaiterai que sa monte au fur et mesure et non par tranche " est ce faisable "?
au final la t° doit etre entre 37.7 et 38.2°c
sonde utiliser lm35dz
merci par avance
code ci dessous :
code: [select]
#include "liquidcrystal.h"
const int inputsensor = a0; // on nomme la broche a0 connectée au capteur
const int inputsensor2 = a1; // on nomme la broche a0 connectée au capteur
const int buttonpin = 7;
const int buttonpin_2 = 6;
const int buttonpin_3 = 5;
int buttonstate = 0;
int buttonstate_2 = 0;
int buttonstate_3 = 0;
const int led1 = 3; // on nomme la broche 12 connectée à la led blanc
const int led2 = 2; // on nomme la broche 13 connectée à la led bleue
const int led3 = 4; // on nomme la broche 13 connectée à la led rouge
float temp_min = 27.0 ; //37.7
float temp_max = 30.2 ; //38.2
float hysteresis = 1 ;
liquidcrystal lcd(8,9,10,11,12,13); // les pins utilisés par le lcd
int menu =0 ;
void setup(){
pinmode(inputsensor, input); // déclaration du capteur en entrée
pinmode(inputsensor2, input); // déclaration du capteur en entrée
pinmode(buttonpin, input);
pinmode(buttonpin_2, input);
pinmode(led1, output); // déclaration de la led bleue en entrée
pinmode(led2, output); // déclaration de la led verte en entrée
pinmode(led3, output); // déclaration de la led verte en entrée
lcd.begin(16, 2);
serial.begin(9600);
lcd.clear();
lcd.setcursor(0,0);
lcd.print("thermostat v 1.0" );
delay(3000);
lcd.clear();
}
void loop(){
serial.println(menu);
buttonstate = digitalread(buttonpin);
if (buttonstate == high) {
menu ++;
delay(500);
}
if (menu == 0) {
resistance();
}
if (menu == 1) {
menu_1();
}
if (menu == 2) {
menu_2();
}
if (menu == 3) {
menu_3();
}
if (menu == 4) {
menu = 0;
}
//fonction resistance
}
void resistance(){
lcd.clear();
//int degres2 = analogread(inputsensor2); //test hygro
//float floathygro = degres2*0.49; //test hygro
int degres = analogread(inputsensor); //degres récupère la valeur analogique du capteur
float floatdegres = degres*0.49; //la valeur est ici convertie en degrés
lcd.setcursor(0,0);
lcd.print("temp: " ); lcd.print(floatdegres); lcd.print((char)223); lcd.print("c" );
//lcd.setcursor(0,1); //affiche sur la seconde ligne
//lcd.print("v2 :" ); lcd.print(floathygro); //test hygro
delay(500);
if (floatdegres < temp_min + hysteresis){
digitalwrite (led1, high); //chauffe
digitalwrite (led2, low); //temp ok
digitalwrite (led3, low); //erreur
}
else if (floatdegres > temp_min && floatdegres < temp_max ){
digitalwrite (led1, low); //chauffe
digitalwrite (led2, high); //temps ok
digitalwrite (led3, low); //erreur
}
else if (floatdegres > temp_max ){
digitalwrite (led1, low); //chauffe
digitalwrite (led2, low); //temp ok
digitalwrite (led3, high); //erreur
}
}
void menu_1(){
buttonstate_2 = digitalread(buttonpin_2);
if (buttonstate_2 == high) {
temp_min = temp_min + 0.1;
delay(200);
}
buttonstate_3 = digitalread(buttonpin_3);
if (buttonstate_3 == high) {
temp_min = temp_min - 0.1;
delay(200);
}
lcd.clear();
lcd.setcursor(0,0);
lcd.print(" reglage t-min");
lcd.setcursor(4,1);
lcd.print(temp_min); lcd.print((char)223); lcd.print("c" );
delay(100);
}
void menu_2(){
buttonstate_2 = digitalread(buttonpin_2);
if (buttonstate_2 == high) {
temp_max = temp_max + 0.1;
delay(200);
}
buttonstate_3 = digitalread(buttonpin_3);
if (buttonstate_3 == high) {
temp_max = temp_max - 0.1;
delay(200);
}
lcd.clear();
lcd.setcursor(0,0);
lcd.print(" reglage t-max");
lcd.setcursor(4,1);
lcd.print(temp_max); lcd.print((char)223); lcd.print("c" );
delay(100);
}
void menu_3(){
buttonstate_2 = digitalread(buttonpin_2);
if (buttonstate_2 == high) {
hysteresis = hysteresis + 0.1;
delay(200);
}
buttonstate_3 = digitalread(buttonpin_3);
if (buttonstate_3 == high) {
hysteresis = hysteresis - 0.1;
delay(200);
}
lcd.clear();
lcd.setcursor(0,0);
lcd.print("reglage decalage");
lcd.setcursor(4,1);
lcd.print(hysteresis); lcd.print((char)223); lcd.print("c" );
delay(100);
}
est ce normal que la temperature affiche soir ex: 27.46°c et passe sans que rien ne soit fait directement 28.32°c
je souhaiterai que sa monte au fur et mesure et non par tranche " est ce faisable "?
au final la t° doit etre entre 37.7 et 38.2°c
sonde utiliser lm35dz
on peut faire des mesures très stables avec un lm35 condition de bien s'en servir.
as tu vérifié sur la datasheet que le lm35z répond bien à ton besoin de précision.
si la précision absolue est insuffisante il faut soit faire un étalonnage soit utiliser un lm335 qui peut être calibré.
dans ce qu'on appelle généralement précision il y plusieurs notions :
a) la précision absolue --> 25,1 °c à +/-0,05% --> domaine du laboratoire.
b) la discrimination --> on peut discriminer deux mesures différentes de 0,1°c mais on n'est pas sûr de la valeur absolue.
example : on est capable de détecter que mes2 est supérieur à mes1 de 0,1°c mais on n'est pas sur que mes1 et mes2 ne soient pas connus à +/-1 °c près
c) la répétabilité : dans des conditions identiques de température la sonde donnera le même résultat
d) la fidélité : dans des conditions identiques de température la sonde donnera le même résultat même s'il s'est écoulé plusieurs semaines entre les mesures.
câblage du lm35
ne pas mélanger le fil de 0v (la masse) avec d'autres composants qui pourrait induire du bruit . ne pas oublier que 10mv/°c c'est tout petit.
les fils de connexion doivent être courts. s'ils sont longs voir la solution dans la datasheet du lm35.
nb : le lm335 n'est pas sensible à la longueur des fils comme le lm35.
condition sur le microcontroleur.
datasheet à lire svp.
atmel recommande ne ne pas conserver la première mesure qui est souvent fausse. perso avant de faire la vraie mesure je fais un boucle de 5 mesures que je ne conserve pas.
en principe les librairies arduino font des réglages par défaut du convertisseur analogique/digital satisfaisants, mais sache qu'il est possible de les modifier, mais en dernier ressort quand tout le reste aura déjà été peaufiné.
condition sur la carte.
eh oui les cartes arduino ne sont pas terribles pour les mesures analogiques.
si tu utilises une uno il faut souder un condo de 100 nf au verso directement sur les pins du support entre aref(du micro) et gnd
sur les cartes équipées de micro en boîtier cms il n'y rien d'autre à faire que de moyenner les mesures pour éliminer le bruit.
ps : fait une recherche sur "couveuse" (ou les "coincs" ) et tu trouvera une réalisation déjà faite par "infobarquee"
Arduino Forum > International > Français (Moderators: jfs, Snootlab) > thermostat couveuse
arduino
Comments
Post a Comment