Réaliser une régulation de température avec DS18B20 et PID

Bonjour, je suis un jeune débutant sur Arduino de 66 Ans..HI
Mon projet est de faire une supervision d'une cave à vins avec 5 sondes.
4 seront en contrôle de différentes températures

  • Température du grenier (ou se situe la climatisation)
  • Température du caisson dans lequel est la clim (pour un Hors gel l'hiver)
  • Température de refoulement de l'air frais (pour contrôler si la clim fait toujours du froid)
  • Température de l'évaporateur ( en été il ne doit pas dépasser 55°C sinon ca ne fait plus de froid)
    Ces 4 contrôles agiront en tout ou rien sur des alarmes.

La 5 eme sonde prendras la Température de la cave et c'est celle-ci que je veux utiliser pour réguler suivant le schémas suivant:

Température <11.8 mise en route d'un radiateur de 800W
Température >12.1 Arrêt du dit radiateur.
Température >14.0 mise en route de la climatisation.
Température <13.2 arrêt de la climatisation.
Le Delta en froid est plus important car l'inertie thermique est plus importante qu'en mode chauffage.

La sécurité d'enclenchement entre le chaud et le froid est donc entre12.8 (inertie du froid et 12.2 inertie du chaud).

J'ai déjà utilisé les croquis pour trouver les adresses des DS18B20 et la lecture de 5 d'entres eux sur un bus One Wire.

Maintenant je suis à la recherche d'un exemple de proogrammattion de 2 relais ( un chaud un froid) avec un PID qui répondrait à mon cahier des charges.

Merci aux auteurs de ce que j'ai déjà trouvé sur le net.
Merci à ceux qui pourrais m'aider.

Salut !

Pour faire de la régulation PID, j'avais regardé ici :

http://www.ferdinandpiette.com/blog/2012/04/asservissement-en-vitesse-dun-moteur-avec-arduino/
http://www.rhaaa.fr/regulation-pid-comment-la-regler-12

Maintenant tu as fixé des seuils donc du tout ou rien peut aussi marcher :wink: !

L'air ambiant c'est un peu chiant ya des gradients de folie quand ya pas de ventilation donc choisis bien l'emplacement de tes sondes !

Excuse moi je me suis trompé de rubrique. J' l'ai recrée dans le forum français. Je ne savais ps.
Comment supprimer celui-ci?. MErci

Merci PéPé de ta réponse. Si tu as le temps et la bonté de le faire pourrais tu me proposer les quelques lignes modifiées qui me permettrons de faire fonctionner la clim dan sles conditions suivantes:

Si valdigit 4>372 ( CàD que la cave est au dessus de 13.0°C on autorise la clim)
Si valdigit7<935 (CàD que le condenseur n'est pas au dessus de 55°C on autorise la clim)

Puis lorsque la clim a été coupée au dessus de 55°C ne la remettre en route que si T° est en dessous de 35°)
Je ne sais pas encore bien programmer en arduino et j'ai besoin de l'expérience des autres.
Merci de ton aide éventuelle basée sur la bonté et la solidarité des arduinotes...
Bonne journée à toi.

Si ça t'intéresse, j'ai programmé une fonction PID avec l'aide de Pepe.

Bonjour Quentin92S oui ça m’intéresse bigrement "en français dans le texte"..HI Je suis preneur d'autant que les DS18B20 sont assez sensibles et la T° n'est pas très stable. Quand j'aurai résolu mes problèmes de gestion de la clim en fonction de différentes températures qui doivent autoriser ou pas la clim je voudrais passer en PiD sachant que ce sera du TouT ou rien car je pilote une relais qui alimente un radiateur ( ça c'est pour l'hiver); L'été la clim a sa propre régul en PiD mais elle a un défaut majeur lorsque la T° du condenseur atteint 55°C elle le signale sur la télécommande mais le groupe continu à tourner pour ne pas faire de froid et consommer jusqu'à 18 Kwh par jour pour ne pas faire de froid. C'est pourquoi j'ai décidé de faire une supervision qui couperas la clim au dessus de 55°C pour le condenseur ou 38° dans le grenier à affiner.
Merci de vos précieuses aides.

voila le code :

//define Kp,Ki,Kd
float kp = 1, ki = 1, kd = 1;
//define PID variable (error, setpoint, mesure, error sum, error variation, last error and output)
float yprMesure[3], yprPidResult[3], yprOutput[3], yprError[3], yprAddError[3], yprVarError[3], yprLastError[3], yprSetpoint[3];
float rcControllerOutput[3];
float ypr[3];

void setup() 
{
  Serial.begin(9600);
}
inline void gyroPidAxe(float yprMesure[], float yprOutput[], float yprSetpoint[], char n)
{
  //Compute error for all the 3 axis
  yprError[n] = yprSetpoint[n] - yprMesure[n];
  //Compute error sum for all the 3 axis
  yprAddError[n] += yprError[n];
  // Compute error variation for all the 3 axis
  yprVarError[n] += yprError[n] - yprLastError[n];
  //Compute angle correction
  yprOutput[n] = kp * yprError[n] + ki * yprAddError[n] + kd * yprVarError[n];
  //Compute Last error
  yprLastError[n] = yprError[n];
}

void gyroPid(float yprMesure[], float yprOutput[], float yprSetpoint[])
{
  gyroPidAxe(yprMesure, yprOutput, yprSetpoint, 0);
  gyroPidAxe(yprMesure, yprOutput, yprSetpoint, 1);
  gyroPidAxe(yprMesure, yprOutput, yprSetpoint, 2);
}
void loop() 
{

  //Call the fonction every seconds (for good correction, you need at least a delay of 20ms or faster)
  gyroPid(ypr, yprPidResult, rcControllerOutput);

  //Print the corrections values for each angle
  Serial.println(yprPidResult[0]);
  Serial.println(yprPidResult[1]);
  Serial.println(yprPidResult[2]);
  Serial.println(" ");
  delay(1000);
}

Ma fonction concernait un PID sur 3 axes, si tu n'en a besoin que sur un axe, ne déclare pas des tableaux mais simplement des variables, et supprime "char n" ainsi que la fonction gyroPid. Si tu ne comprend rien aux PID, je te conseille ce site :
http://www.ferdinandpiette.com/blog/2011/08/implementer-un-pid-sans-faire-de-calculs/

merci Quentin92S je suis entrain de mettre au point ma régulation avec les tests des relais et ensuite je regarde ce que tu me propose.
Je te tiens au courant (220 ou 380)!..HI

Derien !

re re bonjour Quentin92S j'ai un problème: dans ce code:

/***********************************

  • Gestion des Relais et Alarmes *
    ***********************************/

if (valdigit4 < 414 || valdigit7 > 503)
{digitalWrite(Relaisclimatisation, HIGH );
Etatrelaisclimatisation = 0;}
// 414-->23° interdit la clim en dessous de 12.5°C. (225-->12.5°C)
// 503-->28° coupe la clim au dessus de 52°C.(935-->52°C)
else if (valdigit4 > 414 || valdigit7 < 414){
digitalWrite(Relaisclimatisation, LOW );
Etatrelaisclimatisation = 1;}
// 466-->26° retabli la clim en dessous de 48°C. (863-->48°C)
// 414-->23° autorise la clim au dessus de 12.5°C. (225-->12.5°C)
comme l'explique PéPé j'ai une contradiction entre le Premier test "valdigit7>503 etle 2eme test
valdigit4 > 414 qui est vrai en même temps.

Comment ne pas faire le 2eme test si le 1er est vrai;
Je n'ai pas trouvé de possibilité de faire un "jump" à la fin du 1er test s'il est vrai pour ne pas faire le 2eme temps que le 1er est vrai.; J'espère que tu as compris.
Merci de ton aide.

Bon bah, je pense avoir compris ta question : tu veux savoir comment programmer la régulation de température de la cave, tout en bloquant la climatisation lorsque la température monte au dessus de 55 °C, et ce jusqu'à ce qu'elle redescende à 35°C.

Le code :

// définie les variables qui contiennent la température, ainsi que les adresse des DS18B20
float temperatureCave, sonde1, sonde2, sonde3, sonde4;
float DS18B20_1, DS18B20_2, DS18B20_3, DS18B20_4, DS18B20_5;

void setup() 
{
  Serial.begin(9600);
}
float getTemperatureDS18B20(BS18B20)
{
  //code pour lire la température
  return temperature
}

void loop()
{
  temperatureCave = getTemperatureDS18B20(DS18B20_5);
  sonde1 = getTemperatureDS18B20(DS18B20_1);
  sonde2 = getTemperatureDS18B20(DS18B20_2);
  sonde3 = getTemperatureDS18B20(DS18B20_3);
  sonde4 = getTemperatureDS18B20(DS18B20_4);
 
  // switch qui permet de tester toutes les conditions
  switch(temperatureCave)
  {
    case < 11.8 :
    //allumer radiateur
    case > 12.1 :
    //eteindre radiateur
    case > 14.0 :
      //on coupe la clim
      if (sonde4 > 55);
      {
        // tant que la température est supérieur à 35 °C
        while (sonde4 > 35);
        {
          //eteindre climatisation
          delay(60000);
        } 
      }
      else ()
      {
        //allumer climatisation
      }
    case < 13.2 :
    //eteindre climatisation
    break;
  }
  
  delay (60000);
  
}

Tu remarquera que je ne connaît pas grand chose sur la librairie OneWire, je te laisse lire ce site pour plus de détail : Plusieurs capteurs de température DS18B20 (Arduino) - Dekloo.net
Le petit inconvénient de ce code est que le radiateur ne chauffe pas si la température de la clim est supérieur à 55 °C et ce jusqu'à ce qu'elle redescende à 35°C, mais je pense que le chauffage n'est pas nécessaire si la climatisation atteint de telle température :stuck_out_tongue:
Je précise aussi qu'il peut y avoir des erreurs, je n'ai pas tester le code, je n'en ai pas les moyens

Merci Quentin92S. Je me permet de te mettre la partie intéressante de mon code et de te proposer d'y insérer ta version au niveau de la "Gestion des Relais et Alarmes" pour que je comprenne comment fonctionne case qui doit être sur S4 température de la cave et S7 température du condenseur.
Bien évidemment le radiateur ne fonctionne qu'entre 11.7° et 12.0°; la clim démarre à 13° de la cave S4 jusqu'à 55°C de S7 puis redémarre quand S7 est < à 35°C.
ci joint un diagramme de fonctionnement gestion relais:
Merci de ton aide car je ne connais pas encore assez bien ARDUINO j'ai programmé longtemps en assembleur mais pas en C+ ou C++

/**************************************************************
* -----------  Gestion de la cave du POP ---------------------*
* Prise de températures dans 4 points différents pour couper  * 
* la climatisation en cas de surchauffe de l'évaporateur.     *
* Avril 2016                                                  *
***************************************************************/

#include <U8glib.h> 
#include <Wire.h>
#include <math.h>
#include <DS1307new.h>
#include <DallasTemperature.h>
#include <OneWire.h>

U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE); // Câblage SPI

