/*
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?