gestione multipla relè

Buon giorno a tutti, come prete vedere dai mie posto questo è il mio primo dopo quello nella sezione presentazione.
Avendo iniziato solamente ora ad avvicinarmi a questo mondo vi chiedo subito se è possibile realizzare quanto segue:
-avrei la necessità di creare un sistema modulare che mi permetta di gestire coppie di luci indipendentemente. Cerco di spiegarmi, dovrei creare un sistema che riproducca il seguente ciclo
1-premo il tasto si accende la luce rossa
2-con luce rossa accesa attendo un tempo prestabilito
3-allo scadere del tempo spnego la luce rossa e accendo quella verde
4-con luce verde accesa e un solo impulso spengo la luce
4a-con luce rossa accesa e un solo impulso spengo la luce e abrtisco il ciclo

lo stato delle lampade deve mantenersi anche in caso di blackout.
Penso che non sia un grosso problema fare il ciclo, il discorso dei relè è che dovrei comandare delle luci a led a 12 o 24vdc e ho visto che esistono moduli relè a 2 e più, il mio dubbio è il seguente...esiste la possibilità di rendere modulare l'espazione dei relè? Guardano ad esempio l'arduino 1 ho visto che posso gestire fino a 6 uscite onboard ma se necessito di più uscite devo cambiare modello di arduino?
mi date qualche consiglio su fattibilità/soluzioni possibili?

Probabilmente per 6 uscite onboard ti riferisci a una relé shield in particolare (Se si metti il link) perché in realtà con arduino uno hai 13 uscite digitali e 5 analogiche che, nel rispetto dei mA erogabile in sicurezza da ogni porta e dei mA massimi erogabili dal 328 (200mA), puoi utilizzare quindi 18 relé.
Se poi hai necessità di pilotare più relé ti puoi basare su un port expander o su multiplexer che ti permettano di comandare con 3 o 4 pin fino a 16 uscite.
Chiarisci meglio il limite che hai in mente per l'espansione, magari esistono soluzioni migliori di quelle prospettate in funzione delle tue esigenze

Grazie per la rapidità della risposta!
il mio ideale sarebbe poter avere la possibilità di gestire 8 singoli pulsanti ai quali è abbinato un ciclo che gestisce 2 luci percui un totale di 16 uscite relè.
Da quello che mi sembra di capire c'è la possibilità di gestire, tramite la giusta componentistica, fino a 16 relè utilizzando solamente 4 uscite onboard dell'arduino...giusto?
Se così fosse potrei creare un sistema modulare con questo convertitore ed applicare a seconda delle necessità una scheda relè che a step di 2 mi copre tutte le mie necessità.
Se ho 1 solo pulsante gestico 2 rele
Se ho 2 solo pulsante gestico 4 rele
Se ho 3 solo pulsante gestico 6 rele
......
Se ho 8 solo pulsante gestico 16 rele

sto farneticando???

Presupponendo che ogni coppia di luci abbia bisogno di due relè e un pulsante ( sempre che con un solo impulso tu intenda sempre la pressione di detto pulsante ) servono 3 pin per ogni coppia.
Un Arduino UNO ha un totale di 20 pin a disposizione, quindi, così com'è puoi comandare massimo 6 coppie.

Poi, come già suggerito, puoi usare dei componenti esterni ( port expander ) e aumentare ingressi e uscite fino a quanto vuoi ma considera che i circuiti dovrai costruirteli tu se vuoi un sistema modulare con autoricoscimento

Si non avevo tenuto conto dei pulsanti...

... oppure, per soli 15€ di differenza, potrebbe passare ad Arduino MEGA su cui ha disponibili 54 I/O digitali :wink:

Guglielmo

.... c'è la possibilità di gestire, fino a 16 relè utilizzando solamente 4 uscite onboard

Puoi anche collegare dei componenti che usano il bus I2C, come ad esempio il MCP23017.
Ha 16 porte a disposizione e ne puoi collegare fino ad 8, per un torale di 16*8=128 porte
E usando solo due pin ( SDA e SCL ) di Arduino

