Bonjour je suis nouveau sur le forum.

je suis sur un projet de chauffe eau solaire / chauffage piscine
je n arrive pas a avoir un code qui fonctionne correctement.
étant novice en programmation je me tourne vers vous pour un petit coup de pouce.

Description du projet(installation réalise)


2 capteurs solaire
3 sondes 18b20
un circulateur
une vanne 3 voie

mon bute et de mettre le chauffe eau en priorité et ensuite de basculer sur la piscine.

je vous mais une ebauche que j ai réalise mais cela ne fonctionne pas correctement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
}

merci a vous