Autre matériel de brassageModule de gestion d'empattage avec un Arduino

Le fourre tout
Règles du forum
Chers membres, merci de prendre connaissance et respecter les quelques règles de bon sens suivantes avant de poster votre message :
- Vous assurer que vous postez dans la bonne rubrique
- Vérifier qu'il n’existe pas déjà une réponse à votre question ou un sujet identique
- Prendre conscience que vos propos n’engagent que vous et que vous devrez en assumer la paternité
- Vérifier les sources des informations que vous diffusez, en vous assurant le cas échéant de respecter les droits d’auteur qui peuvent être liés aux informations, images ou documents cités
- Prendre soin de respecter vos interlocuteurs et bannir les insultes et autres propos diffamatoires ou dégradants
- Vous assurer de rester autant que faire se peut dans le sujet exposé
- Prendre le temps de vérifier l’orthographe et la grammaire de votre message
Merci par avance de votre contribution à préserver le bon esprit de ce forum.
Avatar de l’utilisateur
Doumenia
Ch'ti nouveau
Messages : 5
Inscrit depuis : 9 ans 9 mois
Mon équipement : Cuve d'empattage Polsineli 75 l
Fermenteur Polsineli 75 l
Brasseur : Amateur
A été remercié : 2 fois

Module de gestion d'empattage avec un Arduino

Message par Doumenia »

Bonjour, je suis brasseur amateur et un peu bricoleur d’Arduino, je brasse en multi-paliers et je chauffe au gaz, j’ai eu envie d’automatiser l’empattage, en partie, car rallumer le gaz automatiquement est complexe et couteux.

Voici mon premier module de gestion d’empattage qui gère la coupure du gaz, je dis premier car j’ai l’intention d’en faire un avec un ESP32 plutôt qu’avec un Arduino, mais ça c’est pour plus tard.

Ce module effectue les fonctions suivantes :
 Il mesure la température de la cuve d’empattage
 Il gère quatre paliers pour lesquels il coupe le gaz et lance un minuteur
 Il vous prévient qu’il faut remettre en chauffe en fin de palier
 Il effectue un enregistrement de la température d’empattage sur une carte SD, dans mon exemple toutes les 10 secondes.

Le gros inconvénient de ce module est qu’il faut le brancher à un PC en USB pour modifier les variables comme les temps de palier, les températures de coupure du gaz, etc. Voilà pourquoi j’envisage de faire la même chose avec un ESP32 et un écran TFT tactile pour accéder facilement aux paramètres que l’on veut modifier.

J’ai essayé d’utiliser une sonde DS1820 pour effectuer les mesures de température, sa mise en œuvre est facile mais son défaut est qu’elle devient très instable à partir de 60° C, je suis donc revenu à la mesure avec une sonde platine PT100 qui est, de loin, la plus précise et la plus fiable.

Même si ce module est intégré dans une boite, il reste encore à l’état de prototype, je conseille fortement une version ou les connexions sont soudées pour éviter de tout retrouver en kit en cas de chute ou de transport chaotique, le mien restera tel quel en attendant le suivant ….

Tous les composants se trouvent sur un de mes sites chinois favori que tout le monde connait (pas de pub) ce qui permet de limiter le budget à moins de 100€, le plus cher étant le boitier (un peu plus de 20€).

Il y a une petite amélioration à faire, si comme moi vous êtes un peu sourd, il faut remplacer le buzzer par un plus sonore car je l’entends à peine, avis aux amateurs.

Je ne suis pas du tout doué en anglais et en programmation, que ce soit Arduino ou autre chose, mais il y a beaucoup d’aide sur Internet et la traduction des pages en ligne aide beaucoup pour les pages en anglais.

Pour la coupure du gaz, j’ai utilisé une vanne motorisée car il faut un gros diamètre de passage du gaz, étant donné qu’elle se situe après le détendeur donc à très basse pression. La vanne que j’ai utilisé n’est pas certifiée pour une utilisation avec du gaz, j’ai pris le risque de la tester, elle ne présente pas de fuite et la partie électrique est bien séparée de la partie gaz et puis une vanne certifiée gaz coute très cher, à vous de voir si vous prenez le risque ou pas. Lien de la vanne motorisée Vanne motorisée

Voici les différents liens du matériel utilisé, je vous conseille de « gratter » pour trouver moins cher ou mieux car en chine les prix varient très souvent.
Boitier
Sonde platine PT100 de bonne qualité
Module horloge temps réel
Ecran LCD 20x4
Module PT100
Module carte SD
Arduino UNO
Le buzzer à remplacer
Les boutons poussoir
Connecteurs pour sonde PT 100 et relais gaz

