projet couveuse ventilée

Jean-François: Pense aussi à une façon de refroidir l'air, éventuellement un portillon qui s'ouvre dans la préchambre et qui "aspire" de l'air de l'extérieur de la couveuse.... une idée comme ça.

Tant qu'à se lancer dans l'usine à gaz :grin: je mettrais un module peltier pour refroidir l'air trop rechauffé :grin:

Artouste: Tant qu'à se lancer dans l'usine à gaz :grin: je mettrais un module peltier pour refroidir l'air trop rechauffé :grin:

J'osais pas le proposer :grin:

bonjour, les propositions fusent a ce que je vois :grin: je viens de recevoir un dht21 et il est déjà monté avec un shield ethernet tant qu' a faire MDR j'ai comparé avec ma station météo pro et ca peut aller niveau T° et Hum.

montage d'une led pour tester si la temp est en dessous d'une certaine valeur, je pense que je vais attaquer sérieux dans la journée si tout mon taf avance vite.

un petit bout de code pour ceux que ca pourrait intéresser le seul petit problème, les couleurs mal gérées à part le background

//projet couveuse infobarquee
//temp et humidex avec lampe temoin V1.0
#include 
#include 
#include "DHT.h"
#define DHTPIN 2 

int led1 = 9; // led

byte    mac[] =     { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };   //physical mac address
byte    ip[] =      { 192, 168, 2, 177 };                     // ip in lan
byte    gateway[] = { 192, 168, 2, 2 };                       // the IP of the router or acsesspoint
byte    subnet[] =  { 255, 255, 255, 0 };                     //subnet mask (i dont think this is neccesary
Server  server(80);  // server port (change this if you are having a local webserver else than the arduino)

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);


void setup()
{    
  Serial.begin(9600); //enable serial datada print
  Ethernet.begin(mac, ip, gateway, subnet); //start Ethernet
  pinMode(led1, OUTPUT);
  Serial.println("DHTxx test!");

  dht.begin();
}

