Termoregolazione Domestica

Primo post (spero di non fare castronerie da subito)
Ciao a tutti!
Vorrei sottoporre un quesito in merito a una possibile implementazione del mio sistema di riscaldamento casalingo.
Attualmente si compone di pavimento radiante su due livelli, comandato da due termostati (piano terra e piano primo). La parte di riscaldamento invece è composta da una vecchia caldaia, un accumulo da 800 litri, un impianto solare.
Attualmente funziona in questa maniera:
Termostato piano chiude il contatto, eccita la bobina di un relè che accende la pompa di circolazione del piano dedicato
Al calare della temperatura nell'accumulo, tramite un termostato analogico a punto fisso installato nell'accumulo fa partire la pompa di ricircolo acqua
La caldaia, al calare della temperatura nell'accumulo, tramite un altro termostato analogico a punto fisso, fa partire la caldaia
(spero sia chiaro, ma posso immaginare che ai più non risulti così)
Stanco di continui malfunzionamenti e consumi eccessivi (il termostati sull'accumulo non modulano e non hanno una gestione intelligente del sistema) vorrei provare a gestire questa situazione con Arduino.

Ho acquistato un kit (ELEGOO Advanced Starter Kit)
Ho necessità di creare un programma per "automatizzare" con arduino una sorta di termoregolazione:
Definizione variabili in gioco:

  • C = Caldaia (contatto pulito)
  • P_rc = pompa ricircolo
  • P_pt = pompa piano terra
  • P_p1 = pompa piano primo
  • T_pt = termostato piano terra (contatto pulito)
  • T_p1 = termostato piano primo(contatto pulito)
  • S_1 = Sonda boiler mediana
  • S_2 = Sonda boiler alta
  • Boil = Bollitore
  • Sol = Solare (contatto pulito)
  • Rel_1 = Contatto NA Relè pompa ricircolo
  • Rel_2 = Contatto NA Relè pompa piano terra
  • Rel_3 = Contatto NA Relè pompa piano primo

Le due variabili termostato lavorano con un contatto pulito in uscita.
Il funzionamento dovrebbe essere questo:

  1. Se T_pt ON, attiva il contatto NA di REL_1 e il contatto NA di Rel_2
  2. Se T_p1 ON, attiva il contatto NA di REL_1 e il contatto NA di Rel_3
  3. Se il valore in gradi celsius di S_1 è inferiore a 40°, chiudi il contatto di C
  4. Se il valore in gradi celsius di S_1 è superiore a 70°, apri il contatto di C
  5. Se il valore di gradi celsius di S_2 è inferiore a 30°, chiudi il contatto di C
  6. Se il valore in gradi celsius di S_2 è superiore a 60°, apri il contatto di C
  7. Se il contatto di Sol è chiuso impedisci l'attivazione di C, altrimenti non fare nulla
  8. Il controllo della temperatura di S_1 ed S_2 vorrei fosse effettuato ogni 300 secondi

Inoltre vorrei vedere su un display (mi hanno consigliato I2C 16x2 ) i seguenti dati in tempo reale:

  • Temperatura S_1
  • Temperatura S_2
  • Stato P_pt (ON o OFF)
  • Stato P_p1 (ON o OFF)
  • Stato P_rc (ON o OFF)

Le sonde S_1 e S_2 saranno DS18B20 (da una ricerca online risultano quelle che fanno al caso mio, ma non ne ho la certezza), mentre i relè Rel_1, Rel_2, Rel_3 saranno i finder 40.61.8.230.0000. In parallelo alla bobina metterò dei diodi 1N4007, per evitare ritorni

Ho scritto un po' di codice, ho chiesto anche a un AI di aiutarmi.
Ho caricato poi il programma su arduino cloud (sembra girare) e vorrei capire se ci sono migliorie o altro
Sotto il codice:


#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>

#define C 7
#define P_rc 4
#define P_pt 5
#define P_p1 6
#define T_pt_pin 8
#define T_p1_pin 9
#define S_1_pin 2
#define S_2_pin 3
#define Sol_pin 10

OneWire oneWire1(S_1_pin);
OneWire oneWire2(S_2_pin);
DallasTemperature sensors1(&oneWire1);
DallasTemperature sensors2(&oneWire2);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Indirizzo I2C del display (può variare)

unsigned long lastTempCheck = 0;
const long tempCheckInterval = 300000; // 300 secondi

void setup() {
  Serial.begin(9600);
  sensors1.begin();
  sensors2.begin();
  lcd.init();
  lcd.backlight();
  pinMode(C, OUTPUT);
  pinMode(P_rc, OUTPUT);
  pinMode(P_pt, OUTPUT);
  pinMode(P_p1, OUTPUT);
  pinMode(T_pt_pin, INPUT_PULLUP);
  pinMode(T_p1_pin, INPUT_PULLUP);
  pinMode(Sol_pin, INPUT_PULLUP);
}

void loop() {
  unsigned long currentTime = millis();

  if (currentTime - lastTempCheck >= tempCheckInterval) {
    sensors1.requestTemperatures();
    sensors2.requestTemperatures();
    lastTempCheck = currentTime;
  }

  float temp1 = sensors1.getTempCByIndex(0);
  float temp2 = sensors2.getTempCByIndex(0);

  int t_pt_state = digitalRead(T_pt_pin);
  int t_p1_state = digitalRead(T_p1_pin);
  int sol_state = digitalRead(Sol_pin);

  if (t_pt_state == LOW) { // Termostato ON
    digitalWrite(P_rc, HIGH);
    digitalWrite(P_pt, HIGH);
  } else {
    digitalWrite(P_pt, LOW);
  }

  if (t_p1_state == LOW) { // Termostato ON
    digitalWrite(P_rc, HIGH);
    digitalWrite(P_p1, HIGH);
  } else {
    digitalWrite(P_p1, LOW);
  }

  if (temp1 < 40  temp2 < 30) {
    if(sol_state == HIGH){
      digitalWrite(C, HIGH); // Caldaia ON
    }
  }

  if (temp1 > 70  temp2 > 60) {
    digitalWrite(C, LOW); // Caldaia OFF
  }

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("S1:");
  lcd.print(temp1);
  lcd.print("C S2:");
  lcd.print(temp2);
  lcd.setCursor(0, 1);
  lcd.print("Pt:");
  lcd.print(digitalRead(P_pt));
  lcd.print(" P1:");
  lcd.print(digitalRead(P_p1));
  lcd.print(" Rc:");
  lcd.print(digitalRead(P_rc));

  delay(1000);
}

Non ho acquistato nulla al momento ( solo il kit Elegoo) e vorrei capire se posso migliorare il codice in qualche maniera, o usare componenti diversi

Grazie a tutti in anticipo

Alcune sì, ci sono

Non hai nulla che spenga la pompa di ricircolo

Misuri la temperatura ogni 300 secondi
Ma le altre azioni sono continue
Gli ultimi if sono strani (e secondo me nemmeno compilano)

Invece in un senso più lato:

Descrivi meglio l'impianto, perché non ho capito lo scopo delle tre pompe

E anche la gestione del solare la vedo strana

Nemmeno io ho capito cosa serve la pompa di ricircolo

Inoltre le sonde le puoi collegare ad un solo pin, si trovano esempi

Ti direi di misurare la temperatura alla base dell'accumulo e accendere il circolatori solare se la sua temperatura è anche solo 5 gradi di più, senza soglie fisse

penso che per pompa di ricircolo intenda quella tra boiler e pannelli...che dovrebbe lavorare sul delta tra pannelli e boiler per garantire la resa nello scambio...almenoche non sia tutto diretto nel boiler.
io considererei anche una terza sonda sul boiler (posizione alta) di sicurezza...se questa supera un certo limite attiva pompa verso i panneli per sfogare l'extra calore.
sempre per sicurezza userei la sonda nei pannelli per l'antigelo...sotto una certa soglia si attiva il ricircolo per evitare il ghiaccio.
poi...va coordinata l'attivazione di caldaia e pompa solare...se va l'una non va l'altra...devi scaldare casa e non il mondo.

Intanto grazie delle risposte, ma soprattutto delle domande!

L'impianto ha due sorgenti di calore in sostanza; la caldaia e il solare. L'abitazione è suddivisa su due piani con pavimento radiante.
A d ogni piano c'è un termostato che attiva o meno una pompa dedicata al ricircolo del fluido riscaldante nel pavimento.
La pompa di ricircolo è alla base di queste due pompe, e pompa (scusate il gioco di parole) l'acqua nel "serbatoio di miscelazione" che serve le due pompe
Vi allego una foto giusto per farvi capire, le due a destra sono le pompe per circolo fluido riscaldante, mentre quella in basso a sinistra è la famosa pompa di ricircolo.

Il Sistema solare attualmente carica direttamente dentro l'accumulo direttamente. La gestione del solare in sè non mi da pensieri, dal momento che questo scalda l'acqua in automatico caldaia e pompe rimangono ferme. Mi appoggerò semplicemente ad un contatto pulito dello stesso solare per dare un inibizione.

Controllando meglio ora che ho fatto la foto, entrambe le sonde sono a circa metà bollitore, su entrambe è installato un termostato a pozzetto tipo questo:

Quello che regola la pompa di ricircolo agisce interrompendo l'alimentazione della pompa, quello che agisce sulla caldaia va a un contatto della scheda della caldaia che la attiva

Spero sia più chiaro ora il sistema impianto, sembra più un forum da idraulici così, ma spero che possa essere utile!

Grazie del suggerimento!

Una domanda mi sorge spontanea però: la soluzione che proponi apporta benefici di che tipo per il sistema? non saprei capire il vantaggio dell'una o dell'altra soluzione

Vorrei avere a disposizione più pozzetti per poter infilare sonde in più posizioni, ma l'idraulico, oltre a realizzare questo sistema, è stato morigerato nella predisposizione, e svuotare 800 litri d'acqua per mettere su un pozzetto.. vorrei evitarlo :sweat_smile:

Potrei comunque metterle a contatto con i tubi, ma falserei la lettura sicuramente di qualche grado (non che sia un problema, ma cerco di essere più preciso)

Grazie mille della risposta, ho cercato di spiegare meglio l'impianto in modo che risulti più chiara la comprensione del tutto

Il sistema solare ha già una serie di sicurezze, e una serie di vasi di espansione proprio per questo

il sistema ha proprio una sonda nella parte alta dell'accumulo che agisce in quel sistema, comunque fortunatamente non gira acqua ma glicole all'interno del solare ( con antigelo vari etc) e visti i cambiamenti del clima degli ultimi anni penso che la possibilità di congelare sia molto remota

Corretto, hai ragione, come posso inserire nel codice questo tipo di funzione?

Dalle ultime bollette sembrava che dovessi scaldare un quartiere altro che! :rofl:

Nessuno

Tu hai chiesto come migliorare il programma, non l'impianto

La mia domanda era riferita al perché unirli, per migliorare l'impianto sicuramente non lo chiederei qui
Quindi perché collegare le sonde ad un solo pin , invece che a multipli? Che benefici apporta rispetto alla soluzione che ho messo io?

un (leggero) risparmio di memoria, visto che ti basta usare una sola istanza di OneWire.

Ciao, Ale.

devi ragionare su "cosa è necessario fare" e "quando devo/posso farlo"...nel senso:

  • quando deve funzionare la pompa di ricircolo?...sempre?...o quando almeno una delle altre due pompe che servono i piani è in funzione?

  • hai una valvola termostatica/miscelatrice per piano per regolare la temperatura dell'acqua che ti circola nel pavimento...è sufficiciente a garantire la sicurezza (vanno manutenute) o se nel boiler la temperatura supera un tot meglio lasciare ferma la pompa di ricircolo e far sfogare sui pannelli fino a temp di sicurezza?

  • come detto prima...chi "vince" tra solare e caldaia...dal mio punto di vista il solare...quindi se c'è caldo da portare dentro caldaia-> stop...solare->on.

per il programma...ad ogni inizio loop si verificano gli "input" (che potrebbe essere anche lo stato di una uscita); nel mezzo fai tutti i confronti ed i raginamenti del caso; alla fine imposti le uscite.

Nel nostro impianto l'accumulo ha la serpentina in basso e l'ingresso da caldaia a metà

In questa maniera se c'è differenza (positiva) tra solare e accumulo conviene sempre accendere il circolatore solare, anche a caldaia accesa, perchè comunque riscalda "sotto" e prima della caldaia

Ma comunque la logica di funzionamento dipende dall'impianto e la devi conoscere tu

Noi possiamo aiutarti a realizzarla

Grazie per le risposte

Dalla foto si vede che la pompa di ricircolo è prima delle due pompe di mandata ai piani, quindi, si per logica deve funzionare quando almeno una delle due è in funzione. Mi sembra nel programma ci sia proprio il funzionamento quando il termostato è acceso, a prescindere che sia un piano o l'altro. Nella mia testa aveva senso che fosse lo stato del termostato a dare l'input, visto che è il rilevatore in ambiente.

No, ci sono valvole a punto fisso prima della pompa

Il solare in inverno non fornisce granché quindi è una fonte trascurabile. Ha più senso nelle stagioni di transizione, per quello l'idea è quella di estrarre dalla centrale del solare un contatto che mi segnali solo quando questo è in funzione. Avrebbe senso di più forse avere una sonda che misura la temperatura di uscita dal solare, in modo che allo scattare di una determinata temperatura inibisca la caldaia

Dovrebbe essere così anche il mio, ma mi riservo di controllare. Il fatto che la sonda del solare sia in alto è per evitare i "falsi avvi" probabilmente, proprio per evitare le stratificazioni