Pour simuler la sonde platine, je dispose d’un calibrateur Chauvin Arnoux qui ne fonctionne pas avec la carte de conditionnement utilisée et c’est bien dommage, donc j’utilise une boite à décade qui permet de créer la valeur de résistance que l’on souhaite, voici le lien de celle que j’utilise. Boite à décade

Voici le plan de raccordement

Voir la photo dans la galerie


Pour l’alimentation du module, vous avez le choix soit par un câble USB, soit par l’entrée jack 12 V, j’utilise plutôt le 12 V mais c’est une question de choix personnel.

Voici quelques photos de mon proto.


Voir la photo dans la galerie



Voir la photo dans la galerie



Voir la photo dans la galerie



Voir la photo dans la galerie



Voir la photo dans la galerie



Voir la photo dans la galerie


Le code est dans un document PDF pour ne pas encombrer la page
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
gog3
Assistant
Assistant
Messages : 801
Inscrit depuis : 11 ans 3 mois
Mon équipement : Easy 50 Polsi "upgradee"
2 RAP, pompe Novax sur variateur+ fermenteurs 75, & 50Inox, frigos equipes STC
2 futs ex Whisky (merci Bacco)
kegerateur 2 becs & kegs
Brasseur : Amateur
Localisation : vercors
A remercié : 140 fois
A été remercié : 59 fois

Re: Module de gestion d'empattage avec un Arduino

Message par gog3 »

Belle initiative ,
J'avais envisagé une telle réalisation il y a quelques années mais je n'ai jamais franchi le pas, ça m'avait semblé trop compliqué et effectivement le coût de la vanne gaz m'avait également refroidi.
Bravo et merci du partage

Edit: en regardant de plus près tu gères la montée en température entre les paliers mais pas le maintien c'est ça? Dans mon cas c'est le maintien de température durant les paliers que je voulais automatiser.... et ça, ça me semble plus compliqué. Perso je pense évoluer sur de l'electrique pour une régulation plus facile.
"Ils ne savaient pas que c’était impossible. Alors ils l'ont fait!" Mark Twain
Avatar de l’utilisateur
MementoMori
Maître Brasseur
Maître Brasseur
Messages : 3318
Inscrit depuis : 6 ans 11 mois
Mon équipement : 2 KitchenChef 28l
1 Bergland 33l
Brasseur : Amateur
A remercié : 337 fois
A été remercié : 263 fois

Re: Module de gestion d'empattage avec un Arduino

Message par MementoMori »

Sans compter l'inertie du chauffage donc bien d'enregistrer les données de température durant les coupures ;)
Je suis modérateur, je ne suis qu'un brasseur noob alors même si je m'estime (peut-être à tort) "avancé" sur certains sujets je dis aussi des conneries plus grosses que moi. N'hésitez pas à me contredire, étayez vos réponses, restez ouverts :D
Utisateur 27198 supprimé

Re: Module de gestion d'empattage avec un Arduino

Message par Utisateur 27198 supprimé »

Hello,

Je trouve que le plus difficile dans tous ces projets de thermostat et avec les thermostats du commerce, c'est de bien gérer la puissance de chauffe..

À mon humble avis, si on ne veut pas trop de fluctuations de température, il faut nécessairement passer par une régulation PID comme dans ce tuto par exemple.

Qui dit P.I.D dit aussi régulation du débit de gaz.. malheureusement, une vanne à débit variable motorisée coûte 2 bras et 1 œil :-/

Ce serait amusant de 'hacker' une vanne dans ce style ou un bouton de commande de plaque gaz avec un servomoteur et un peu d'impression 3D.

En tous cas c'est chouette de partager !

@ +
Avatar de l’utilisateur
Doumenia
Ch'ti nouveau
Messages : 5
Inscrit depuis : 9 ans 9 mois
Mon équipement : Cuve d'empattage Polsineli 75 l
Fermenteur Polsineli 75 l
Brasseur : Amateur
A été remercié : 2 fois

Re: Module de gestion d'empattage avec un Arduino

Message par Doumenia »

Bonjour, merci pour vos retours.

En ce qui me concerne, mon volume d'empattage est de 75 litres environ, ce qui fait que je n'ai pas besoin de remettre le gaz lors d'un palier car l'inertie est suffisante pour maintenir une température moyenne correcte.

Dès que possible je joindrai un enregistrement d'un empattage.

