Je viens de tester le nouveau code, et tout fonctionne très bien, merci dfgh.
#include <OneWire.h> //Librairie du bus OneWire
#include <DallasTemperature.h> //Librairie du capteur
#include <LiquidCrystal_I2C.h>
const int TEMP_SUPERIEUR_16 = 16; // Limite basse temperature
const int TEMP_SUPERIEUR_24 = 24; // Limite basse temperature
const int TEMP_SUPERIEUR_27 = 27; // Limite basse temperature
const int TEMP_SUPERIEUR_30 = 30; // Limite basse temperature
const int relais1 = 4; // Pin du relais4 pour temperature entre 16 et 24°C
const int relais2 = 5; // Pin du relais5 pour temperature entre 24 et 27°C
const int relais3 = 6; // Pin du relais6 pour temperature entre 27 et 30°C
const int relais4 = 7; // Pin du relais7 pour temperature supérieure a 30°C
float temperature; // temperature en Celsius
float intensity; // Intensité
LiquidCrystal_I2C lcd(0x3F, 16, 2); //l adresse 0x27 est a changé en fonction de votre écran
OneWire oneWire(10); //Bus One Wire sur la pin 10 de l'arduino
DallasTemperature sensors(&oneWire); //Utilistion du bus Onewire pour les capteurs
DeviceAddress sensorDeviceAddress; //Vérifie la compatibilité des capteurs avec la librairie
unsigned long tempo_intermediaire = 121000; // Faire en sorte que le relais ne s'allume qu'une fois pendant la sonnerie du réveil
unsigned long deb_tempo = 0.0;
boolean flag_impulsion = false;
void setup(void)
{
pinMode(relais1, OUTPUT); //Déclaration de la broche 4 en sortie
digitalWrite(relais1, HIGH);
pinMode(relais2, OUTPUT); //Déclaration de la broche 5 en sortie
digitalWrite(relais2, HIGH);
pinMode(relais3, OUTPUT); //Déclaration de la broche 6 en sortie
digitalWrite(relais3, HIGH);
pinMode(relais4, OUTPUT); //Déclaration de la broche 7 en sortie
digitalWrite(relais4, HIGH);
Serial.begin(9600); //Permet la communication en serial
sensors.begin(); //Activation des capteurs
sensors.getAddress(sensorDeviceAddress, 0); //Demande l'adresse du capteur à l'index 0 du bus
sensors.setResolution(sensorDeviceAddress, 12); //Résolutions possibles: 9,10,11,12
lcd.init(); // initialize the lcd
lcd.backlight(); // retroeclairage lcd
}
void loop(void)
{
sensors.requestTemperatures(); //Demande la température aux capteurs
temperature = sensors.getTempCByIndex(0); // lire temperature en Celsius
lcd.setCursor(0, 0);
lcd.print("Temp eau piscine : ");
lcd.setCursor(1, 1);
lcd.setCursor(6, 1);
lcd.print(sensors.getTempCByIndex(0));
lcd.print(" C ");
int resultBinary = analogRead(A0);
float resultVolts = resultBinary / 1023.0 * 5.0;
float R = 326.0;
float intensity = resultVolts / R * 1000; // x 1000 pour avoir le résultat en mA (milliampères)!
Serial.println(intensity); // En milliampères
if ((intensity > 0.4) && (flag_impulsion == false))
{
delay(1000);
flag_impulsion = true;
}
else
{
if ((intensity > 0.4) && (flag_impulsion == true))
{
deb_tempo = millis();
}
}
if ((millis() - deb_tempo) < tempo_intermediaire)
{
activation_relais();
}
else
{
stop_relais();
}
}
void stop_relais()
{
Serial.println("Attente signal reveil");
digitalWrite(relais1, HIGH); // Relais Désactivé
digitalWrite(relais2, HIGH); // Relais Désactivé
digitalWrite(relais3, HIGH); // Relais Désactivé
digitalWrite(relais4, HIGH); // Relais Désactivé
}
void activation_relais()
{
if (temperature <= TEMP_SUPERIEUR_16) {
Serial.println("Temperature inférieure a 16°C");
Serial.println("Tous les relais sont désactivés");
digitalWrite(relais1, HIGH); // Relais Désactivé
digitalWrite(relais2, HIGH); // Relais Désactivé
digitalWrite(relais3, HIGH); // Relais Désactivé
digitalWrite(relais4, HIGH); // Relais Désactivé
} else if (temperature > TEMP_SUPERIEUR_16 && temperature <= TEMP_SUPERIEUR_24) {
Serial.println(" Temperature entre 16°C et 24°C");
Serial.println("Le relais 1 est activé");
digitalWrite(relais1, LOW);// Relais1 activé
digitalWrite(relais2, HIGH); // Relais Désactivé
digitalWrite(relais3, HIGH); // Relais Désactivé
digitalWrite(relais4, HIGH); // Relais Désactivé
}
else if (temperature > TEMP_SUPERIEUR_24 && temperature <= TEMP_SUPERIEUR_27) {
Serial.println(" Temperature entre 24°C et 27°C");
Serial.println("Le relais 2 est activé");
digitalWrite(relais1, HIGH);// Relais1 Désactivé
digitalWrite(relais2, LOW); // Relais2 Activé
digitalWrite(relais3, HIGH); // Relais3 Désactivé
digitalWrite(relais4, HIGH); // Relais4 Désactivé
}
else if (temperature > TEMP_SUPERIEUR_27 && temperature <= TEMP_SUPERIEUR_30) {
Serial.println(" Temperature entre 27°C et 30°C");
Serial.println("Le relais 3 est activé");
digitalWrite(relais1, HIGH);// Relais1 Désactivé
digitalWrite(relais2, HIGH); // Relais2 Désactivé
digitalWrite(relais3, LOW); // Relais3 activé
digitalWrite(relais4, HIGH); // Relais4 Désactivé
}
else if (temperature > TEMP_SUPERIEUR_30) {
Serial.println(" Temperature supérieure a 30°C");
Serial.println("Le relais 4 est activé");
digitalWrite(relais1, HIGH);// Relais1 Désactivé
digitalWrite(relais2, HIGH); // Relais2 Désactivé
digitalWrite(relais3, HIGH); // Relais3 Désactivé
digitalWrite(relais4, LOW); // Relais4 activé
}
else {
Serial.println("Attente signal reveil");
digitalWrite(relais1, HIGH); // Relais Désactivé
digitalWrite(relais2, HIGH); // Relais Désactivé
digitalWrite(relais3, HIGH); // Relais Désactivé
digitalWrite(relais4, HIGH); // Relais Désactivé
}
}
Revoici le code complet(juste, mes LOW et HIGH sont inversés, mais ca n'a pas d'incidence(je pense que c'est du au cablage)
Le but c'est qu'en sortie de chaque relais il soit branché une temporisation qui recoit le signal du relais :

Et ensuite par reglage manuel sur chaque temporisation de chaque canal de temperature on puisse régler la durée de fonctionnement de la pompe. C'est a dire que la pompe s'allumera tous les jours a une heure précise définie par le reveil (ici un reveil DCF77 qui se met automatiquement a l'heure) , en fontion de la temperature de l'eau de la piscine et du coup d'une durée définie.
On peut mettre en place un mode Manuel ou AUTO avec un selecteur, et la pompe tourne toute seule tous les jours en fonction de la temperature de l'eau.