Progetto controllo pannelli solari termici e caldaia

Buongiorno a tutti mi chiamo Stefano sto cercando di realizzare un progettino che penso potrebbe essere interessante per qualcuno qui sul forum si tratta di una centralina di regolazione per pannelli solari termici e caldaia con accumulo per acqua calda sanitaria a doppio serpentino.
Il progetto prevede l’utilizzo di un Arduino mega, 7 sonde temperatura un display 20X4 (in futuro “TFT” )
Il funzionamento che mi sono prefissato e il seguente:
Controllo sonde per funzione antigelo dei pannelli.
Controllo sonda mandata pannello per protezione sovratemperatura pannello.
Controllo delta T Pannelli solari, caldaia, bypass per il doppio serpentino (se il pannello no produce faccio scaldare il serpentino inferiore con la caldaia).
Comando caldaia tramite Arduino e cronotermostato (magari poi mi invento qualche altra funzione)
Mi piacerebbe che qualcuno di voi mi dia qualche dritta sullo sketch che ho scritto (magari si può migliorare/sistemare e/o aggiungere funzioni)
Avrei bisogno di aiuto per un menu dove posso regolare i vari differenziali e temperature, ho già provato varie librerie ma non sono riuscito a venirne a capo.
Vi ringrazio anticipatamente per l’aiuto allego lo sketch

mio_pannello_definitivo.ino (11.4 KB)

scusa, ma io quello che tu vuoi fare lo ho da anni, e mi sembra che sei partito male cominciamo con il controllo antigelo? cosa vuol dire? lascia stare funzioni controllo antigelo e simili, metti il paraflu nel liquido primario e dimenticati "tacconi" che ti mollano quando serve Sovratemperatura pannelli? utile sapere quando avviene, ma come interverresti? spegni il sole? per il by-pass, ottima idea, ma io metterei la caldaia sul serpentino superiore, per due motivi: 1) col metodo più costoso scaldo la quantità d'acqua minore... 2) Se ci fosse poco sole, il primo serpentino riuscirebbe comunque a pre-riscaldarmi l'acqua (altro risparmio) adesso vedo il tuo programma, poi semmai ti faccio commenti specifici sulla programmazione

Ti ringrazio per il tuo interessamento Standardoil vediamo se riesco a spiegare meglio la mia idea:
Controllo antigelo:vorrei controllare che se la temperatura esterna scende sotto un certo livello e la temperatura di mandata e/o ritorno del pannello e sotto una certa soglia faccio partire la pompa del solare per riscaldare il pannello ed evitare il congelamento dello stesso.
Hai ragione riguardo l’antigelo ma da come ho impostato l’impianto idraulico andrebbe anche nell’impianto di riscaldamento(non è che e un problema ma volevo avere anche questa funzione).
Sovratemperatura pannelli: in piena estate potrebbe capitare che l’accumulo solare arriva alla temperatura da me impostata, il pannello a questo punto non carica l’accumulo e sale di temperatura (in vari impianti che ho fatto questo accade) con la funzione sovratemperatura faccio ripartire la pompa solare(la temperatura della funzione potrebbe essere 90° o più) e faccio abbassare la temperatura del pannello.
La caldaia e collegata sul serpentino superiore, il pannello solare e collegato al serpentino inferiore, il bypass e un collegamento tra la serpentina superiore ed inferiore. In inverno se il pannello non riesce a scaldare il serpentino inferiore ho me lo porta a 30°(temperatura di comodo) la caldaia e accesa scalda il serpentino superiore e i termosifoni da serpentino superiore esce una temperatura più alta della parte bassa dell’accumulo posso scaldare con quella mi si abbasserà un po la temperatura del ritorno che va in caldaia ma ci può stare.
L’accumolo e da 200Lt scaldando solo con il serpentino superiore ho poco accumulo e due docce non riesco a farle, spero che sono riuscito a spiegare in maniera esaustiva lo stato di fatto e quello che vorrei fare

Abbastanza chiaro, non condivido l’idea di un solo fluido tra solare e caldaia, ma ci sta…
ho dato uno sguardo al codice:
una loop da “FasoTutoMi”…, serve semplificare alla grande
e una certa confusione sulle sonde,
mi spieghi sonda per sonda cosa misurano?

Per come voglio fare io deve per forza essere un solo fluido.
Sonde:
Sonda 0 Temperatura esterna la metterò sotto il pannello
Sonda 1 Mandata pannello
Sonda 2 Accumolo inferiore
Sonda 3 Mandata caldaia
Sonda 4 Accumolo superiore
Sonda 5 Uscita serpentino superiore
Sonda 6 Tubazione ritorno pannello (inserita prima di entrare nel pannello)
Per il codice hai ragione ma è il primo e sinceramente ho preso un po di qua e un po di la spero che con il tuo e il vostro aiuto riuscirò a confezionarlo al meglio e migliorarlo.
Il codice e un po come me mi piace il “Fasotutomi” entro i limiti.

OK, ho dato una “sgrassata” al tuo codice, per vedere cosa ne esce
premetto subito che non ne ho capito la logica, e mi sembra anche di capire che la caldaia sia comandata solo dal cronotermostato esterno, comunque sembri ben ferrato in materia e vado fiducioso
i commenti invece:

  1. ho separato i varii blocchi funzionali, la loop adesso è di poche righe
void loop()
{
    aggiornasensori();
    antigelo();
    cronotermo();
    gestipannello();
    riscasolare();
    riscacaldaia();
    gestibypass();
    visualizza();
}
  1. ho centralizzato sia le letture dei sensori che i calcoli delle differenze, una volta sola invece che ripetute in giro per la loop