Au tout début je brassait avec une cuve Klarstein à chauffage électrique de 20 litres, j'ai eu trop de problèmes et puis je suis passé sur de plus gros volume de brassage, du coup je suis passé au gaz.

Je vais réfléchir à comment adapter mon système pour de l'électrique, je ne vous promet rien ...
Avatar de l’utilisateur
LeChatQuiLit
Ch'ti nouveau
Messages : 48
Inscrit depuis : 5 ans 9 mois
Mon équipement : 2 cuves SS Brewtech 20 gallons
fond filtrant
pompe Mini Mag type 1 (Canard Rouge)
tuyaux silicone
raccords camlock
Brew Monk Titan
Brasseur : Amateur
Localisation : Poitiers
A été remercié : 7 fois

Re: Module de gestion d'empattage avec un Arduino

Message par LeChatQuiLit »

Bonsoir,

Une débauche de matériel, de belles photos, un Arduino emprisonné dans un beau boîtier. Et le code ? On peut voir le code ? C'est ça qui est intéressant en fait. On dirait que ça coule de source (jeu de mot rigolo dans le contexte), mais en fait non, ça coule pas de source.

Vous dites ne pas vouloir rallumer la gaz automatiquement car cela est coûteux (oui, ça prend un accent circonflexe sur le U) et complexe, mais vous sacrifiez la sécurité en installant une électrovanne non certifiée pour le gaz pour justement couper l'arrivée... de gaz. Vous l'avez testée, dans votre laboratoire aux normes CE et y'a pas de problème.

Dans la mesure où vous envoyez un signal sonore pour indiquer qu'il faut remettre le "gass" comme on dit dans le sud-ouest, pourquoi ne pas faire de même pour indiquer qu'il faut le couper ? Ce serait largement plus sécurisé. Qu'en pense nos experts ici présents ?

Sinon, bravo, c'est très propre. Mes prototypes en ESP ou R-Pi le sont beaucoup moins, je fais effectivement attention aux chutes. Et si ça tombe, ben je remets la planche à pain à l'horizontal et je rebranche. Dans l'intervalle, ça a cramé...

Faites gaffe à pas exploser...
Avatar de l’utilisateur
Doumenia
Ch'ti nouveau
Messages : 5
Inscrit depuis : 9 ans 9 mois
Mon équipement : Cuve d'empattage Polsineli 75 l
Fermenteur Polsineli 75 l
Brasseur : Amateur
A été remercié : 2 fois

Re: Module de gestion d'empattage avec un Arduino

Message par Doumenia »

Bonjour, j'avais effectivement pensé ne pas couper le gaz et juste avoir un buzzer, mais précédemment je tournai avec un minuteur et le nombre de fois ou, soit j'ai pas entendu le minuteur, soit j'avais oublier de le démarrer, a fait que cela m'a fortement inciter à tester ma vanne motorisée qui, en terme de sécurité, n'est pas certifiée CE mais est suffisamment bien conçue (après démontage complet et autopsie) pour ne pas présenter de danger en utilisation gaz, j'ai fais plusieurs tests au 1000 bulles pour détecter d'éventuelles fuites (il n'est pas trop conseillé de rechercher des fuites avec une flamme :lol: ), et rien de mesurable n'est apparu.

