Ciao. ho un problema con la realizzazione di un termostato web

Ciao a tutti :slight_smile: da un qualche settimana sto cercando di realizzare un termostato web con l'ESP8266, il progetto consiste nel rilevare la temperatura interna di una stanza con un DHT11 e un DS18B20 una volta letta la temperatura faccio una media per avere maggiore precisione visto che il DHT11 ha un errore di circa 1°C, poi carico i dati della temperatura e dell'umidità in un database (firebase) e tramite sito web e javascript ho realizzato un'interfaccia web che permette di interagire con il termostato e vedere le temperature in real-time.
Il problema che non riesco a risolvere è il seguente: come faccio ad evitare di attaccare e staccare continuamente la caldaia quando la temperatura misurata, è uguale o vicina a quella impostata? ho letto di termostati differenziali ma non ho ben capito il loro funzionamento. :frowning:

Grazie mille a tutti!! :slight_smile:

ciao.

Semplicemente cambi la temperatura impostata a seconda che la caldaia sia accesa o spenta.
Ad esempio la spegni con una temperatura superiore ai 20°C e la accendi con una temperatura inferiore ai 19°C.

ciao
pippo72

Forse non ho descritto bene il mio problema, io imposto la temperatura a 18 gradi e il sensore rileva 15 gradi quindi faccio partire la caldaia, quando la temperatura arriva a 18 gradi spengo la caldaia ma poi se scende a 17 la riaccende subito, e questo a lungo andare non penso faccia bene alla caldaia. Avevo letto che c'erano questi termostati differenziali dove si può settare un offset da 1 a 9 e fanno si che la caldaia non attacchi e stacchi frequentemente, ma non mi è ben chiaro il loro funzionamento e come poter implementare ciò su l'ESP8266

La devi spegnere a 19 e riaccendere a 17, realizzando quella che si chiama isteresi.

Se posti il codice forse riusciamo a dirti dove intervenire.

Ciao,
P.

Sono già anni che i costruttori di termostati, caldaie e frigoriferi si sono accordati perché 10 accensione all'ora non siano un problema per l'apparecchio

Se metti una isteresi di un grado dovresti essere a posto
Comunque posta, che vediamo

Con dieci accensioni ora si fa anche un comando simile al proporzionale

ecco il codice di prova, avevo pensato di andare a controllare la temperatura ogni mezz’ora e decidere se accendere o no la caldaia, però non mi piace molto come soluzione :confused:

 Serial.println("----------------");
  m=timeClient.getMinutes();
  Serial.print("tin: ");Serial.print(tin);Serial.print(" settemp: ");Serial.print(settemp);Serial.print(" durata: ");Serial.print(durata);Serial.print(" minuti: ");Serial.println(m);
  if(tin<=settemp && m==durata){
      Firebase.setBool("caldaia",true);
      mon=timeClient.getMinutes();
      Serial.print("minuti accensione: ");
      Serial.println(mon);
      //calcolo tra quanto tempo devo andare a controllare la temperatura
        if(mon+controltime>=60){
          durata=(mon+controltime)-60;
          Serial.print("durata: ");
          Serial.println(durata);
        }else{
          durata=mon+controltime;
          Serial.print("durata: ");
          Serial.println(durata);
          }
    }else{
      Firebase.setBool("caldaia",false);
    }
}

Come posso realizzare una isteresi via software?

Memorizzi lo stato caldaia in una variabile bool

Poi se la temperatura è minore del setpoint la accendi

Se maggiore del setpoint più lo stato caldaia la spegni

Questo ti da una isteresi di 1 grado, assumendo che la variabile bool valga 1 se on

Oppure
Ipotizzando che la caldaia sia su un output per esempio il 13 puoi fare così :
Digitalwrite(13, temperatura<(setpoint+digitalread(13)));

Scritto dal telefonino, metti a posto le maiuscole

Grazie mille!! finalmente sono riuscito a farlo funzionare come volevo :slight_smile:

Prego...

Giusto per saperlo, cosa hai usato?