gpb01:
... oppure, per soli 15€ di differenza, potrebbe passare ad Arduino MEGA su cui ha disponibili 54 I/O digitali :wink:

Guglielmo

Certo, così si semplifica il tutto

gpb01:
... oppure, per soli 15€ di differenza, potrebbe passare ad Arduino MEGA su cui ha disponibili 54 I/O digitali :wink:

Guglielmo

questa potrebbe essere una soluzione, allesigenza aggiungerei solamente le coppie di relè necessari di volta in volta!!!

Brunello:
Puoi anche collegare dei componenti che usano il bus I2C, come ad esempio il MCP23017.
Ha 16 porte a disposizione e ne puoi collegare fino ad 8, per un torale di 16*8=128 porte
E usando solo due pin ( SDA e SCL ) di Arduino

anche questa comunque è molto interessante perchè rientra nella filosofia di decentralizzare le utenze con cui ho a che fare quotidianamente!!

... si, ma attento che il bus I2C è tipicamente un "bus locale" ovvero ... max 10/20 cm. ... dopo le cose si complicano e di parecchio ... ::slight_smile:

Guglielmo

Per i pulsanti, invece, puoi collegarne anche sei (o più) ad una sola porta analogica, realizzando dei partitori di tensione.

paulus1969:
Per i pulsanti, invece, puoi collegarne anche sei (o più) ad una sola porta analogica, realizzando dei partitori di tensione.

Secondo me, proprio per poter avere il riconoscimento automatico deve usare dei pin separati.
Ad esempio il collegamento potrebbe essere questo

Con una resistenza di PullDown sul pulsante, in modo da capire se è collegato

 for ( int i = 0; i < 8; i++) {
    pinMode( pin_pulsante[i], INPUT_PULLUP ) ; // Attivo resistenza di PullUp
    if ( digitalRead(pin_pulsante[i]) == 0 )
    {
      // Pulsante presente
      pinMode( pin_pulsante[i], INPUT ) ; // Imposto come Input normale
      pinMode( relay_attivo_1[i], OUTPUT ) ; // Imposto come uscita il relay1 della coppia
      pinMode( relay_attivo_2[i], OUTPUT ) ; // Imposto come uscita il relay2 della coppia
      // etc etc
    }
  }

Brunello:
Secondo me, proprio per poter avere il riconoscimento automatico deve usare dei pin separati.
Ad esempio il collegamento potrebbe essere questo

Con una resistenza di PullDown sul pulsante, in modo da capire se è collegato

 for ( int i = 0; i < 8; i++) {

pinMode( pin_pulsante[i], INPUT_PULLUP ) ; // Attivo resistenza di PullUp
    if ( digitalRead(pin_pulsante[i]) == 0 )
    {
      // Pulsante presente
      pinMode( pin_pulsante[i], INPUT ) ; // Imposto come Input normale
      pinMode( relay_attivo_1[i], OUTPUT ) ; // Imposto come uscita il relay1 della coppia
      pinMode( relay_attivo_2[i], OUTPUT ) ; // Imposto come uscita il relay2 della coppia
      // etc etc
    }
  }

direi che questa soluzione è fine e senza impegno....come si dice qui!!!
e mi piace un sacco, grazie Brunello e ovviamente anche a tutti gli altri.
Ho appena ordinato il tutto e la prossima settimana inizierò con le prove.

Buongiorno.....
Il primo Arduino (tarocco) è andato.... :grinning:
Ho reperito un Arduino UNO tramite un conoscente che non lo utilizzava più e ci ho giocato un pochetto....tutto bene fino a ieri quando dopo l'ennesimo download mi da il seguente errore:
"avrdude: verification error, first mismatch at byte 0x0002
0x40 != 0x5d"