J'utilise des bruleurs à paëlla équipés de sécurité en cas d'extinction de la flamme (ça c'est impératif pour pas tout faire péter) ce qui complique la fonction de rallumage du bruleur, donc pour éviter de finir avec une usine à gaz, c'est le cas de le dire, je me content juste de couper le gaz pour ne pas faire un palier 60 °C à 65 ou 67 °C.

Pour le code, il est dans le PDF mais vu que j'ai trouvé comment ajouter du code dans cette page, le voici en direct.

Code : Tout sélectionner

[/[code]
/********************************************************************
 Programme de mesure de Temperature avec une sonde PT100
 affichage de la Temperature et de l'heure
 surveillance de quatre paliers de temperature qui lancent quatre minuteurs differents
 coupure du gaz en debut des paliers
 acquisition des données de température en fonction du temps 
*********************************************************************/

#include <SPI.h>
#include <SD.h>
#include "LCD.h" // Afficheur LCD
#include "LiquidCrystal_I2C.h" // Afficheur LCD
#include <Adafruit_MAX31865.h>
#include "ds3231.h" // Module temps reel
#include "printInt.h" // permet de formater l'ecriture d'un nombre sur X chiffres
    
#define BUZZER_PIN 2 // Buzzer
#define BP_GAZ 3     // BP du gaz
#define RELAIS_GAZ 4 // Relais vanne gaz

#define RREF 430.0 // Valeur de la resistance de reference pour PT 100 = 430 Ohms
#define RNOMINAL 100.0 // Pour PT100

#define nomDuFichier "data.txt"   // Format 8.3 (c'est à dire 8 lettres maximum pour le nom, et optionnellement 3 pour l'extension)

Adafruit_MAX31865 thermo = Adafruit_MAX31865(6, 7, 8, 9); // Definition du brochage de la platine PT100

const byte SDCARD_CS_PIN = 10; // Broche CS de la carte SD

File file; // Fichier de sortie avec les mesures 

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); //adresse de l'afficheur 0x27

unsigned long tempsdebut = 0; // variable de temps qui défini le début du minuteur
unsigned long tempsmaintenant = 0; // variable de temps au moment de son acquisition

float mesureT1 = 0; // variable de mesure de la temperature de la voie 1
float k = -0.8; // correction de la temperature
float Tt = 20; // mesure temporaire T° pour valeur incoherente

struct ts t;
unsigned char heure = 0;
unsigned char minute = 0;
unsigned char seconde = 0;

float palier1 = 49;// valeur de temperature de coupure du gaz du premier palier
float palier2 = 57.5;// idem deuxieme palier
float palier3 = 68;// idem troisieme palier
float palier4 = 77;// idem quatrieme palier

unsigned char minuteurminute = 0;
unsigned char minuteurseconde = 0;

unsigned int temperature = 0;
unsigned int temps_palier = 0;
unsigned int temps_palier1 = 25; // valeur de temps en minutes du premier palier
unsigned int temps_palier2 = 40; // valeur de temps en minutes du deuxieme palier
unsigned int temps_palier3 = 30; // valeur de temps en minutes du troisieme palier
unsigned int temps_palier4 = 10; // valeur de temps en minutes du quatrieme palier

unsigned int Itemps = 10; // interval de temps en secondes en deux acquisitions
unsigned int tempsbase = 0; // temps de base en secondes pour les acquisitions

boolean P1 = 1; // false = 0 et true = 1
boolean P2 = 1; // flag qui permet de ne faire un palier qu'une fois au cas ou la T° redescend en dessous du seuil
boolean P3 = 1; // idem en dessus
boolean P4 = 1; // idem en dessus


byte smiley[8] = {
  B01000,
  B10100,
  B01000,
  }; // creation du caractere degre celsius


void setup()   {                
  
  // Initialisation des broches
  pinMode(BUZZER_PIN, OUTPUT); // Le buzzer est sur une sortie
  pinMode(BP_GAZ, INPUT_PULLUP); // Le BP est sur une entree avec resistance de PullUp interne
  pinMode(RELAIS_GAZ, OUTPUT); // Le relais du gaz est en sortie
  digitalWrite(RELAIS_GAZ, HIGH); // force le relais gaz a l'arret
  Serial.begin(115200);// Moniteur serie pour le debugage eventuel
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
  pinMode(10, OUTPUT); // Initialisation du port SPI sur Arduino UNO
  thermo.begin(MAX31865_4WIRE);  // Utiliser 2WIRE ou 4WIRE mais surtout pas 3WIRE !!!!!!
  DS3231_init(DS3231_CONTROL_INTCN); // Horloge temps reel

   lcd.begin(20,4);
   lcd.clear();
   lcd.createChar(0, smiley);
   lcd.setBacklightPin(3,POSITIVE);
   lcd.setBacklight(HIGH);
   tempsdebut = millis();
  
  // Initialisation de la carte SD
  Serial.println(F("Initialisation de la carte SD ... "));
  if (!SD.begin(SDCARD_CS_PIN))
  {
    Serial.println(F("Erreur : Impossible d'initialiser la carte SD"));
    Serial.println(F("Verifiez la carte SD et appuyez sur le bouton RESET"));
    lcd.setCursor(0,1); // positionne le curseur sur la deuxieme ligne 
    lcd.print("Pas de carte SD !"); // affiche le manque de carte SD à la place de l'heure marche pas
    lcd.setCursor(0,3); // positionne le curseur sur la dernere ligne 
    lcd.print("Carte puis Reset"); // demande de faire un reset BP arriere
    for (;;); // Attend appui sur bouton RESET
  
  }

  // Ouvre le fichier de sortie en écriture 
  Serial.println(F("Ouverture du fichier de sortie ... "));
  file = SD.open(nomDuFichier, FILE_WRITE);
  if (!file) {
    Serial.println(F("Erreur : Impossible d'ouvrir le fichier de sortie"));
    Serial.print(nomDuFichier);
    Serial.println(F("Verifiez la carte SD et appuyez sur le bouton RESET"));
    for (;;); // Attend appui sur bouton RESET
  }
  
  // Ajoute l'entête CSV si le fichier est vide
  if (file.size() == 0) {
    Serial.println(F("Ecriture de l'entete CSV ..."));
    file.println(F("Date; Temps; Température"));
    file.close();
    file.flush();
  }
   
  

   affiche_heure();// appel de la fonction affichage de l'heure
   affiche_paliers();// appel de la fonction affichage des temps de paliers
   mesure_temperature();// appel de la fonction de mesure de la temperature
   enregistrement(); // appel de la fonction d'acquisition de la T° et du temps et enregistrement
}

// Debut de la boucle infinie loop()
void loop() {     
  
   mesure_temperature();
   affiche_heure();
   //enregistrement();
   
   boolean gaz = digitalRead(BP_GAZ);// il faut modifier la détection du BP gaz le mettre sur une interuption !!!!!!!!!
   
   if(gaz==0)
   {
      digitalWrite(RELAIS_GAZ, HIGH);
      noTone(BUZZER_PIN); // coupe le buzzer
      lcd.setCursor(0,1);
      lcd.print("                    "); // efface le message "Allumez le gaz !"
   }

   
   if ((mesureT1 >= palier1) && P1)
   {
      P1 = 0;//met le flag du palier a zero pour ne pas le faire plusieurs fois
      temperature = 50;
      digitalWrite(RELAIS_GAZ, LOW); //coupe le gaz
      temps_palier = temps_palier1; //affectation du temps correspondant au palier 
      minuteur(temps_palier);// lancement du minuteur du palier
   }

   if ((mesureT1 >= palier2) && P2)
   {
   P2 = 0;
   temperature = 60;
   digitalWrite(RELAIS_GAZ, LOW);
   temps_palier = temps_palier2;
   minuteur(temps_palier);
   }
   
   if ((mesureT1 >= palier3) && P3)
   {
   P3 = 0;
   temperature = 70;
   digitalWrite(RELAIS_GAZ, LOW);
   temps_palier = temps_palier3;
   minuteur(temps_palier);
   }
   
   if ((mesureT1 >= palier4) && P4)
   {
   P4 = 0;
   temperature = 78;
   digitalWrite(RELAIS_GAZ, LOW);
   temps_palier = temps_palier4;
   minuteur(temps_palier);
   }
   
} // Fin de la boucle infinie loop()
//----------------------------------------------

//Fonction d'affichage de l'heure
   
   void affiche_heure()
   {
   DS3231_get(&t); // lecture de l'heure
   heure = (t.hour);
   minute = (t.min);
   seconde = (t.sec);
      
   lcd.setCursor(0,1);
   lcd.print(I(t.mday,2));
   lcd.print("/");
   lcd.print(I(t.mon,2));
   lcd.print("/");
   lcd.print(t.year);
      
   lcd.setCursor(12,0); // positionne le curseur au 12eme caractere de la premiere ligne
   lcd.print(I(heure,2)); // la fonction print(I(valeur,format)) permet d'ajouter un ou plusieurs zero devant le chiffre significatif 
   lcd.print(":");
   lcd.print(I(minute,2));
   lcd.print(":");
   lcd.print(I(seconde,2));

    if (seconde == tempsbase)
    {
    enregistrement();
    tempsbase = tempsbase + Itemps;

    if (tempsbase >= 60)
    {
      tempsbase = 0;
      
    }
    }
    }      
//-------------------------------------------
//Fonction d'affichage des parametres des paliers
   
   void affiche_paliers()
   {
      lcd.setCursor(0,2); // positionne le curseur au debut de la troisieme ligne
      //lcd.print("1:");
      lcd.print(palier1,1); lcd.write(byte(0));
      lcd.print((char)126); lcd.print(temps_palier1); lcd.print("'");
      lcd.setCursor(11,2);
      //lcd.print("2:");
      lcd.print(palier2,1); lcd.write(byte(0));
      lcd.print((char)126); lcd.print(temps_palier2); lcd.print("'");
      lcd.setCursor(0,3); // positionne le curseur au debut de la quatrieme ligne
      //lcd.print("3:");
      lcd.print(palier3,1); lcd.write(byte(0));
      lcd.print((char)126); lcd.print(temps_palier3); lcd.print("'");
      lcd.setCursor(11,3);
      //lcd.print("4:");
      lcd.print(palier4,1); lcd.write(byte(0));
      lcd.print((char)126); lcd.print(temps_palier4); lcd.print("'");
   }
 //------------------------------------------------------------
 // Fonction de mesure et d'affichage de la temperature
    
   float mesure_temperature() // permet de faire une mesure moyennee sur nb valeurs
   { 
     float moy = 0;
     int nb = 10;
     uint16_t rtd = thermo.readRTD();
     
     float Tt = thermo.temperature(RNOMINAL, RREF)+ k;//Première demande de temperature aux capteurs + correction facteur k
     
    for(float m = 1; m <= nb; m ++)
   {
       float T = thermo.temperature(RNOMINAL, RREF) + k;//Demande la temperature aux capteurs + correction facteur k
      
       moy = moy + T;
   }

     mesureT1 = moy/nb;

      // Serial.print (mesureT1);
      // Serial.println ("");
         
   lcd.setCursor(0,0);
   // on va decaler l'affichage pour que les decimales soient toujours au meme endroit
      if (mesureT1 < 100)
 { 
      lcd.print(" ");
 }
      if (mesureT1 < 10) 
 {
      lcd.print(" ");
 }
    // affichage de la temperature avec une decimale
   lcd.print ((mesureT1),1);
   lcd.write(byte(0)); //affichage du degre avant le C pour obtenir des degres Celcius
   lcd.print("C");
   //Serial.print ((mesureT1),1);
   //Serial.println ("");

   return(mesureT1); // Retourne la mesure de T°
  } 
  
//----------------------------------------------------------
// Fonction de gestion du gaz

   void allumez_gaz()
   {
    if (tempsmaintenant < 1000)
   {
       lcd.setCursor(2,1); lcd.print("Allumez le gaz !");
      }
   if (tempsmaintenant > 1000)
   {
      lcd.setBacklight(LOW);
      lcd.setCursor(2,1); lcd.print("                "); // fait clignoter la phrase "Allumez le gaz !"
   }
   }
 // -----------------------------------------------------------
 // Fonction Minuteur 
    
    void minuteur(unsigned int temps_palier)
    {
       unsigned long temps_debut = (((t.hour)*3600) + (t.min)*60) + (t.sec); // Temps de base fige
            
    while(true)
    {
       DS3231_get(&t); // lecture de l'heure
       
       unsigned long temps_maintenant = (((t.hour)*3600) + (t.min)*60) + (t.sec);
       unsigned int minuteur_minute = (temps_maintenant - temps_debut)/60;
       unsigned int minuteur_seconde = (temps_maintenant - temps_debut - (minuteur_minute * 60));
         
       lcd.setCursor(0,1);
       lcd.print("Palier ");
       lcd.print(temperature);
       lcd.write(byte(0)); //affichage du degre avant le C pour obtenir des degres Celcius
       lcd.print(" : ");
       lcd.setCursor(15,1);
       lcd.print(I(minuteur_minute,2));
       lcd.print(":");
       lcd.print(I(minuteur_seconde,2));

    
       mesure_temperature();
       affiche_heure();
             
       if (minuteur_minute >= temps_palier)
    {
        lcd.setCursor(13,1);
        lcd.print("  GAZ !");
        tone(BUZZER_PIN, 2000); // emmet un son sur le buzzer
        return;
    }
    }
    }
       
    // -----------------------------------------------------------
    // Fonction Enregistrement 
    
    void enregistrement()
    { 
       
      file = SD.open(nomDuFichier, FILE_WRITE);
      file.print(t.mday);
      file.print(F("/"));
      file.print(t.mon);
      file.print(F("/"));
      file.print(t.year);
      file.print(F(";"));
      file.print(heure);
      file.print(F(":"));
      file.print(minute);
      file.print(F(":"));
      file.print(seconde);
      file.print(F(";"));
      String temperatureArrondie = String(mesureT1,1);
      file.println(temperatureArrondie);
      Serial.println("enregistrement");
      Serial.println(temperatureArrondie);
      file.close();
      file.flush();
    } 

   
]

Il est surement perfectible, car comme je l'ai dit, je ne suis pas un pro de la programmation.
Désolé pour les fautes d'or taux graphe, j'essaie bien de les éviter mais certaines m'échappent et échappent même au correcteur :lol: :lol:

@+ Douménia