gestione multi step di relais con controllo su tempo e temperatura

mi sono appena avvicinato ad arduino sto iniziando a vedere come programmare questa fantastica scheda che permette una notevole molteplicità di controlli.

veniamo al dunque avrei bisogno di aiuto per controllare tre relay in maniera indipendente, in modo che due di questi si aprano e si chiudano in funzione di tempo e temperatura, ma comunque in maniera indipendente tra loro e con parametri di tempo e temperatura diversi, mentre il terzo deve aprirsi solo in funzione del tempo.

faccio un esempio:
il relay 1 si apre fintanto che ho 80°C e fintanto che il relay due è aperto
il relay 2 si apre fintanto che la temperatura è di 50° per 10minuti poi si riapre fintanto che la temperatura è di 65° per 20 minuti poi si riapre fintanto che ho 75° per 5 minuti quindi si chiude.
il relay 3 si apre fintanto che il relay 2 è aperto

questo elenco di comandi non deve farlo in loop automatico ma solo quando io lo faccio partire, terminato il ciclo si ferma fino a nuovo riavvio.

il tutto dovrebbe apparire su un display che mi indica il tempo restante al successivo step e la temperatura che sta leggendo.

vorrei usare delle sonde ntc da 10k e un display 20x4 righe.

chi mi aiuta a compilare il codice?

Al posto dei delay devi usare la funzione millis(), che ti restituisce il tempo passato dall'avvio del microcontrollore. Quindi tramite un opportuno e semplice controllo puoi gestire il relè da "temporizzare" e nel frattempo eseguire altre operazioni..

Ciao Angelo e benvenuto!

Il consiglio che do sempre a chi inizia un progetto simile al tuo è di scomporlo in tanti "task" singoli, per apprendere i vari elementi e poi unirli in uno sketch completo.

Nel tuo caso non mi è chiaro se ad es. saresti già in grado di scrivere sketch singoli che:

  • visualizzano una scritta su un display LCD
  • accendono il LED di Arduino, aspettano 10min e poi lo spengono
  • leggono la temperatura tramite NTC e la visualizzano sul display
  • accendono e spengono in sequenza dei led collegati alle porte digitali di Arduino

una volta preparati questi sketch, vedrai che unirli per realizzare quanto ti serve sarà molto semplice...

lucadentella:
Ciao Angelo e benvenuto!

Il consiglio che do sempre a chi inizia un progetto simile al tuo è di scomporlo in tanti "task" singoli, per apprendere i vari elementi e poi unirli in uno sketch completo.

Nel tuo caso non mi è chiaro se ad es. saresti già in grado di scrivere sketch singoli che:

  • visualizzano una scritta su un display LCD
  • accendono il LED di Arduino, aspettano 10min e poi lo spengono
  • leggono la temperatura tramite NTC e la visualizzano sul display
  • accendono e spengono in sequenza dei led collegati alle porte digitali di Arduino

una volta preparati questi sketch, vedrai che unirli per realizzare quanto ti serve sarà molto semplice...

grazie,

alcuni di questi comandi li so scrivere, tranne il far apparire una scritta sul display(non ci ho ancora provato), ma il fatto che mi crea problemi è che i relay siano dipendenti tra loro.

riassumo con piu' chiarezza quello che vorrei fare:

1 gestire l'apertura di di un relay in vari step di temperatura in funzione del tempo quindi in uno step di 10 minuti mantenere una data temperatura poi in uno step successivo di 20 min un'altra temperatura ecc
2 gestire l'apertura di un relay in funzione del tempo pari alla durata di tutti gli step del relay 1
3 gestire l'apertura di un relay tramite una temperatura fissa (non A STEP) ma anche qui il tempo deve essere pari alla somma di tutti gli step del relay 1

mi piacerebbe anche poter variare i tempi e le temperature degli step tramite dei semplici pulsantini esterni,ma questa è una cosa secondaria...

quindi il fatto che i tre comandi siano dipendenti tra loro mi crea problemi che non so come affrontare.

sciorty:
Al posto dei delay devi usare la funzione millis(), che ti restituisce il tempo passato dall'avvio del microcontrollore. Quindi tramite un opportuno e semplice controllo puoi gestire il relè da "temporizzare" e nel frattempo eseguire altre operazioni..

grazie della dritta ci do un'occhiata subito almeno un piccolo passo è fatto :slight_smile:

ciao

come dice sciorty guarda la millis() e capirai che gestire i relay in maniera indipendente all'interno del loop è molto semplice...
bye