void loop(){

  Client client = server.available();  // Create a client connection
  if (client) {
    while (client.connected()) {
      if (client.available()) {
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      if (t < 20){analogWrite(led1,255);}else{analogWrite(led1,0);}
       if (isnan(t) || isnan(h)) {
        Serial.println("Failed to read from DHT");
        } else {

          Serial.print("Humidity: "); 
          Serial.print(h);
          Serial.print(" %\t");
          Serial.print("Temperature: "); 
          Serial.print(t);
          Serial.println(" *C");
        }     
//Web page   
         client.println("HTTP/1.1 200 OK"); //output HTML data starting with standart header
          client.println("Content-Type: text/html");
          client.println();
          client.print  (""); //set background to white
          client.print("
");          client.println("

Arduino control Temperature And Humidex

");//send first heading          client.println("

Refresh every 5s

");//send first heading          client.println("

By Infobarquee

");//send first heading          client.print("

Humidity: ");          client.print(h);          client.println(" %\t");          client.print("Temperature: ");          client.print(t);          client.println(" *C");           client.println("

");          client.println("");          client.println(""); //refresh every 5s          client.stop(); //stopping client        }          }  } }

infobarquee: bonjour, les propositions fusent a ce que je vois :grin: je viens de recevoir un dht21 et il est déjà monté avec un shield ethernet tant qu' a faire MDR j'ai comparé avec ma station météo pro et ca peut aller niveau T° et Hum.

C'est sympa tous ces projets différents :grin:

rapide regard sur le datasheet (si je ne me suis pas planté , le sourçage est difficile) en precision tu es déjà a +/- 1° C , 0.1 en résolution et repetatibilité +/- 0.2°

Par pure curiosité , je serais curieux de savoir quels capteurs sont utilisés dans les couveuses des liens que tu a exposé plus haut 8)

Measuring range humidity 0-100%RH; temperature -40 - 80Celsius Accuracy humidity +/-3%RH(Max +-5%RH); temperature < +/-1Celsius Resolution or sensitivity humidity 0.1%RH; temperature 0.1Celsius Repeatability humidity +/-1%RH; temperature +/-0.2Celsius

petit extrait du serial

Humidity: 55.60 %   Temperature: 20.00 *C
Humidity: 55.10 %   Temperature: 19.80 *C
Humidity: 55.00 %   Temperature: 20.00 *C
Humidity: 54.70 %   Temperature: 19.70 *C
Humidity: 54.50 %   Temperature: 19.80 *C
Humidity: 54.40 %   Temperature: 19.80 *C
Humidity: 54.40 %   Temperature: 19.90 *C
Humidity: 54.50 %   Temperature: 20.10 *C
Humidity: 54.40 %   Temperature: 20.10 *C
Humidity: 54.20 %   Temperature: 20.00 *C
Humidity: 53.90 %   Temperature: 20.10 *C
Humidity: 53.90 %   Temperature: 20.10 *C
Humidity: 53.70 %   Temperature: 20.30 *C
Humidity: 53.30 %   Temperature: 20.30 *C
Humidity: 52.70 %   Temperature: 20.30 *C
Humidity: 52.20 %   Temperature: 20.30 *C
Humidity: 52.30 %   Temperature: 20.50 *C
Humidity: 52.20 %   Temperature: 20.40 *C
Humidity: 52.20 %   Temperature: 20.40 *C
Humidity: 52.10 %   Temperature: 20.50 *C
Humidity: 51.60 %   Temperature: 20.40 *C
Humidity: 51.40 %   Temperature: 20.60 *C

pour la sonde, je vais regarder, un pote a une couveuse ventilée justement. prochain test, le wifi avec les cartes de papa noël

voila, c'est en wifi le bébé :) pour ceux que ca pourrait intéresser je mets le script aussi, mais bon pas top en accès de l'extérieur, en interne ca va.

//projet couveuse infobarquee
//temp et humidex avec lampe temoin V1.0
#include 
#include "DHT.h"
#define DHTPIN 7 

int led1 = 9; // led
float h ;
float t ;


#define WIRELESS_MODE_INFRA 1
#define WIRELESS_MODE_ADHOC 2

// Wireless configuration parameters ----------------------------------------
unsigned char local_ip[] = {192,168,2,200}; // IP address of WiShield
unsigned char gateway_ip[] = {192,168,2,2}; // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0};  // subnet mask for the local network
const prog_char ssid[] PROGMEM = {"infobarquee-maison"};        // max 32 bytes

unsigned char security_type = 0;    // 0 - open; 1 - WEP; 2 - WPA; 3 - WPA2

// WPA/WPA2 passphrase
const prog_char security_passphrase[] PROGMEM = {"12345678"};   // max 64 characters

// WEP 128-bit keys
// sample HEX keys
prog_uchar wep_keys[] PROGMEM = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, // Key 0
                  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,    // Key 1
                  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,    // Key 2
                  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Key 3
                };

// setup the wireless mode
// infrastructure - connect to AP
// adhoc - connect to another WiFi device
unsigned char wireless_mode = WIRELESS_MODE_INFRA;

unsigned char ssid_len;
unsigned char security_passphrase_len;
// End of wireless configuration parameters ----------------------------------------

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);


// This is our page serving function that generates web pages
boolean sendMyPage(char* URL) {
  
    // Check if the requested URL matches "/"
    if (strcmp(URL, "/") == 0) {
        // Use WiServer's print and println functions to write out the page content
//Web page   
         //WiServer.println("HTTP/1.1 200 OK"); //output HTML data starting with standart header
          //WiServer.println("Content-Type: text/html");
          //WiServer.println();
          float h = dht.readHumidity();
          float t = dht.readTemperature();
          WiServer.print  (""); //set background to white
          WiServer.print("
");          WiServer.println("

Arduino control Temperature And Humidex

");//send first heading          WiServer.println("

Refresh every 5s

");//send first heading          WiServer.println("

By Infobarquee

");//send first heading          WiServer.print("

Humidity: ");          WiServer.print(h);          WiServer.println(" %\t");          WiServer.print("Temperature: ");          WiServer.print(t);          WiServer.println(" *C");          WiServer.println("

");          WiServer.println("");           WiServer.println(""); //refresh every 5s           WiServer.println("");          //WiServer.stop(); //stopping client                // URL was recognized        return true;    }    // URL not found    return false; } void setup() {      Serial.begin(9600); //enable serial datada print  WiServer.init(sendMyPage);    WiServer.enableVerboseMode(true);  pinMode(led1, OUTPUT);  Serial.println("DHTxx test!");  dht.begin(); } void loop(){      float h = dht.readHumidity();      float t = dht.readTemperature();      if (t < 20 || t > 21){analogWrite(led1,255);}else{analogWrite(led1,0);}       if (isnan(t) || isnan(h)) {        Serial.println("Failed to read from DHT");        } else {          Serial.print("Humidity: ");          Serial.print(h);          Serial.print(" %\t");          Serial.print("Temperature: ");          Serial.print(t);          Serial.println(" *C");        }            WiServer.server_task();    delay(10);        }

EDIT un petit gauffrage dans le code :)

petit feedback pour le dht21
assez précis, mais pas du tout réactif aux différences de températures.
il lui faut plusieurs minutes pour arriver à la bonne température ou alors je me suis vautré dans le codage.

bonjour, alors pour revenir au dht21, il faut lui retirer 1C pour qu'il soit juste.

sinon pour les couveuses semi pro, la sonde est une dallas, qui elle équipe les stations météo semi pro et pro, précise et surtout réactive, quelqu'un en parle sur le forum dans la partie anglaise, il faut utiliser le wire.h pour la faire fonctionner. http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1198065647

infobarquee: bonjour, alors pour revenir au dht21, il faut lui retirer 1C pour qu'il soit juste.

sinon pour les couveuses semi pro, la sonde est une dallas, qui elle équipe les stations météo semi pro et pro, précise et surtout réactive, quelqu'un en parle sur le forum dans la partie anglaise, il faut utiliser le wire.h pour la faire fonctionner. http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1198065647

les DS1621 sont équivalent aux dDS18S20 la seule différence est la connexion en 2fils pour la 1621 et en 1-wire pour la 18s20. la precision est de 0.5 C° 9 bits de résolution presentée = echelon au 1/2 °C c'est du parfaitement courant comme precision de capteur

bonjour, un ti up pour l'avancement de la chose, surtout que ca commence a urger, les oeufs arrivent tous les jours comme si c'était paques.

donc, installation de 2 relais pour piloter une lampe de 60w pour les tests et prochaine étape mise en place de 2 ventilos de pc montés sur des cornets afin de bien canaliser le flux d'air. en passant, madame m'a un peu engueulé, j'ai fait sauter les plombs de la maison :) , erreur de débutant de ma part en branchant le 200v et la terre au lieu de la masse :blush:

modification du script en remettant une carte ethernet car avec la wishield je trouve pas la solution, afin de rentrer les valeurs mini et maxi sur mon server pour envoyer par socket à l'arduino. par contre je n'arrive pas encore a stocker les valeurs en mémoire en cas de coupure de courant, il faut remettre les valeurs dans "l'admin"

infobarquee: par contre je n'arrive pas encore a stocker les valeurs en mémoire en cas de coupure de courant, il faut remettre les valeurs dans "l'admin"

Bonjour Msieur coin-coin ! :grin: pourquoi tu ne stocke pas en eeprom sur l'arduino tes dernieres valeurs de consigne envoyées ? en cas de perte de liaison pour raison x ou y , au retour de la liaison tu viens relire ces valeurs et tu les réinjecte dasn ton "admin" ?

c'est bien ce que j'essaye de faire Artouste, je viens de jeter un oeil sur eeprom.write et read, mais je ne pige pas trop le principe pour mettre 2 valeurs je voudrais donc garder en eeprom ceci : tempmini = 37 tempmaxi = 38.5 par exemple.

j'essaye ceci :

tempmini =  atof(packetBuffer);
tempmaxi =  atof(packetBuffer1);
eeprom.write(temp(0) ,  tempmini);
eeprom.write(temp(1) ,  tempmaxi);

puis pour les ressortir, mais j'ai une erreur

tempmini = eeprom.write(temp(0) );
tempmaxi =  eeprom.write(temp(1));

infobarquee: c'est bien ce que j'essaye de faire Artouste, je viens de jeter un oeil sur eeprom.write et read, mais je ne pige pas trop le principe pour mettre 2 valeurs je voudrais donc garder en eeprom ceci : tempmini = 37 tempmaxi = 38.5 par exemple.

j'essaye ceci :

tempmini =  atof(packetBuffer);
tempmaxi =  atof(packetBuffer1);
eeprom.write(temp(0) ,  tempmini);
eeprom.write(temp(1) ,  tempmaxi);

puis pour les ressortir, mais j'ai une erreur

tempmini = eeprom.write(temp(0) );
tempmaxi =  eeprom.write(temp(1));

a priori tu ne peux ecrire et lire en eeprom que du byte (8 bits) si tu veux du .5 ça ne tient sur un byte : le type d'origine n'est pas bon il faut gérer l'occupation en eeprom et les types de data

merci Artouste pour l'info, j'ai contourné le problème en multipliant par 100 les valeurs mini et maxi puis opération inverse pour les récupérer avec les décimales. par contre je n'ai pas l'impression que les valeurs restent en mémoire. si quelqu'un pouvait me confirmer que ca fonctionne ou doit foncitonner, j'ai pris exemple sur le cookbook

#include 
#include        // needed for Arduino versions later than 0018
#include 
#include 
#include          // UDP library from: bjoern@cs.stanford.edu 12/30/2008
#include "DHT.h"
#define DHTPIN 7 
int ventilo = 9; // led
int resistance = 8; // led



// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 
  192,168,2,200 };
unsigned char gateway[] = { 
  192,168,2,2 };           
unsigned char mask[] = {
  255,255,255,0}; 
Server server(80);

unsigned int localPort = 80;      // local port to listen on
float tempmini;
float  tempmaxi;

//constants EEPROM 
const byte EEPROM_ID = 0x99; // used to identify if valid data in EEPROM
const int ID_ADDR = 0; // the EEPROM address used to store the ID
const int tempminimem = 1; // the EEPROM address used to store temperature mini
const int tempmaximem = 2; // the EEPROM address used to store temperature maxi
byte id;
byte id1;

// the next two variables are set when a packet is received
byte remoteIp[4];        // holds received packet's originating IP
unsigned int remotePort; // holds received packet's originating port

// buffers for receiving and sending data
char  packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char packetBuffer1[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char  ReplyBuffer[] = "acknowledged";       // a string to send back
char  ReplyBuffer1[] = "acknowledged";       // a string to send back

#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);


void setup() {
  // start the Ethernet and UDP:
  Ethernet.begin(mac, ip, gateway, mask);
  Udp.begin(localPort);
  dht.begin();
  Serial.begin(9600);
  pinMode(ventilo, OUTPUT);
  pinMode(resistance, OUTPUT); 
  server.begin();

  byte id = EEPROM.read(ID_ADDR); // read the first byte from the EEPROM     
  if( id == EEPROM_ID){     

    byte id1 = EEPROM.read(tempminimem); // read the 2 byte from the EEPROM   
    byte id2 = EEPROM.read(tempmaximem); // read the 3 byte from the EEPROM
    tempmini = id1/100;
    tempmaxi = id2/100;
  }
}

void loop() {
  Serial.print("id1 : ");
  Serial.println(id1);  

  // if there's data available, read a packet
  int packetSize = Udp.available(); // note that this includes the UDP header
  if(packetSize)
  {


    packetSize = packetSize - 8;      // subtract the 8 byte header
    Serial.print("Received packet of size ");
    Serial.println(packetSize);


    memset(packetBuffer, 0, UDP_TX_PACKET_MAX_SIZE);
    memset(packetBuffer1, 0, UDP_TX_PACKET_MAX_SIZE);

    // read the packet into packetBufffer and get the senders IP addr and port number
    Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
    Serial.println("Contents:");
    Serial.println(packetBuffer);
    Udp.readPacket(packetBuffer1,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
    Serial.println("Contents1:");
    Serial.println(packetBuffer1);   

     tempmini =  atof(packetBuffer); //atof lre float
    tempmaxi =  atof(packetBuffer1); //atof lre float
    int tempminimem1 = tempmini*100; //passage pour retirer decimale
    int tempmaximem1 = tempmaxi*100; //passage pour retirer decimale

    Serial.println("Writing default data to EEPROM");
    Serial.print("tempminimem1 : ");
    Serial.println(tempminimem1); 
    Serial.print("tempmaximem1 : ");
    Serial.println(tempmaximem1);        
    EEPROM.write(ID_ADDR,EEPROM_ID); // write the ID to indicate valid data
    EEPROM.write(tempminimem,tempminimem1); // write the temp mini * 100
    EEPROM.write(tempmaximem,tempmaximem1); // save the temp maxi *100

    Serial.print("tempmini : ");
    Serial.println(tempmini);
    Serial.print("tempmaxi : ");
    Serial.println(tempmaxi);     


    analogWrite(13, atoi(packetBuffer)); //utiliser la valeur reçu pour allumer la led
    analogWrite(5, atoi(packetBuffer1)); //utiliser la valeur reçu pour allumer la led


  }
  delay(2);
  float h = dht.readHumidity();
  float t = dht.readTemperature();    

  t=t-1;
  if (t < tempmini){
    digitalWrite(ventilo,1);
    digitalWrite(resistance,1);
  }
  else if(t > tempmaxi){
    digitalWrite(ventilo,1);
    digitalWrite(resistance,0);
  }
  else{
    digitalWrite(ventilo,0);
    digitalWrite(resistance,0);    
  }
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } 
  else {

    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
    Serial.print("Tempmini: "); 
    Serial.print(tempmini);
    Serial.println(" *C");
    Serial.print("Tempmaxi: "); 
    Serial.print(tempmaxi);
    Serial.println(" *C");    
  } 


}

en attendant de trouver une solution pour garder en eeprom les variables, je viens de rajouter un lcd sur le proto. grosse prise de tête avec le lcd gdm1602a pour les branchements, mais maintenant j'ai le répéteur de temp et hum sur le lcd, faut commencer a pousser les murs pour trouver des broches de libre sans pour autant créer de conflit. je mets le code quand même pour ceux qui seraient intéressés.

#include        // needed for Arduino versions later than 0018
#include 
#include 
#include 
#include          // UDP library from: bjoern@cs.stanford.edu 12/30/2008
#include "DHT.h"
#define DHTPIN A0 
int ventilo = 8; // led
int resistance = 9; // led

LiquidCrystal lcd1(7, 6, 5, 4, 3, 2);

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,2,200 };
unsigned char gateway[] = { 192,168,2,2 };          
unsigned char mask[] = {255,255,255,0}; 
Server server(80);

unsigned int localPort = 80;      // local port to listen on
float tempmini;
float  tempmaxi;


// the next two variables are set when a packet is received
byte remoteIp[4];        // holds received packet's originating IP
unsigned int remotePort; // holds received packet's originating port

// buffers for receiving and sending data
char  packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char packetBuffer1[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char  ReplyBuffer[] = "acknowledged";       // a string to send back
char  ReplyBuffer1[] = "acknowledged";       // a string to send back

#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);


void setup() {
  // start the Ethernet and UDP:
  Ethernet.begin(mac, ip, gateway, mask);
  Udp.begin(localPort);
   dht.begin();
  Serial.begin(9600);
   pinMode(ventilo, OUTPUT);
  pinMode(resistance, OUTPUT); 
     server.begin();
       lcd1.begin(16, 2);
}

void loop() {

  // if there's data available, read a packet
  int packetSize = Udp.available(); // note that this includes the UDP header
  if(packetSize)
  {

     
    packetSize = packetSize - 8;      // subtract the 8 byte header
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
    

    memset(packetBuffer, 0, UDP_TX_PACKET_MAX_SIZE);
    memset(packetBuffer1, 0, UDP_TX_PACKET_MAX_SIZE);

    // read the packet into packetBufffer and get the senders IP addr and port number
    Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
    Serial.println("Contents:");
    Serial.println(packetBuffer);
     Udp.readPacket(packetBuffer1,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
    Serial.println("Contents1:");
    Serial.println(packetBuffer1);   
    
      //tempmini =  float (atoi(packetBuffer));
      //tempmaxi =  float (atoi(packetBuffer1));
       tempmini =  atof(packetBuffer);
        tempmaxi =  atof(packetBuffer1); 
      
     Serial.print("tempmini : ");
     Serial.println(tempmini);
          Serial.print("tempmaxi : ");
     Serial.println(tempmaxi);     


    analogWrite(11, atoi(packetBuffer)); //utiliser la valeur reçu pour allumer la led
        analogWrite(12, atoi(packetBuffer1)); //utiliser la valeur reçu pour allumer la led
        
  }
  delay(2);
    float h = dht.readHumidity();
  float t = dht.readTemperature();    

  t=t-1;
  if (t < tempmini){
    digitalWrite(ventilo,1);
    digitalWrite(resistance,1);
  }
  else if(t > tempmaxi){
    digitalWrite(ventilo,1);
    digitalWrite(resistance,0);
  }
  else{
    digitalWrite(ventilo,0);
    digitalWrite(resistance,0);    
  }
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } 
  else {

    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");
    Serial.print("Tempmini: "); 
    Serial.print(tempmini);
    Serial.println(" *C");
    Serial.print("Tempmaxi: "); 
    Serial.print(tempmaxi);
    Serial.println(" *C");
  lcd1.setCursor(0, 0);
    lcd1.print("hum: "); 
    lcd1.print(h);
    lcd1.print("%\t");
    lcd1.setCursor(0, 1);
    lcd1.print("Temp: "); 
    lcd1.print(t);
    lcd1.print("C");    
  } 
}

Avec une couveuse comme ça, à l'éclosion tu auras des éléphants XD

infobarquee: en attendant de trouver une solution pour garder en eeprom les variables,

selon le type de variable que tu veux conserver en eeprom il faut la décomposer en tableau de byte l'ecrire et faire la reconstitution inverse à la lecture.

les petits genies du coding doivent bien avoir ça dans leurs tiroirs :grin:

j'ai mis ma tentative au post #35 Artouste ;)

mais si je coupe l'alim, ca ne reste pas en memoire apparemment. remarque maintenant avec le lcd, je peux peut être vérifier si ca reste ou pas.

Yep!

EEPROM + Float :

#include "EEPROM.h"

float value = 19.88;
int adress = 0;

// Utilities for writing and reading from the EEPROM
float readFloat(int address) {
  union floatStore {
    byte floatByte[4];
    float floatVal;
  } floatOut;
  
  for (int i = 0; i < 4; i++) 
    floatOut.floatByte[i] = EEPROM.read(address + i);
  return floatOut.floatVal;
}

void writeFloat(float value, int address) {
  union floatStore {
    byte floatByte[4];
    float floatVal;
  } floatIn;
  
  floatIn.floatVal = value;
  for (int i = 0; i < 4; i++) 
    EEPROM.write(address + i, floatIn.floatByte[i]);
}

void setup() {
  Serial.begin(9600);
  
  writeFloat(value, adress);
  
  float n = readFloat(adress);
  Serial.println(n);
  
}

void loop() { }

Pour insérer une seconde valeur, ne pas oublier de décaler l'adresse de 4 bytes.

@+

Zoroastre.

merci zoroastre, après plusieurs tatonnements ca fonctionne, car ma variable n'est pas prédéfinie au départ, mais au moment ou je rentre les données via ma page web sur mon server. maintenant, je vais essayer de piger comment décaler de 4 bits comme tu l'as suggéré.