Timeout Blynk problemi di sconnessione

Ciao,
apro questo topic per capire se qualcuno ha avuto il mio stesso problema e come l'ha risolto.
Ho realizzato uno sketch che a seconda della temperatura misurata da una sonda DHT accede o meno una termoresistenza a 12V. Per evitare continui accendi e spegni ho messo alla fine del delle istruzioni un delay di 5minunti...
Purtroppo un delay così alto fa andare in timeout (mi sembra che sia 30sec) la connessione con il server di blynk e la connessione non si ripristina più...
Per ovviare al problema ho provato a mettere il Blynk.begin nel loop in modo da forzare nuovamente la connessione ma questo crea un problema. Se per qualche motivo il WIFI si sconnette ( ho simulato un possibile spegnimento del router) il loop si ferma sul Blynk.begin non andando più ad eseguire le istruzione di lettura della temperatura e di conseguenza l'accensione o meno della termoresistenza..

Qualcuno ha qualche idea da darmi per risolvere questa cosa che ovviamente non sia mettere un delay < di 30sec :slight_smile: ?

Veramente, in quei casi, si crea un ciclo di isteresi ... ad esempio, fissi una temperatura inferiore in cui il riscaldatore attacca ed una superiore a cui stacca ... in questo modo, alla temperatura più bassa il riscaldatore si accenderà e arrivato a quella più alta si spegnerà e rimarrà spento fino a quando non raggiungerà di nuovo la più bassa.

Puoi sceglere un ∆T come trovi meglio ... ad esempio 1.5° sotto la temperatura voluta per accendere e 1.5° sopra per spegnere.

Guglielmo

Del tipo
If t<T && t>T-∆T accendi else Spegni?

No

Del tipo

If t< T-deltaT accendi

If t> T+deltaT spegni

Accettando una fluttuazione di 2 volte deltaT

Cambiare i calcoli per fluttuazioni differenti

Quindi questo non va bene...

if (temp < 22)
    {
      digitalWrite (HOT1, LOW);
      Serial.print ("Termoresistenza Accesa PIN");
        }
    else
    {
      digitalWrite (HOT1, HIGH);
      Serial.println ("Termoresistenza spenta");
    }

ma non capisco come modificarlo...
forse così considerando un delta di 1 grado?

if (temp < 22 )
    {
      digitalWrite (HOT1, LOW);
      Serial.print ("Termoresistenza Accesa");
        }
    else If (temp<24)
    {
      digitalWrite (HOT1, LOW);
      Serial.print ("Termoresistenza Accesa");
  }

else
{
      digitalWrite (HOT1, HIGH);
      Serial.println ("Termoresistenza spenta");
  }

Devi fare le DUE IF come ti ha indicato Standardoil !

Guglielmo

Supponendo che T=23 e il delta 1 ho provato amettere in diagramma di flusso cosa deve fare...ma non sono convinto che sia corretto...

Io non capisco ...
... cosa c'è di difficile in:

...
if (t < T - dT) {
// accendi
}
else if (t > T + dT) {
// spegni
}
...

Guglielmo

Ok ma se la temperatura assume il valore T cosa succede?

... e come ci arriva al valore T?

Guglielmo

Per esempio se quando l'accedo la temperatura è proprio T... però se nel setup dico che lui parte da spento... in questo caso se la temperatura sale da sola resterà spento se invece scende arrivata a T-dT si accede e poi si spegnerà a T+dT

Ti sei risposto da solo ... difatti l'unica cosa da fare è comunque prevedere una fase di inizializzazione nel setup() che, in prima battuta, inizi con il riscaldatore spento, il resto va da se.

Guglielmo

Anchesi "else" non serve...

Eviti un IF se la t < T - dT   :grin:

Guglielmo


Risparmi il tempo di un if
Ma secondo me il programma ne perde in leggibilità

Non so, io cerco sempre di ottimizzare, ma magari, per chi inizia, può effettivamente essere un po' più difficile da seguire ... :roll_eyes:

Guglielmo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.