Arduino Caldo o Freddo ?

Salve a tutti

E' da un po' che mi stò scervellando su di una cosa:

In un certo punto del mio Sketch mi ritrovo a dover far capire ad Arduino se deve attivare un relè per scaldare o uno per raffreddare, ho una sonda con cui leggo il valore della temperatura, ma non riesco a trovare un metodo per gestire in automatico il caldo o il freddo.

Ovviamente presi singolarmente i casi funzionano benissimo, con range temperatura max e min ma che mi frega è sempre l'inerzia termica . Mi spiego.

1) C'è caldo, quindi la temperatura tende a salire, giunto a temperatura desiderata + soglia max accendo il clima per portarmi alla temperatura desiderata - soglia minima.

2) C'è freddo, quindi la temperatura tende a scendere, giunto a temperatura desiderata - soglia min accendo il riscaldamento e lo spengo a temperatura desiderata + soglia max

ora se la mia temperatura desiderata è impostata a 20 °C con +1°C max e -1°C min, devo capire se scaldare quindi lavorare per alzare la T quando bassa o raffreddare quando la T troppo alta .

Già ma come ?

Avete consigli ?

ciao devi lavorare sui gradienti di temperatura, temperatura al tempo t e temperatura t+deltat co deltat per esempio 30min, così sai se la temperatura stà scendendo o salendo

Classico problema da teoria del controllo, ci sono corsi universitari incentrati solo su questo argomento anche da 10/12CFU. Ti sei imbattuto in un problema di non facile soluzione, soprattutto se il range di valori è cosi ristretto. Qui sul forum viene consigliato molto il sistema retroattivo PID. Si dovrebbero trovare librerie già fatte per Arduino.

Innanzitutto grazie per la risposta

Per quanto riguarda i PID li conosco bene ma il mio non è tanto una precisione sul mantenere costante una temperatura ma nel capire quando scaldare o raffreddare, i PID li ho già usati in un'altro mio progetto, nella fase di Mash della birra, dove dovevo tenere costante tramite motore passo passo collegato al rubinetto del gas la temperatura della pentola.

Per quanto riguarda il tempo è vero ciò che dici ma in 30 min sarei ben oltre quel grado !

E se tenessi conto della temperatura esterna ?

se fuori c'è caldo dentro sicuramente tenderebbe a salire la T e viceversa !

Per capire meglio riassumo io, dimmi se è corretto.

Hai 2 dispositivi On/Off da comandare.
Dispositivi:

  1. Produce calore quando acceso.
  2. Sottrae calore quando acceso.

Vuoi usare questi due dispositivi al fine di condizionare un ambiente in base al setpoint.
Sei disposto a tollerare una isteresi di +/- 1°C.

Tamb è la temperatura dell’ambiente da condizionare.
Setpoint è la temperatura richiesta a cui deve essere mantenuto l’ambiente.
Tist è l’isteresi in temperatura.

Study case [ Tamb < Setpoint ]
Tamb = 18°C
Setpoint = 20°C
Tist = 1

TemperaturaDiAccensione = Setpoint - (Tist/2) = 20 - 0.5 = 19.5
TemperaturaDiSpegnimento = Setpoint + (Tist/2) = 20 + 0.5 = 20.5

IF Tamb < TemperaturaDiAccensione
Accendi Dispositivo(1)
ELSE IF Tamb > TemperaturaDiSpegnimento
Spegni Dispositivo(1)

Study case [ Tamb > Setpoint ]
Tamb = 20.5°C
Setpoint = 20°C
Tist = 1

TemperaturaDiAccensione = Setpoint + (Tist/2) = 20 + 0.5 = 20.5
TemperaturaDiSpegnimento = Setpoint - (Tist/2) = 20 - 0.5 = 19.5

IF Tamb > TemperaturaDiAccensione
Accendi Dispositivo(2)
ELSE IF Tamb < TemperaturaDiSpegnimento
Spegni Dispositivo(2)

Come si può vedere Tist è troppo basso di valore, infatti in “Study case [ Tamb < Setpoint ]” la temperatura di spegnimento
è di 20.5 °C e in Study case [ Tamb > Setpoint ] la temperatura di accensione è anche di 20.5. In sostanza si accende il Dispositivo 1, si spegne e molto rapidamente si accende il Dispositivo 2, e via così all’infinito.

Ciao.

Già MauroTec è proprio questo che devo risolvere !

Podxnet: Già ma come ?