//DS3232
//////////////////////////////////////////////////
int I2C_DS3232=0xD0 >> 1;
byte DS3232control=0b00011100, DS3232status=0b11001000 ,DS3232aging ,DS3232Msb ,DS3232Lsb;
//////////////////////////////////////////////////
uint16_t startAddr = 0x0000;       // Adresse de démarrage Start dans  NV-RAM
uint16_t lastAddr;                 // Nelle addresse des stockage NV-RAM
uint16_t TimeIsSet = 0xaa55;       // Prévient qu'il n'y a pas de remise à l'heure
//
/*
CI DS3232
VDD  3VCC ou 5VCC  
SDA  A4
SCL  A5
*/

//#define Touche_PIN  A0 // Entree platine Boutons
//int sensorPin = A0;  
//int sensorValue = 0; 
int Select;
int Heure;
int Minute;
int Seconde;
int compteur = 0;
int Jour;
int Mois;
int Annee;
int JourSem;
int valdigit;
int valdigit4;
int valdigit5;
int valdigit6;
int valdigit7;
int tempC;
int mesure;
int Etatrelaisclimatisation;
int Etatrelaischauffe;
float coefficient = (1024/55);//1024/55°C
float TempS;
float TempS4;
float TempS5;
float TempS6;
float TempS7;


