1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
| /*
teste 1 prog chauffe eau solaire
*/
// Inclure la librairie LiquidCrystal
#include <LiquidCrystal.h>
// Initialisation de la librairie Liquid Crystal
LiquidCrystal lcd(11, 10, 5, 4, 3, 2);
#include <OneWire.h> // Pour les capteurs de température
/*
** Déclaration des constantes et des paramètres
*/
#define onewireModeLecture 0xBE // Code pour initier la lecture des capteurs OneWire
#define onewireModeMesure 0x44 // Code pour déclencher la lecture des capteurs OneWire
#define onewireNb 3 // Nombre de capteurs OneWire gérés
const int pinOneWire = 9; // Broche utilisée pour lire les températures disponibles via des composant One-Wire DS18B20
//relais
const int RELAISpompe = A3;
const int RELAISvanne = A4;
// Adresses matérielles des capteurs One-Wire <== Là, il faut mettre les adresses des capteurs réellement utilisés
static byte onewireSensorSerial[onewireNb][8] = {
{ 0x28, 0xFF, 0x58, 0xB1, 0x87, 0x16, 0x03, 0x41 }, // Température à l'intérieur des panneaux solaires
{ 0x28, 0xFF, 0x78, 0x46, 0x91, 0x16, 0x04, 0x56 }, // Bas du ballon d'eau chaude
{ 0x28, 0xFF, 0x66, 0xC7, 0x90, 0x16, 0x04, 0x75 }, // REMPERATURE PISCINE
};
float tempballon = -99.9;
float tempcapteur = -99.0;
float tempretour = -99.0;
float temppiscine = -99.0;
const float temperatureMini = -40.0 ; // Température en dessous de la quelle elle n'est pas prise en compte
const unsigned long temperatureReadInterval = 10L * 1000L; // Temps entre 2 lectures de température
unsigned long pumpStartTime = 0; // Temps écoulé, en millisecondes, depuis le démarrage de la pompe de circulation
unsigned long temperatureTime = 0; // Temps écoulé, en millisecondes, depuis la dernière lecture des températures
/*
** Création des objets
*/
OneWire oneWire(pinOneWire); // On défini la broche utilisée pour OneWire
void setup() {
// Configuration de l'afficheur 16 caractères en 2 lignes
lcd.begin(16, 2);
// Ecriture de la ligne 1
lcd.setCursor(0, 0);
lcd.print("TP:");
lcd.setCursor(0, 1);
lcd.print("TB:");
lcd.setCursor(8, 1);
lcd.print("TC:");
// relais
pinMode(RELAISpompe, OUTPUT);
pinMode(RELAISvanne, OUTPUT);
// Effectue une première mesure pour alimenter les capteurs de température
for (int i = 0; i <= onewireNb; i++) {
onewireMesureTemp(onewireSensorSerial);
}
delay(2000);
for (int i = 0; i <= onewireNb; i++){
onewireMesureTemp(onewireSensorSerial);
}
delay(1000);
}
void loop() {
boolean temperatureRead = 0;
if ( (temperatureTime == 0) || ( (millis() - temperatureTime > temperatureReadInterval) && (millis() >= temperatureTime) ) ) {
temperatureTime = millis();
/// Lecture des températures
tempballon = onewireMesureTemp(onewireSensorSerial[0]);
tempcapteur = onewireMesureTemp(onewireSensorSerial[1]);
temppiscine = onewireMesureTemp(onewireSensorSerial[2]);
temperatureRead = true;
}
// positionnement du curseur en ligne 2 1ere position ( on partd e zéro)
lcd.setCursor(3, 0);
// Afficgahe de la température
lcd.print( temppiscine );
// delai de 500ms entre deux calculs
delay(500);
// positionnement du curseur en ligne 2 1ere position ( on partd e zéro)
lcd.setCursor(3, 1);
// Afficgahe de la température
lcd.print( tempballon );
// delai de 500ms entre deux calculs
delay(500);
// positionnement du curseur en ligne 2 1ere position ( on partd e zéro)
lcd.setCursor(11, 1);
// Afficgahe d ela température
lcd.print(tempcapteur);
// delai de 500ms entre deux calculs
delay(500);
if (tempballon<=25)
{
ecs();
}
else
{
piscine();
}
}
void ecs()
{
if (tempballon<=25 && tempcapteur>=tempballon)
{
digitalWrite(RELAISpompe,HIGH );
}
if (tempballon>=25|| tempcapteur<=tempballon)
{
digitalWrite(RELAISpompe, LOW);
}
}
void piscine ()
{
if (tempcapteur>=temppiscine && temppiscine <=30 && tempballon >=25 )
{
digitalWrite(RELAISpompe, HIGH);
digitalWrite(RELAISvanne, HIGH);
}
if (tempcapteur<=temppiscine || temppiscine >= 30)
{
// commande relais R1 du circulateur panneau P1:
digitalWrite(RELAISpompe, LOW);
digitalWrite(RELAISvanne, LOW);
}
}
float onewireMesureTemp(byte addr[8]) {
byte data[12]; // Tableau de 12 octets pour lecture des 9 registres de RAM et des 3 registres d'EEPROM du capteur One Wire
int tempet = 0; // variable pour resultat brute de la mesure
float tempetf = 0.0; // variable pour resultat à virgule de la mesure
oneWire.reset();
oneWire.select(addr);
oneWire.write(onewireModeMesure, 1); //
oneWire.reset();
oneWire.select(addr);
oneWire.write(onewireModeLecture); // Récupération des valeurs de la RAM du capteur
// Lire les 9 octets de la RAM (appelé Scratchpad)
for ( int i = 0; i < 9; i++) { // 9 octets de RAM stockés dans 9 octets
data = oneWire.read(); // lecture de l'octet de rang i stocké dans tableau data
}
tempetf = ((data[1] << 8) | data[0]) * 0.0625;
return (tempetf);
} |
Partager