Problema a trovare un ciclo appropriato alle mie esigenze (if, else, while..

Salve, sto progettando una serra automatizzata con arduino uno. Ho un problema relativo alla programmazione al fine di attivare il riscaldamento della serra e l umidificazione. Mi spiego meglio:
vorrei che, ad esempio, il riscaldamento si attivi ad una temperatura rilevata di 20 gradi e voglio che rimanga attivo sino a portare la temperatura a 25 gradi, in modo tale da evitare che il riscaldamento alla temperatura di 21 gradi si spenga per accendersi subito dopo con cicli troppo frequenti.
Grazie a chi vorrà aiutarmi.
Probabilmente la soluzione è facile ma io sono un neofita.

Benvenuto,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

nid69ita

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Quello che stai cercando è l’isteresi e puoi implementarla in questo modo (ma ne esistono molti, questo è quello con cui mi trovo meglio per semplicità) in pseudocodice:

if(SISTEMA_RISCALDAMENTO_ACCESO)
{
  if(TEMPERATURA >= TEMPERATURA_DESIDERATA + ISTERESI)
  {
     SISTEMA_RISCALDAMENTO_ACCESO = False
  }
  else
  {
    if(TEMPERATURA <= TEMPERATURA_DESIDERATA - ISTERESI)
    {
        SISTEMA_RISCALDAMENTO_ACCESO = True
    }
  }
}

io invece preferisco:

#define MIN 20
#define MAX 25

.
.
.
.
if (acceso)
{  
   if (temperatura>MAX)
   {
      acceso=0;
   }
}
else
{
   if (temperatura<MIN)
   {
      acceso=1;
   }
}
digitalWrite(uscita,acceso);

che esplicita meglio i limiti, invece che il campo di isteresi
come dico sempre io l’isteresi è dare la tolleranza all’europea, i limiti è dare la tolleranza all’americana
[/code]

fabpolli:
... puoi implementarla in questo modo ...

... così però non l'accendi mai :slight_smile:

Federico

Grazie ragazzi, effettivamente con l’isteresi ho risolto in parte il mio problema, in quanto avrei necessità che quando entra in azione, per esempio il riscaldamento, il loop non vada avanti, per evitare che parallelamente vengano lette altre condizioni e azionati ulteriori dispositivi, tipo umidificatori e/o ventole. Come posso racchiudere una condizione di questo tipo in un ciclo chiuso affinchè la condizione non si avveri per poi passare avanti?

Per adesso ho inserito questo spezzone di programma e funziona. Come questi ne devo inserire almento altri 3 o 4 e ognuno deve lavorare autonomamente e poi passare al seguente…

 if (t>=TempMax){
      statoTemp = LOW;
   
    }
    if (t<=TempMin){
      statoTemp = HIGH;
    }
    digitalWrite(riscaldamento, statoTemp);
    
    delay(40);
     
    if (t>=TempLimiteMax){
        TempSoglia = HIGH;
        finestraImmissione.write(82);
    }
    if (t<=TempLimiteMin) {
        TempSoglia = LOW;
        finestraImmissione.write(0);
    }
     digitalWrite(ventole, TempSoglia);

Federico66:
… così però non l’accendi mai :slight_smile:

Federico

:astonished: :smiley:

Salvorhardin:
come dico sempre io l'isteresi è dare la tolleranza all'europea, i limiti è dare la tolleranza all'americana

Europeista convinto :smiley:

Eh, se tu sapessi...

Sai la missione marziana andata a ramengo causa l'uso sconsiderato del sistema di unità di misura consuetudinario continentale?

Ecco io combatto con cose del genere tutti i giorni

Tanto per fare esempio:
Abbiamo sempre avuto moria di maschi M3 ed M4 in ditta
Settimana scorsa ho scoperto perché
Disegni su licenza americana, hanno cambiato le quote e le filettature, ma non le tolleranze

Tu non immagini la somma complessiva dei danni, ma fa almeno 4 zeri

lycos1986:
Come posso racchiudere una condizione di questo tipo in un ciclo chiuso affinchè la condizione non si avveri per poi passare avanti?

Salvorhardin:
Eh, se tu sapessi…

Una volta c’erano i progettisti, adesso molti disegnatori…