Salut, je galère un peu dans la logique a employer pour mon projet...
A terme l'idée c'est de crée et de contrôler des paliers de température (résistance chauffante commandé par un relais), par exemple :
-
monter a une température de 25°C
-
Maintenir cette température 15mn
-
montre la température a 30°C
-Maintenir cette température 10mn -
fin de programme
j'ai tenté un sketch avec la fonction If mais c'est pas très concluant ... Pour les tests à la place d'un relais j'utilise des LED...
#include <Stepper.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <math.h>
#define PIN_NTC 0
int ledverte = 12; //température de consigne ok resistance mode off
int ledjaune = 2;
int ledrouge = 3; //température de consigne non atteinte
int ON = LOW;
int OFF = HIGH;
int tempsDerniereExecution;
LiquidCrystal_I2C lcd(0x27,16,2);
double Rref = 10000.0; //Résistance de référence à 25°C
double V_IN = 5.0; //Alimentation électrique
int tempsActuel;
int tempsActuel1;
int tempsActuel2;
int tempsdecycle;
int tempsdecycle2;
int tempsdecycle3;
int temperatureconsigne;
int temperatureconsigne2;
//Information de la thermistance
double A_1 = 3.354016E-3;
double B_1 = 2.569850E-4;
double C_1 = 2.620131E-6;
double D_1 = 6.383091E-8;
double SteinhartHart(double R)
{
//Division de l'équation en 4 parties. La premiere est
//uniquement A1
double equationB1 = B_1 * log(R/Rref);
double equationC1 = C_1 * pow(log(R/Rref), 2);
double equationD1 = D_1 * pow(log(R/Rref), 3);
double equation = A_1 + equationB1 + equationC1 + equationD1;
return pow(equation, -1);
}
void setup() {
Serial.begin(9600);
lcd.init();
pinMode(ledverte, OUTPUT);
pinMode(ledjaune, OUTPUT);
pinMode(ledrouge, OUTPUT);
lcd.backlight();
tempsActuel = 0;
tempsActuel1 =0;
tempsActuel2 =0;
tempsdecycle=90000;
tempsdecycle2=60000;
temperatureconsigne=25;
temperatureconsigne2=30;
tempsDerniereExecution = 0;
}
void loop() {
//Calcul de la tension sur la borne analogique
double valeurAnalog = analogRead(PIN_NTC);
double V = valeurAnalog / 1024 * V_IN;
//Calcul de la résistance de la thermistance
double Rth = (Rref * V ) / (V_IN - V);
//Calcul de la température en kelvin( Steinhart and Hart)
double kelvin = SteinhartHart(Rth);
double celsius = kelvin - 273.15; //Conversion en celsius
lcd.setCursor(0, 0);
lcd.print("T Cuve :");
lcd.setCursor(10, 0);
lcd.print(celsius);
lcd.setCursor(14, 0);
lcd.print(char(223));
lcd.print("C");
{delay (500);}
lcd.setCursor(0, 1);
lcd.print("T Palier:");
lcd.setCursor(10, 1);
lcd.print(temperatureconsigne);
lcd.print(char(223));
lcd.print("C");
{
tempsActuel = millis();
digitalWrite(ledverte, OFF); // Température consigne non ok
digitalWrite(ledjaune, OFF);
digitalWrite(ledrouge, ON);
if (celsius>=temperatureconsigne)
{
tempsActuel1 = millis();
digitalWrite(ledverte, ON); // Température consigne OK
digitalWrite(ledjaune, OFF);
digitalWrite(ledrouge, OFF);
if (tempsActuel1>=tempsdecycle)
{
digitalWrite(ledverte, OFF); // Température consigne non OK
digitalWrite(ledjaune, ON);
digitalWrite(ledrouge, ON);
if (celsius>temperatureconsigne2)
{
tempsActuel2=millis();
digitalWrite(ledverte, ON); // Température consigne OK
digitalWrite(ledjaune, ON);
digitalWrite(ledrouge, OFF);
if (tempsActuel2>=tempsdecycle2)
{
digitalWrite(ledverte, OFF); // Température consigne OK
digitalWrite(ledjaune, ON);
digitalWrite(ledrouge, OFF);
}
}
}
}
}
}