void aggiornasensori(void)
{
    // aggiorno i sensori
    now = rtc.now(); // aggiorno l'orario
    sensors.requestTemperatures(); // Invio il comando di lettura delle temperature

    for (byte i = 0; i < NSENSORI; i++)
    {
        temp[i] = sensors.getTempCByIndex(i); // leggo tutti i sensori una sola volta
    }

    diff1 = MANDATA - INFERIORE;
    diff2 = CALDAIA - SUPERIORE;
    diff3 = SERPENTINO - MANDATA;
    // calcolato una sola volta
}
  1. ho creato un array di temperature, che leggo dai 7 sensori in un solo ciclo for,
  2. ho creato delle macro che mi permettono di “leggere” le temperature per nome e non per indice
#define NSENSORI 7 // numero di sensori da gestire
float temp[NSENSORI]; // array delle temperature, lette una volta sola per ciclo
// trucco i nomi per avere nomi mnemonici
#define ESTERNA    temp[0] // temperatura esterna
#define MANDATA    temp[1] // temperatura di mandata pannello
#define INFERIORE  temp[2] // temperatura di accumulo inferiore
#define CALDAIA    temp[3] // temperatura di mandata caldaia
#define SUPERIORE  temp[4] // temperatura di accumulo superiore
#define SERPENTINO temp[5] // temperatura di mandata caldaia
#define RITORNO    temp[6] // temperatura di ritorno pannello

per il resto, col solo trucco di usare i nomi mnemonici invece delle letture di sensori i varii pezzi di programma sono ancora i tuoi, solo che così ci si puo’ concentrare sulla sola parte che interessa volta per volta, fidando che le altre sono a posto (o le metterai a posto subito dopo)
come dicevo non sono riuscito a seguire sempre la tua logica, dove avvo dei dubbi ho commentato, vedi se è il caso di ri-pensarci o se ho sbagliato io
consiglio: se metti una if metti SEMPRE le graffe, e indenta bene, rende più leggibile il programma
molto più leggibile
comunque per essere un novellino non te la sei cavata male
metto il programma completo

termoprova.ino (14.3 KB)

Per il discorso della sovratemperatura si potrebbe anche intervenire per comandare un motore in maniera che se l'accumulo supera una certa temperatura di sicurezza chiude una serranda o tapparella e il pannello non produce calore. Potrebbe essere un idea ???

xStefanox:
Per il discorso della sovratemperatura si potrebbe anche intervenire per comandare un motore in maniera che se l’accumulo supera una certa temperatura di sicurezza chiude una serranda o tapparella e il pannello non produce calore. Potrebbe essere un idea ???

aprire un rubinetto dell’acqua calda e scaricare in fogna l’eccesso di calore?

Ti ringrazio ancora per l'aiuto e ti ringrazio ancora di più per il complimento, la strada e ancora lunga ma voglio farcela. Adesso mi guardo quello che mi hai mandato, so che tante volte la mia logica non si riesce ha seguire faccio fatica anche io. Sono ferrato sull'impianti : e il mio lavoro e ne ho fatti parecchi montando parecchie centraline ma ne vorrei fare una io secondo la mia idea e in base a quello che o visto nei vari lavori realizzati. Sulla parte di programmazione proprio no ma vediamo quello che si può fare. Perche sprecare acqua? e se vado via 15 giorni?

OK, ma non credo che ne spreceresti poi tanta, se apri solo in caso di sovraproduzione a boiler caldo, non sarà mica una cosa continua, al massimo pochi pomeriggi d'estate oppure potresti scaricare invce dell'acqua secondaria, il fluido primario, lasciando quindi il pannello vuoto, che' un pezzo di metallo non ha problemi al sole e non scalda il boiler al ritorno di condizioni normali apri il gruppo di caricamento e sei a posto comunquee l'impiantista sei tu, e sembri ben ferrato

Ho dato un occhiata il programma e uno spettacolo, vedo di rispondere hai commenti 1) r 112 La visualizzazione della temperatura ho sbagliato io avevo messo la sonda sbagliata.

2) r 154 Sul differenziale 3 hai ragione ma pensavo che andava dichiarato comunque (proverò a toglierlo e vedo come si comporta).

3) r 181 Qui arrivo da uno stato con pompa accesa il diff3 e maggiore del minimo e minore del massimo, potrebbe succedere che il diff3 torna ad essere maggiore del massimo e devo tornare indietro di un passo (penso che devo dichiararlo altrimenti non vorrei che fa qualche scherzo strano, proverò a toglierlo e vedo).

4) r 265 Non e detto il diff1 potrebbe essere di 4° quindi maggiore di diffminpann che e 3° ma la mandata si può trovare a 24° e la pompa solare non deve partire.

5) r386 Mia culpa volevo intendere se temperatura esterna e sotto la soglia e la mandata o il ritorno sono basse accende la pompa.

6) Ops dimenticata una riga.

La caldaia e solo riscaldamento per adesso e comandata solo dal cronotermostato, e da me se in estate non c'e sole poi la metterò sotto Arduino con una logica di funzionamento su richiesta dell'acqua calda sanitaria.

Inoltre vorrei inserire anche un menu per modificare le temperature ma un passo alla volta devo capire bene prima questa parte già scritta.

Grazie del complimento tieni conto che io non criticavo il funzionamento, ho solo evidenziato cose che non capivo io... l'impiantista sei tu, mi sembri bravo, io ho tentato di ri-scrivere il programma in una forma meglio gestibile poi per ogni domanda di programmazione io sono qui...

Grazie mille per adesso a presto perché sicuramente avrò sicuramente avrò bisogno ancora di aiuto.