In estrema sintesi il programma gestisce tre sensori NTC TERMISTORE 5 K e comanda due motori ed una valvola a tre vie con tre relais (ho utilizzato la scheda di Futura elettronica SHIELD ARDUINO - IN/OUT 7100-FT919K).
Ti allego il codice
Ciao
#define ana0 0 // Sonda Pannelli
#define ana1 1 // Sonda Accumulo Pannelli
#define ana2 2 // Sonda Primo serbatoio
#define ana3 3 // Sonda Secondo serbatoio
//#define ana4 4
//#define ana5 5
#define pwm9 9 // uscita PMW Pompa Solare
#define pwm10 10 // Uscita PMW Pompa Scambiatore
#define pwm11 11 // Uscita comando Valvola a tre vie
// sempre a On (220) per funzionamento a solare
// nel range di temperatura stabilito da 40 a 70
// va a Off oltre i 70 gradi per scaricare il calore
// nel radiatore esterno.
#define pwm3 3 // led sistema attivo (verde)
#define pwm5 5 // led solare acceso (blu)
#define pwm6 6 // led allarme scarico radiatore (rosso)
int releon=255; //valore corrente relè on 255
int ledon =30; //valore corrente led on 30
int ledoff =0; //valore corrente led off
//int sol_conta=0; //valore !!!!!
int sol_diff=20; //Solare Soglia differenza sonda pannelli sonda acc. e per partenza pompa solare
int sol_water_max=750; //Solare Soglia temperatura massima serbatoi acqua
int Sol_isteresi=3; //Solare Soglia Isteresi per cambiamento temperatura
// variabili di lavoro
int conta_ist=0; //Contatore Isteresi
int conta_sol=0; //calcolo differenza sonda pannelli con sonda accumulo
int conta_sc1=0; //calcolo partenza scambiatore pannelli con accumulo
int conta_sc2=0; //calcolo partenza scambiatore pannelli con accumulo
int snd_pann=0; //lettura sonda pannelli
int snd_acc=0; //lettura sonda accumulo
int snd_ser1=0; //lettura sonda serbatoio uno
int snd_ser2=0; //lettura sonda serbatoio due
boolean sol_pompa=false; //Stato pompa solare
boolean sc_pompa=false; //Stato pompa scambiatore
boolean trevie=false; //Sato valvola a tre vie
/*double Thermister(int RawADC) {
double Temp;
// See Thermistor - Wikipedia for explanation of formula
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
Temp = Temp - 273.15; // Convert Kelvin to Celcius
return Temp;
}*/
void setup(){
Serial.begin(9600);
}
void loop(){
conta_ist=conta_ist+1; //Contatore Isteresi
/double temp = Thermister(analogRead(0)); // Read sensor
Serial.print("Thermister --> ");
Serial.println(temp);/
snd_pann=analogRead(ana0); //lettura sonda pannelli
snd_acc=analogRead(ana1); //lettura sonda accumulo
snd_ser1=analogRead(ana2); //lettura sonda serbatoio uno
snd_ser2=analogRead(ana3); //lettura sonda serbatoio due
Serial.print("Isteresi --> ");
Serial.println(conta_ist);
Serial.print("sonda pannelli --> ");
Serial.println(snd_pann);
Serial.print("sonda accumulo --> ");
Serial.println(snd_acc);
Serial.print("sonda serb.uno --> ");
Serial.println(snd_ser1);
Serial.print("sonda serb.due --> ");
Serial.println(snd_ser2);
if (sol_pompa){
Serial.println("Sol pompa --> vero ");
} else {
Serial.println("Sol pompa --> falso ");
}
if (sc_pompa){
Serial.println("Sol scambio --> vero ");
} else {
Serial.println("Sol scambio --> falso ");
}
if (trevie){
Serial.println("Sol trevie --> vero ");
} else {
Serial.println("Sol trevie --> falso ");
}
Serial.print("Diff. P-a --> ");
Serial.println(conta_sol);
Serial.print("Diff. A-P --> ");
Serial.println(conta_sc1);
Serial.println(conta_sc2);
Serial.println("------------------------------");
if ( ! sol_pompa && ! sc_pompa && ! trevie ){
analogWrite(pwm3,ledon); //accendiamo le verde
analogWrite(pwm5,ledoff);
analogWrite(pwm6,ledoff); }
if (conta_ist > Sol_isteresi){
conta_ist=0; //azzeriamo il conta isteresi
conta_sol=snd_pann-snd_acc; //Differenza sonda pannelli con sonda accumulo
/* Ciclo accenzione pompa solare /
if (conta_sol > 0 && conta_sol > sol_diff)
{
if ( ! sol_pompa){
analogWrite(pwm9,releon); // accendiamo pompa solare
analogWrite(pwm3,ledoff);
analogWrite(pwm5,ledon); // accendiamo Led solare (blu)
analogWrite(pwm6,ledoff);
sol_pompa=true; }
}
else
{
if (sol_pompa){
analogWrite(pwm9,0); // spegnamo pompa solare
/ /analogWrite(pwm3,ledon); //accendiamo le verde
analogWrite(pwm5,ledoff);
analogWrite(pwm6,ledoff);/
sol_pompa=false; }
}
/ Ciclo accensione scambio con serbatoi */
conta_sc1=snd_acc-snd_ser1; //Differenza sonda pannelli con sonda accumulo
conta_sc2=snd_acc-snd_ser2; //Differenza sonda pannelli con sonda accumulo
if (conta_sc1 > 0 && conta_sc1 > sol_diff || conta_sc2 > 0 && conta_sc2 > sol_diff ){
if ( ! sc_pompa){
analogWrite(pwm10,releon);
sc_pompa=true; // accendiamo pompa scambiatore
analogWrite(pwm6,ledon); // accendiamo Led giallo
}
} else {
if (sc_pompa && ! trevie ){
analogWrite(pwm10,0);
sc_pompa=false; // spegnamo pompa scambiatore
}
}
/* Ciclo accenzione limiti di temperatura ed apertura valvola a tre vie
scambio con serbatoi */
if (snd_ser1 > sol_water_max || snd_ser2 > sol_water_max){
if ( ! trevie){
trevie=true;
sc_pompa=true;
analogWrite(pwm11,releon); // accendiamo valvola a tre vie
analogWrite(pwm10,releon); // accendiamo pompa scambiatore
analogWrite(pwm3,ledoff);
analogWrite(pwm5,ledoff);
analogWrite(pwm6,ledon); // accendiamo Led allarme rosso
}
}
else {
if (trevie){
trevie=false;
sc_pompa=false;
analogWrite(pwm11,0); // spegnamo valvola a tre vie
analogWrite(pwm10,0); // spegnamo pompa scambiatore
//analogWrite(pwm6,ledoff); // spegnamo allarme rosso
}
}
}
delay(3000);
}