da quello che ho potuto vedere in giro è un sintomo comune sui modelli farlocchi.... poco male!!
Un po di cose le ho potute provare e tra un paio di giorni mi arriverà un kit originale made in italy!
Vi chiedo una cosa, quali accorgimenti occorre avere a livello di collegamenti elettrici degli I/O?
Mi spiego meglio, dalle prove che ho fatto mi è sembrato di vedere che un PIN battezzato come INPUT se lasciato con cirdìcuito aperto non ha valore ZERO, sbaglio?
Sui PIN battezzati come OUT occorre avere qualche accorgimento nel collegamento?
Avete delle guide da consigliarmi?

duebi:
... Mi spiego meglio, dalle prove che ho fatto mi è sembrato di vedere che un PIN battezzato come INPUT se lasciato con cirdìcuito aperto non ha valore ZERO, sbaglio?
Sui PIN battezzati come OUT occorre avere qualche accorgimento nel collegamento?

Ogni pin in INPUT è ad alta impedenza e quindi NON deve mai essere lasciato "flottante" perché la sua lettura darebbe un risultato indeterminato a priori e del tutto casuale. Quindi, o con l'uso di resistenze esterne (sia di pull-up che di pull-down) sia con l'uso di quelle interne (solo pull-up) è sempre necessario imporre uno stato logico fisso sia esso LOW (pull-down) o HIGH (pull-up).

Per i pin di OUTPUT ... attenzione solo a NON fare corti (collegare direttamente un pin LOW a +Vcc o un pin HIGH a GND) e rispettare i limiti imposti dal fabbricante. Ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.

Guglielmo

Grazie Gugliemo. Quindi nel caso debba comandare 8 relè, per sicurezza, dovrei stare su delle basette con relè con fotoaccoppiatori così chè l'assorbimento risulti sempre essere basso anche dovessi avere tutti i relè comandati, giusto?
Se metto delle resistenze da 1K tra i PIN battezzati come INPUT e il GND può bastare?
Devo prevedere anche una resistenza sui PIN battezzati come OUT?

duebi:
Grazie Gugliemo. Quindi nel caso debba comandare 8 relè, per sicurezza, dovrei stare su delle basette con relè con fotoaccoppiatori così chè l'assorbimento risulti sempre essere basso anche dovessi avere tutti i relè comandati, giusto?

Esatto, è la scelta migliore :slight_smile:

duebi:
Se metto delle resistenze da 1K tra i PIN battezzati come INPUT e il GND può bastare?

Anche un po' più alte, per limitare i consumi ... 4.7K o 10K vanno benone.

duebi:
Devo prevedere anche una resistenza sui PIN battezzati come OUT?

NON è obbligatoria (... parzialmemte vero, vedi capoverso successivo), ma se ci metti una resistenza da 150Ω sei sicuro che, anche in caso di gravi errori (corocircuiti) comunque proteggi il pin dato che 5V / 150Ω ≈ 33mA.

Ovviamente la resistenza va sempre messa nel caso si controllino dei "carichi" quali LED o altri circuiti in cui occorre comunque limitare la corrente che scorre.

Guglielmo

Schema consigliato per il collegamento delle schede a 8 relè optoisolata a 5V con alimentazione separata (© Brunello):


Guglielmo

Benissimo, ora ho le idee un po più chiare.
Per contenere al massimo gli spazi ho trovato una scheda relè dell DFROBOT (spero si possa dire) che si innesta esattamente sull'arduino ed è preconfigurata per utilizzare i 4 relè sui pin 2,7,8,10, siccome dovrei poter utilizzare fino a 8 relè pensavo di innestare due schede sovrapposte utilizzando dei pettini di prolunga, unica cosa devo capire se mi basta eliminare i ponticelli di preconfigurazione.
Ultima cosa, siccome vorrei utilizzare un alimentatore a 12V perchè le spie che andrò a comandare con i relè hanno quella tensione lì, pensi sia rischioso alimentare il sistema essedo quello il limite di alimentazione?

Allego anche il link della basetta relè