[Conseil] Création d'un groupe Froid

Bonjour,

Je réalise un système de refroidissement grâce à un ancien frigo, étant la première foi que je réalise un telle projet je me permet de venir vers vous afin de savoir si vous pourriez avoir un point de vue extérieur sur mon projet mais aussi pouvoir corriger les erreurs que j'ai pu faire.

Voici le projet :

Sur une carte arduino UNO ou MEGA réaliser un système permettant de régler 6 paliers de température (0°C / 5°C / 10 / 15 / 20 / 25 )=> Consigne (Cons)

Une sonde dans un liquide viens capter la valeur et l'afficher sur l'écran LCD , de plus si la température (T) est inférieur à la consigne il faut que le relais mette en route le groupe de froid et si elle est supérieur qu'elle éteigne le groupe.

Il faut bien-sur avoir la possibilité de changer la consigne à n'importe qu'elle moment ou de sortir du système.

Une led s'allume pour chaque consigne, appuyer afin de visualiser rapidement la consigne actuelle

Je vous remercie

Kilian

projet.ino (7.64 KB)

/*
Projet :
Sur une carte arduino UNO ou MEGA réaliser un systeme permettant de régler 6 paliers de température (0°C / 5°C / 10 / 15 / 20 / 25 )=> Consigne (Cons)
Une sonde dans un liquide viens capter la valeur et l'afficher sur l'écran LCD , de plus si la température (T) est inférieur à la consigne il faut que le relais mette en route le groupe de froid et si elle est supérieur qu'elle éteigne le groupe.
Il faut bien-sur avoir la posibilité de changer la consigne à n'importe qu'elle moment ou de sortir du systeme.
Une led s'allume pour chaque consigne, appuyer afin de visualiser rapidement la consigne actuelle
*/

//--------------------------------------------------------------------------------------------------------------                                                              

// Initialisation des constantes 
// Bp = bouton poussoir (1 à 6 = consigne) / BpS (bouton de sortie)
int Bp1 = 0,
    Bp2 = 0,
    Bp3 = 0,
    Bp4 = 0,
    Bp5 = 0,
    Bp6 = 0,
    BpS = 0;
// Température de consigne
int TBp1 = 1,
    TBp2 = 5,
    TBp3 = 10,
    TBp4 = 15,
    TBp5 = 20,
    TBp6 = 25;
// initialisation de la consigne à 0
int Cons = 0;
// initialisation de la température à 0
const int T = A0;
const float BT = 20.0;
// initialisation du stop à 0
int Stop = 0 ;


#include <LiquidCrystal.h>                                        // Afficheur 
const int rs = 30, en = 31, d4 = 32, d5 = 33, d6 = 34, d7 = 35;   // Afficheur 
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);                        // Afficheur 

int x = 0; // inutile juste pour test

//--------------------------------------------------------------------------------------------------------------                                                              

void setup() {
  Serial.begin(9600);

  pinMode(2,INPUT);           // BP1
  pinMode(3,INPUT);           // BP2
  pinMode(4,INPUT);           // BP3 
  pinMode(5,INPUT);           // BP4
  pinMode(6,INPUT);           // BP5
  pinMode(7,INPUT);           // BP6
  pinMode(8,INPUT);           // BPS
  
  pinMode(22,OUTPUT);         // Led1 ==> BP1
  pinMode(23,OUTPUT);         // Led2 ==> BP2
  pinMode(24,OUTPUT);         // Led3 ==> BP3
  pinMode(25,OUTPUT);         // Led4 ==> BP4
  pinMode(26,OUTPUT);         // Led5 ==> BP5
  pinMode(27,OUTPUT);         // Led6 ==> BP6

  pinMode(28,OUTPUT);         // Relais

  pinMode(A0,INPUT);          // Sonde
  

  lcd.begin(16, 2);           // Afficheur 

}

//--------------------------------------------------------------------------------------------------------------                                                              