/*********************
 * ADRESSAGE DES PIN *
 *********************/

//Data wire connecté sur pin 2 de l'Arduino
#define ONE_WIRE_BUS   2
// Relais connectés sur pin 4 et 7.
#define Relaisclimatisation  6
#define Relaischauffe  7


/*********************************************************************
 * Déclaration des adresses des sondes DS18B20 pour la 1-Wire temp   *
 *********************************************************************/
 
      
 
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
 
DeviceAddress sonde4 = { 0x28, 0x31, 0xC9, 0x7B, 0x07, 0x00, 0x00, 0x53 }; // cave
DeviceAddress sonde5 = { 0x28, 0xC1, 0xB8, 0x7B, 0x07, 0x00, 0x00, 0x81 }; // Grenier
DeviceAddress sonde6 = { 0x28, 0x9D, 0x3B, 0x7C, 0x07, 0x00, 0x00, 0xD1 }; // Caisson
DeviceAddress sonde7 = { 0x28, 0x62, 0x05, 0x7C, 0x07, 0x00, 0x00, 0xA1 }; // Condensseur
 

void setup () {
 
   

 /**************************
 * Déclaration des sorties*
 **************************/
  pinMode(Relaisclimatisation, OUTPUT);
  digitalWrite(Relaisclimatisation, HIGH);//On force le relais de la climatisation au repos. (actif à ZERO).
  pinMode(Relaischauffe, OUTPUT); 
  digitalWrite(Relaischauffe, HIGH);//On force le relais de chauffe au repos. (actif à ZERO).
}

 void Affichageecran()
  {  
 
/********************************
/* OUVERTURE DU PORT SERIE COM3 *
/********************************/

   // start serial port
  Serial.begin(115200);

  


 
}