In tutta franchezza la domanda mi sembra abbastanza inutile, da qualche parte devi avere un sensore di temperatura, se questa risulta troppa alta accendi il sistema di raffreddamento, se è troppo bassa accendi il sistema di riscaldamento, punto e basta. Semmai il vero problema è stabilire quale sia l'inerzia termica del sistema, l'efficienza del sistema di riscaldamento/raffreddamento, per determinare quanto tempo devono stare accesi i sistemi per non sforare le soglie previste, un pid è altamente consigliato per questa tipologia di problemi, si usano anche con i sistemi ON/OFF.

astrobeed:
In tutta franchezza la domanda mi sembra abbastanza inutile, da qualche parte devi avere un sensore di temperatura, se questa risulta troppa alta accendi il sistema di raffreddamento, se è troppo bassa accendi il sistema di riscaldamento, punto e basta.
Semmai il vero problema è stabilire quale sia l’inerzia termica del sistema, l’efficienza del sistema di riscaldamento/raffreddamento, per determinare quanto tempo devono stare accesi i sistemi per non sforare le soglie previste, un pid è altamente consigliato per questa tipologia di problemi, si usano anche con i sistemi ON/OFF.

Si ma il problema è che nel momento in cui spengo per esempio il climatizzatore la Tambiente si trova alla stessa temperatura di inserimento caòldo e partirebbe un cliclo infinito tra caldo e freddo !!!

Ragazzi forse ho risolto

Tenendo conto della temperatura fuori dalla camera di fermentazione viene da se se il valore interno della temperatura tenderà a salire o scendere e di conseguenza andare poi ad utilizzare la fonte di calore o di freddo.

Se vuoi una temperatura stabile non Ti resta nient' altro che raffreddare continuamente e regolare la potenza di riscaldamento.

Ogni altra soluzione non Ti porta mai a una temperatura cosí stabile come vuoi perché Ti serve aria con una temperatura piú bassa di 19 per raffredare e una piú altra di 21 per riscaldare. Cosí avrai un oscillazione molto piú alta di +/-1°C Inoltre ci sono tempi morti perché dal accensione del climatizzatore o del riscaldamento passa del tempo finche producono calore/freddo. Il climatizzatore produce aria con una temperatora di ca 10°C piú fredda di quella del ambiente.

Ragazzi forse ho risolto

Tenendo conto della temperatura fuori dalla camera di fermentazione viene da se se il valore interno della temperatura tenderà a salire o scendere e di conseguenza andare poi ad utilizzare la fonte di calore o di freddo.

Finche non puoi regolare la potenza di raffreddamento di un impianto di raffreddamento a evaporazione a circuito chiuso (che é una cosa molto difficile) avrai sempre dei salti di temperatura.

Sputa il rospo e descrivi cosa vuoi fare? La camera di fermentazione che temperatura deve avere e quanto grande é? Puoi usare dei elementi Peltier o sono troppo piccoli?

Ciao Uwe

uwefed: Sputa il rospo e descrivi cosa vuoi fare? La camera di fermentazione che temperatura deve avere e quanto grande é? Puoi usare dei elementi Peltier o sono troppo piccoli?

Ciao Uwe

La camera di fermentazione è circa un metro cubo, per quanto riguarda il freddo ho un vecchio deumidificatore, smembrato e diviso l'evaporatore dal condensatore, la parte calda un filo riscaldante per acquari.

Non mi interessa molto la precisione anche due gradi di oscillazione vanno più che bene ma considerando la temperatura esterna so se la camera con tutto OFF tenderà a scaldare o a raffreddare !!!

Potresti provare a ricavare l’errore e sottrarlo al setpoint, in modo che anziché staccare 0.5°C sopra stacca a Setpoint - error. In genere nelle celle frigo dopo avere spento il compressore la temperatura continua a scendere, perché c’è gas in pressione nel circuito che continua ad espandersi anche con compressore spento. I controlli allora tengono conto di questo e mantengono la ventola accesa fino al riequilibri tra temperatura ambiente e evaporatore.

2 °C di isteresi in modo caldo e 2°C in modo freddo fanno 4°C di isteresi, se ti basta procedi con il setpoint fisso e le soglie fisse.

Io proverei con la logica fuzzy.

Questo controllo è molto usato negli elettrodomestici per il controllo di temperatura

https://it.m.wikipedia.org/wiki/Logica_fuzzy#Fuzzy_e_probabilit.C3.A0

C'è una libreria per arduino scritta da un brasiliano:

https://github.com/zerokol/eFLL

Spero di essere stato di aiuto.