void loop() {
  Bp1 = digitalRead(2);
  Bp2 = digitalRead(3);
  Bp3 = digitalRead(4);
  Bp4 = digitalRead(5);
  Bp5 = digitalRead(6);
  Bp6 = digitalRead(7);
  BpS = digitalRead(8);

// Tant que la consigne n'a pas eu d'info rester dans la boucle en attente d'une consigne 
// Si un BP est activer alors la consigne prend la valeur du BP associer
  while( Cons == 0 ) {
    if (Bp1 == 1){
      Cons = TBp1;
      digitalWrite(22,HIGH);
    }
    if (Bp2 == 1){
       Cons = TBp2;
       digitalWrite(23,HIGH);
    }
    if (Bp3 == 1){
       Cons = TBp3;
       digitalWrite(24,HIGH);
    }
    if (Bp4 == 1){
      Cons = TBp4;
      digitalWrite(25,HIGH);
    }
    if (Bp5 == 1){
       Cons = TBp5;
       digitalWrite(26,HIGH);
    }
    if (Bp6 == 1){
       Cons = TBp6;
       digitalWrite(27,HIGH);
    }
    
  //Serial.println(x);                                           // Juste voir qu'il reste/sort de la boucle
  //delay(1000);                                                 // Juste voir qu'il reste/sort de la boucle
  //x=x+1;                                                       // Juste voir qu'il reste/sort de la boucle
  }

//--------------------------------------------------------------------------------------------------------------                                                              
// Tant que le stop n'est pas activer rester dans la boucle de fonctionnement 
  
  while (Stop >= 1 ) {   

//Prise de valeur de la sonde de température 

    int R = analogRead(T);                                  //le passer en float ?
    //Serial.print("voltage capteur : ");
    //Serial.print(R);
    float V = (R/1024)*5;
    //Serial.print("Volts : ");
    //Serial.print(V);    
    //Serial.print("Degres : ");
    float Temp = (V-.5)*100;
    Serial.println(Temp);    

    delay(1000);

//Affichage sur l'écran LCD
    
    lcd.setCursor(0, 1);                                      //Afficheur à vérifier
    lcd.print(millis() / 1000);                               //Afficheur à vérifier
    lcd.println(Temp);                                        //Afficheur à vérifier
    
//-----------------------------
// Démarage ou  arret du groupe de froid en fonction de la consigne
    if ( Cons > Temp){
      digitalWrite(28,LOW);                                        // Eteindre le groupe de froid
    }
    else {
      digitalWrite(28,HIGH);                                       // Allumer le groupe de froid
    }
    
//-----------------------------
// Si l'un des BPs est activer alors il y aura un changement de consigne donc eteindre toutes les leds     
    if (Bp1 + Bp2 + Bp3 + Bp4 + Bp5 + Bp6 >= 1){        
      Cons = 0 ;                                                    // surprimier l'ancienne consigne
      digitalWrite(22,LOW);                                         // eteindre toutes les leds
      digitalWrite(23,LOW);                                         // eteindre toutes les leds
      digitalWrite(24,LOW);                                         // eteindre toutes les leds
      digitalWrite(25,LOW);                                         // eteindre toutes les leds
      digitalWrite(26,LOW);                                         // eteindre toutes les leds
      digitalWrite(27,LOW);                                         // eteindre toutes les leds

// Encore boucle identique afin d'effecter la new consigne
      while( Cons == 0 ) {
        if (Bp1 == 1){
          Cons = TBp1;
          digitalWrite(22,HIGH);
        }
        if (Bp2 == 1){
          Cons = TBp2;
          digitalWrite(23,HIGH);
        }
        if (Bp3 == 1){
          Cons = TBp3;
          digitalWrite(24,HIGH);
        }
        if (Bp4 == 1){
          Cons = TBp4;
          digitalWrite(25,HIGH);
        }
        if (Bp5 == 1){
          Cons = TBp5;
          digitalWrite(26,HIGH);
        }
        if (Bp6 == 1){
          Cons = TBp6;
          digitalWrite(27,HIGH);
        }

//-----------------------------
// Si BpS actif alors eteindre les + eteindre froid + supprimer la consigne 
     if (digitalRead(8) >= 1){            
      Cons = 0 ;                                                    // surprimier l'ancienne consigne
      digitalWrite(22,LOW);                                         // eteindre toutes les leds
      digitalWrite(23,LOW);                                         // eteindre toutes les leds
      digitalWrite(24,LOW);                                         // eteindre toutes les leds
      digitalWrite(25,LOW);                                         // eteindre toutes les leds
      digitalWrite(26,LOW);                                         // eteindre toutes les leds
      digitalWrite(27,LOW);                                         // eteindre toutes les leds
      digitalWrite(28,LOW);                                         // Eteindre le froid
      Stop = 1;
    }
  }
  //Serial.print(Cons);
  //delay(1000);
  }
 }
}

Vu que personne se lance j'essaye moi de le faire.
Tu verra que ils seront obligé d'intervenir pour corriger mes erreurs!!

Pourquoi ne pas afficher la temp de consigne dans le LCD au lieu des d'allumer des leds?
Au lieu de tous ces boutons tu peux utiliser que 2: un pour ++ et l'autre pour --

float V = (R/1024)*5;
cette formule te donnera toujours 0. regarde ici

float Temp = (V-.5)*100;
Tu peux m'expliquer cette formule?

Bonjour KilianO5,

Pour rendre votre code plus lisible (et partant plus évolutif), je regarderais l'utilisation :
_des constantes pour la déclaration des E/S,
_des tableaux,
_des fonctions,
_d'une machine à état

Cordialement,
bidouilleelec