void printTemperature(DeviceAddress deviceAddress)
{

// set the resolution to 11 bit (good enough?)

  sensors.setResolution(sonde4, 11);
  sensors.setResolution(sonde5, 11);
  sensors.setResolution(sonde6, 11);
  sensors.setResolution(sonde7, 11);

 float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00)
  {
    Serial.print("Error getting temperature");
   
  }
  else
  {
    valdigit = (tempC * coefficient);
    TempS = (tempC);
   Serial.print(tempC,1); // n'affiche qu'un chiffre derrière la virgule
   Serial.print(" C    ");
   //Serial.print(TempS);
  }
  
}  
   

 
 void loop() 
 {


  * Gestion des Relais et Alarmes   *
  ***********************************/
   
     if   (valdigit4 < 414 || valdigit7 > 503)
     {digitalWrite(Relaisclimatisation, HIGH );
      Etatrelaisclimatisation = 0;}
       //  414-->23° interdit  la clim en dessous de 12.5°C. (225-->12.5°C)
       //  503-->28° coupe la clim au dessus de 52°C.(935-->52°C)
     else if   (valdigit4 > 414 || valdigit7 < 414){
    digitalWrite(Relaisclimatisation, LOW  );
    Etatrelaisclimatisation = 1;}
      //  466-->26° retabli la clim en dessous de 48°C. (863-->48°C)
      //  414-->23° autorise  la clim au dessus de 12.5°C. (225-->12.5°C)

  
  if   (valdigit4 < 360){
    digitalWrite(Relaischauffe, LOW) ;
    Etatrelaischauffe = 1;}
  //  360-->20° autorise le radiateur au dessous de 11.7°C. (210-->11.7°C)
  
  if   (valdigit4 > 395){
   digitalWrite(Relaischauffe, HIGH );
   Etatrelaischauffe = 0;}
  //  395-->22° coupe le radiateur en dessus de 12.0°C. (216-->12.0°C)


/******************************************************************************************************************************************************************

     

/********************************************************
 * traitements et Affichage  des Températures sur COM3  *
 ********************************************************/
/*  Serial.print("Seconde:   ");
  Serial.print(Seconde);
  Serial.print("\n\r");
  //Serial.print("compteur:   ");
  //Serial.print(compteur);
  //Serial.print("    ");
  */   
  if (Seconde == 0){
  sensors.requestTemperatures();
  delay(100);
  printTemperature(sonde4);
   delay(100);
  valdigit4 = valdigit;
 // valdigit4 = valdigit4 - 7;//(correction T° Offset de la sonde)
  TempS4 = TempS;
  //TempS4 = TempS4 - 0.4;//(correction T° Offset de la sonde)
  compteur = 1;
   
  Serial.print("temperature sonde N4 est: ");
  Serial.print("    ");
  Serial.print(TempS4);
  Serial.print("    ");
  Serial.print(" valdigit4 ");
  Serial.print(valdigit4);
  Serial.print("    ");
  Serial.print("Etat du relais de chauffe:");
  Serial.print (Etatrelaischauffe);
  Serial.print("\n\r");
  }
 
  
  if (Seconde == 15){
  sensors.requestTemperatures(); 
  delay(100); 
  printTemperature(sonde5);
  delay(100);
  valdigit5 = valdigit;
  TempS5 = TempS;
  compteur = 2;
 
  Serial.print("temperature sonde N5 est: ");
  Serial.print("    ");
  Serial.print(TempS5);
  Serial.print("    ");
  //valdigit5 =(valdigit5*(-1)); //pour tester les T° négative
  Serial.print(" valdigit5 ");
  Serial.print(valdigit5);
  Serial.print("\n\r");
    }
  
  
  if (Seconde == 30){
  sensors.requestTemperatures();  
  delay(100); 
  printTemperature(sonde5);
  delay(100);
  valdigit6 = valdigit;
  TempS6 = TempS;
  compteur = 3;
    
  Serial.print("temperature sonde N6 est: ");
  Serial.print("    ");
  Serial.print(TempS6);
  Serial.print("    ");
  Serial.print(" valdigit6 ");
  Serial.print(valdigit6);
  Serial.print("\n\r");
  }
  

  if (Seconde == 45){
  sensors.requestTemperatures();
delay(100); 
  printTemperature(sonde5);
  delay(100);
  valdigit7 = valdigit;
  TempS7 = TempS;
  compteur = 4; 
   
  Serial.print("temperature sonde N7 est: ");
  Serial.print("    ");
  Serial.print(TempS7);
  Serial.print("    ");
  //valdigit5 =(valdigit7*(-1)); //pour tester les T° négative
  Serial.print(" valdigit7 ");
  Serial.print(valdigit7);
  Serial.print("    ");
  Serial.print("Etat du relais de la climatisation:");
  Serial.print (Etatrelaisclimatisation);
  Serial.print("\n\r");
  }
  
  /* tempsFin=micros(); //on récupère à nouveau le temps actuel
   Serial.print((tempsFin-tempsDepart)/1000);// on affiche la différence en microsecondes
   Serial.print("  MilliSeconde");
   Serial.print("\n\r\n\r");*/

   
/***************************
 * MISE A JOUR AFFICHAGE   *
 ***************************/
     
   u8g.firstPage();  
   do 
   Affichageecran(); 
   while( u8g.nextPage());

  
 }

