Merci Quentin92S. Je me permet de te mettre la partie intéressante de mon code et de te proposer d'y insérer ta version au niveau de la "Gestion des Relais et Alarmes" pour que je comprenne comment fonctionne case qui doit être sur S4 température de la cave et S7 température du condenseur.
Bien évidemment le radiateur ne fonctionne qu'entre 11.7° et 12.0°; la clim démarre à 13° de la cave S4 jusqu'à 55°C de S7 puis redémarre quand S7 est < à 35°C.
ci joint un diagramme de fonctionnement gestion relais:
Merci de ton aide car je ne connais pas encore assez bien ARDUINO j'ai programmé longtemps en assembleur mais pas en C+ ou C++
/**************************************************************
* ----------- Gestion de la cave du POP ---------------------*
* Prise de températures dans 4 points différents pour couper *
* la climatisation en cas de surchauffe de l'évaporateur. *
* Avril 2016 *
***************************************************************/
#include <U8glib.h>
#include <Wire.h>
#include <math.h>
#include <DS1307new.h>
#include <DallasTemperature.h>
#include <OneWire.h>
U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE); // Câblage SPI
//DS3232
//////////////////////////////////////////////////
int I2C_DS3232=0xD0 >> 1;
byte DS3232control=0b00011100, DS3232status=0b11001000 ,DS3232aging ,DS3232Msb ,DS3232Lsb;
//////////////////////////////////////////////////
uint16_t startAddr = 0x0000; // Adresse de démarrage Start dans NV-RAM
uint16_t lastAddr; // Nelle addresse des stockage NV-RAM
uint16_t TimeIsSet = 0xaa55; // Prévient qu'il n'y a pas de remise à l'heure
//
/*
CI DS3232
VDD 3VCC ou 5VCC
SDA A4
SCL A5
*/
//#define Touche_PIN A0 // Entree platine Boutons
//int sensorPin = A0;
//int sensorValue = 0;
int Select;
int Heure;
int Minute;
int Seconde;
int compteur = 0;
int Jour;
int Mois;
int Annee;
int JourSem;
int valdigit;
int valdigit4;
int valdigit5;
int valdigit6;
int valdigit7;
int tempC;
int mesure;
int Etatrelaisclimatisation;
int Etatrelaischauffe;
float coefficient = (1024/55);//1024/55°C
float TempS;
float TempS4;
float TempS5;
float TempS6;
float TempS7;
/*********************
* ADRESSAGE DES PIN *
*********************/
//Data wire connecté sur pin 2 de l'Arduino
#define ONE_WIRE_BUS 2
// Relais connectés sur pin 4 et 7.
#define Relaisclimatisation 6
#define Relaischauffe 7
/*********************************************************************
* Déclaration des adresses des sondes DS18B20 pour la 1-Wire temp *
*********************************************************************/
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress sonde4 = { 0x28, 0x31, 0xC9, 0x7B, 0x07, 0x00, 0x00, 0x53 }; // cave
DeviceAddress sonde5 = { 0x28, 0xC1, 0xB8, 0x7B, 0x07, 0x00, 0x00, 0x81 }; // Grenier
DeviceAddress sonde6 = { 0x28, 0x9D, 0x3B, 0x7C, 0x07, 0x00, 0x00, 0xD1 }; // Caisson
DeviceAddress sonde7 = { 0x28, 0x62, 0x05, 0x7C, 0x07, 0x00, 0x00, 0xA1 }; // Condensseur
void setup () {
/**************************
* Déclaration des sorties*
**************************/
pinMode(Relaisclimatisation, OUTPUT);
digitalWrite(Relaisclimatisation, HIGH);//On force le relais de la climatisation au repos. (actif à ZERO).
pinMode(Relaischauffe, OUTPUT);
digitalWrite(Relaischauffe, HIGH);//On force le relais de chauffe au repos. (actif à ZERO).
}
void Affichageecran()
{
/********************************
/* OUVERTURE DU PORT SERIE COM3 *
/********************************/
// start serial port
Serial.begin(115200);
}
void printTemperature(DeviceAddress deviceAddress)
{
// set the resolution to 11 bit (good enough?)
sensors.setResolution(sonde4, 11);
sensors.setResolution(sonde5, 11);
sensors.setResolution(sonde6, 11);
sensors.setResolution(sonde7, 11);
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00)
{
Serial.print("Error getting temperature");
}
else
{
valdigit = (tempC * coefficient);
TempS = (tempC);
Serial.print(tempC,1); // n'affiche qu'un chiffre derrière la virgule
Serial.print(" C ");
//Serial.print(TempS);
}
}
void loop()
{
* Gestion des Relais et Alarmes *
***********************************/
if (valdigit4 < 414 || valdigit7 > 503)
{digitalWrite(Relaisclimatisation, HIGH );
Etatrelaisclimatisation = 0;}
// 414-->23° interdit la clim en dessous de 12.5°C. (225-->12.5°C)
// 503-->28° coupe la clim au dessus de 52°C.(935-->52°C)
else if (valdigit4 > 414 || valdigit7 < 414){
digitalWrite(Relaisclimatisation, LOW );
Etatrelaisclimatisation = 1;}
// 466-->26° retabli la clim en dessous de 48°C. (863-->48°C)
// 414-->23° autorise la clim au dessus de 12.5°C. (225-->12.5°C)
if (valdigit4 < 360){
digitalWrite(Relaischauffe, LOW) ;
Etatrelaischauffe = 1;}
// 360-->20° autorise le radiateur au dessous de 11.7°C. (210-->11.7°C)
if (valdigit4 > 395){
digitalWrite(Relaischauffe, HIGH );
Etatrelaischauffe = 0;}
// 395-->22° coupe le radiateur en dessus de 12.0°C. (216-->12.0°C)
/******************************************************************************************************************************************************************
/********************************************************
* traitements et Affichage des Températures sur COM3 *
********************************************************/
/* Serial.print("Seconde: ");
Serial.print(Seconde);
Serial.print("\n\r");
//Serial.print("compteur: ");
//Serial.print(compteur);
//Serial.print(" ");
*/
if (Seconde == 0){
sensors.requestTemperatures();
delay(100);
printTemperature(sonde4);
delay(100);
valdigit4 = valdigit;
// valdigit4 = valdigit4 - 7;//(correction T° Offset de la sonde)
TempS4 = TempS;
//TempS4 = TempS4 - 0.4;//(correction T° Offset de la sonde)
compteur = 1;
Serial.print("temperature sonde N4 est: ");
Serial.print(" ");
Serial.print(TempS4);
Serial.print(" ");
Serial.print(" valdigit4 ");
Serial.print(valdigit4);
Serial.print(" ");
Serial.print("Etat du relais de chauffe:");
Serial.print (Etatrelaischauffe);
Serial.print("\n\r");
}
if (Seconde == 15){
sensors.requestTemperatures();
delay(100);
printTemperature(sonde5);
delay(100);
valdigit5 = valdigit;
TempS5 = TempS;
compteur = 2;
Serial.print("temperature sonde N5 est: ");
Serial.print(" ");
Serial.print(TempS5);
Serial.print(" ");
//valdigit5 =(valdigit5*(-1)); //pour tester les T° négative
Serial.print(" valdigit5 ");
Serial.print(valdigit5);
Serial.print("\n\r");
}
if (Seconde == 30){
sensors.requestTemperatures();
delay(100);
printTemperature(sonde5);
delay(100);
valdigit6 = valdigit;
TempS6 = TempS;
compteur = 3;
Serial.print("temperature sonde N6 est: ");
Serial.print(" ");
Serial.print(TempS6);
Serial.print(" ");
Serial.print(" valdigit6 ");
Serial.print(valdigit6);
Serial.print("\n\r");
}
if (Seconde == 45){
sensors.requestTemperatures();
delay(100);
printTemperature(sonde5);
delay(100);
valdigit7 = valdigit;
TempS7 = TempS;
compteur = 4;
Serial.print("temperature sonde N7 est: ");
Serial.print(" ");
Serial.print(TempS7);
Serial.print(" ");
//valdigit5 =(valdigit7*(-1)); //pour tester les T° négative
Serial.print(" valdigit7 ");
Serial.print(valdigit7);
Serial.print(" ");
Serial.print("Etat du relais de la climatisation:");
Serial.print (Etatrelaisclimatisation);
Serial.print("\n\r");
}
/* tempsFin=micros(); //on récupère à nouveau le temps actuel
Serial.print((tempsFin-tempsDepart)/1000);// on affiche la différence en microsecondes
Serial.print(" MilliSeconde");
Serial.print("\n\r\n\r");*/
/***************************
* MISE A JOUR AFFICHAGE *
***************************/
u8g.firstPage();
do
Affichageecran();
while( u8g.nextPage());
}
DIAGRAMME GESTION RELAIS.pdf (30.5 KB)