DIAGRAMME GESTION RELAIS.pdf (30.5 KB)

switch (valdigit4)
{
  case < 360 :
    digitalWrite(Relaischauffe, LOW) ;
    Etatrelaischauffe = 1;
    //360-->20° autorise le radiateur au dessous de 11.7°C. (210-->11.7°C)
  case > 395 :
    digitalWrite(Relaischauffe, HIGH );
    Etatrelaischauffe = 0;
    //395-->22° coupe le radiateur en dessus de 12.0°C. (216-->12.0°C)
  case > 414 :
    if (valdigit7 > 503)
    {
      while (valdigit7 > 414)
      {
        digitalWrite(Relaisclimatisation, HIGH );
        Etatrelaisclimatisation = 0;
        delay (60000);
      }
    } 
    else
    {
      digitalWrite(Relaisclimatisation, LOW  );
      Etatrelaisclimatisation = 1;
    }
  case < 414 :
    digitalWrite(Relaisclimatisation, HIGH );
    Etatrelaisclimatisation = 0;
}

Voila pour toi :stuck_out_tongue:
Sinon, je laisse quelqu'un d'autre vérifier que mon code fonctionne correctement, je ne suis pas un expert du C non plus

la commande case <xx ne fonctionne pas il faut faire:
case = xx :

en fait je vais faire une série de test pour savoir que si valdigit4 est > xx "reponse" vaudras 1; puis si valdigit4 > ou < à yy "reponse vaut 2 etc..; Je vais tester les 5 conditions.
Puis je ferai suivant ton idée:

switch (reponse)
{
case = 1:
// faire ceci;
breack;

case = 2:
// faire cela;
break;

Etc.. Merci de ton idée je crois que c'est la bonne!...
Je te tiens au courant du résultat..

Bonjour,

Il ne faut faire ni 'case < xx' ni 'case = x', mais 'case x:', x étant une constante
Si on veut comparer à des seuils, il faut faire une série de if()

bonsoir à vous deux un grand merci car j'ai mis au point mon programme qui fonctionne correctement:
Ci joint le code de la partie régulation des 2 relais.
je vois que vous êtes connecté. bonne appéro.

/***********************************
  * Gestion des Relais et Alarmes   *
  ***********************************/

 /*****************
 *  Climatisation *
 ******************/
 if   (valdigit4 < 414)
      {(Reponse = 1);}
       // rep:A -- 414-->23° interdit  la clim en dessous de 13.0°C. (234-->13.0°C)
             
      if   (valdigit4 > 414 && valdigit7 < 503)
      {(Reponse = 2);}
       // rep:A -- 414-->23° autorise  la clim au dessus de 13.0°C. (234-->13.05°C)
       // rep:C -- 503-->28° si la clim est en dessous de 52°C.(935-->52°C)
      
      if   (valdigit7 < 466)
          {(Defaut = 0);}
      //  rep:B -- 466-->26° retabli la clim en dessous de 48°C. (863-->48°C)
      
      if   (valdigit7 > 503)
      //  rep:C -- 503-->28° coupe la clim au dessus de 52°C.(935-->52°C)
     {(Reponse = 3);
      (Defaut = 1);}
 
 
switch (Reponse)
{
  case 1 :
    digitalWrite(Relaisclimatisation, HIGH );
    Etatrelaisclimatisation = 0;
      delay (100);
    break;
    
 case 2 :
    digitalWrite(Relaisclimatisation, LOW );
    Etatrelaisclimatisation = 1;
      delay (100);
    break;  
 
 case 3 :
    digitalWrite(Relaisclimatisation, HIGH );
    Etatrelaisclimatisation = 0;
     delay (100);
    break;
 
}
    
/****************
 *   Radiateur  *
 ****************/
   if   (valdigit4 < 360){
    digitalWrite(Relaischauffe, LOW) ;
    Etatrelaischauffe = 1;}
      //  360-->20° autorise le radiateur au dessous de 11.7°C. (210-->11.7°C)
  
  if   (valdigit4 > 395){
   digitalWrite(Relaischauffe, HIGH );
   Etatrelaischauffe = 0;}
     //  395-->22° coupe le radiateur en dessus de 12.0°C. (216-->12.0°C)

RECTIFICATIF: je n'avais pas pris la dernière mouture..HI

/***********************************
  * Gestion des Relais et Alarmes   *
  ***********************************/

 /*****************
 *  Climatisation *
 ******************/
 if   (valdigit4 < 414)
      {(Reponse = 1);}
       // rep:A -- 414-->23° interdit  la clim en dessous de 13.0°C. (234-->13.0°C)
             
      if   (valdigit4 > 414 && valdigit7 < 503)
      {(Reponse = 2);}
       // rep:A -- 414-->23° autorise  la clim au dessus de 13.0°C. (234-->13.05°C)
       // rep:C -- 503-->28° si la clim est en dessous de 52°C.(935-->52°C)
      
      if   (valdigit7 < 466)
          {(Defaut = 0);}
      //  rep:B -- 466-->26° retabli la clim en dessous de 48°C. (863-->48°C)
      
      if   (valdigit7 > 503)
      //  rep:C -- 503-->28° coupe la clim au dessus de 52°C.(935-->52°C)
     {(Reponse = 3);
      (Defaut = 1);}
 
 
switch (Reponse)
  {
    case 1 :
      digitalWrite(Relaisclimatisation, HIGH );// 
      Etatrelaisclimatisation = 0;
        delay (100);
    break;
    
    case 2 :
      if (Defaut == 0{
     digitalWrite(Relaisclimatisation, LOW );//
     Etatrelaisclimatisation = 1;
       delay (100);}
    break;  
            
    case 3 :
   
     digitalWrite(Relaisclimatisation, HIGH );// 
     Etatrelaisclimatisation = 0;
       delay (100);
    break;
 
  }

tu es sure que ca compile? moi non :wink:

case 2 :
      if (Defaut == 0{

manque pas un truc?

EXACT if (Defaut == 0){................. if (Defaut == 0){
j'avais pas compilé avant le message.
Merci