Arduino mega e relè

Sto realizzando un progetto di un mixer video che necessita di far accendere dei led a 12V da Arduino Mega ed ho quindi inserito dei relè. Il problema è che, come noto, i relè per eccitarsi richiedono uno stato LOW e quindi quando collego il cavo usb, Arduino genera di default uno stato appunto LOW ed i relè si accendono tutti mentre io avrei bisogno che all’inizio fossero tutti spenti. Lo sketch semplificato è il seguente:

#include <MIDI.h>  // Add Midi Library



#define LED2 2
#define LED3 3
#define LED4 4
#define LED5 5




//Create an instance of the library with default name, serial port and settings
MIDI_CREATE_DEFAULT_INSTANCE();

void setup() {
  
  pinMode (LED2, OUTPUT); // Set Arduino board pin to output
  pinMode (LED3, OUTPUT); // Set Arduino board pin to output
  pinMode (LED4, OUTPUT); // Set Arduino board pin to output
  pinMode (LED5, OUTPUT); // Set Arduino board pin to output
  
  
  MIDI.begin(1); // Initialize the Midi Library on channel 1
  Serial.begin(115200);  // Hairless MIDI speed

  MIDI.setHandleNoteOn(MyHandleNoteOn); // This is important!! This command
  // tells the Midi Library which function you want to call when a NOTE ON command
  // is received. In this case it's "MyHandleNoteOn".
  MIDI.setHandleNoteOff(MyHandleNoteOff); // This command tells the Midi Library 
  // to call "MyHandleNoteOff" when a NOTE OFF command is received.
}

void loop() { // Main loop
  MIDI.read(); // Continuously check if Midi data has been received.   
}


// MyHandleNoteOn/Off are the functions that will be called by the Midi Library
// when a MIDI Note message is received.
// It will be passed bytes for Channel, Pitch, and Value

// If it is, it lights up the corresponding LED (LEDs 2 thru 53)
void MyHandleNoteOn(byte channel, byte pitch, byte velocity) {
  switch (pitch) {
    case 11:
      digitalWrite(LED2,LOW);
      break;
    case 13:
      digitalWrite(LED3,LOW);
      break;
    case 15:
      digitalWrite(LED4,LOW);
      break;
    case 17:
      digitalWrite(LED5,LOW);
      break;
   



  }
}

void MyHandleNoteOff(byte channel, byte pitch, byte velocity) {
  switch (pitch) {
    case 11:
      digitalWrite(LED2,HIGH);
      break;
    case 13:
      digitalWrite(LED3,HIGH);
      break;
    case 15:
      digitalWrite(LED4,HIGH);
      break;
    case 17:
      digitalWrite(LED5,HIGH);
      break;
   
       
  }
}

Tenete presente che per brevità ho pubblicato solo la parte relativa a quattro led mentre in realtà lo sketch completo ne prevede 53 (si tratta solo di ripetere le varie parti per tutti i led) ed è questa la ragione per cui ho bisogno che all’inizio i relè siano tutti spenti perchè Arduino non ce la fa ad alimentarli tutti insieme. Il progetto prevede che i comandi provenienti dal software di controllo ne accendano massimo quattro contemporaneamente.
Come posso fare quindi per avere all’inizio uno stato high su tutti i pin prima cioè che il software di gestione decida quali led accendere?
Grazie in anticipo.

e quindi quando collego il cavo usb, Arduino genera di default uno stato appunto LOW

Assolutamente no.
Quando resetti o accendi Arduino, i pin si impostano come ingressi ad alta impedenza, che non è nè LOW nè HIGH.

Quindi se i tuoi relè si accendono al Reset, o sono senza fotoaccoppiatore e l'ingresso è fluttuante ( senza resistenze di PullUp ( hai detto che si attivano con LOW ), oppure sono collegati in modo errato

Brunello:
Assolutamente no.
Quando resetti o accendi Arduino, i pin si impostano come ingressi ad alta impedenza, che non è nè LOW nè HIGH.

Quindi se i tuoi relè si accendono al Reset, o sono senza fotoaccoppiatore e l'ingresso è fluttuante ( senza resistenze di PullUp ( hai detto che si attivano con LOW ), oppure sono collegati in modo errato

I miei relè sono questi: https://www.amazon.it/dp/B014L10Q52/ref=pe_386201_41597321_TE_item

Ok .

E li hai alimentati con un alimentatore esterno, spero

Brunello:
Ok .

E li hai alimentati con un alimentatore esterno, spero

Per prova ne ho collegati solo 8 direttamente ad Arduino e reggono bene, è ovvio che con 53 relè ci vuole un alimentatore esterno. Il problema però non è questo. Il problema è che con lo sketch che ho postato, al reset i relè sono tutti eccitati mentre io vorrei che partissero "spenti".

Devi mettere una resistenza di pull-up tra l'ingresso di ogni relé e +5V.

SukkoPera:
Devi mettere una resistenza di pull-up tra l'ingresso di ogni relé e +5V.

da quanto la resistenza?

Va bene qualunque roba tra 1k e 50k. 10k è una scelta molto comune.

SukkoPera:
Va bene qualunque roba tra 1k e 50k. 10k è una scelta molto comune.

Ok, provo. Grazie.

SukkoPera:
Devi mettere una resistenza di pull-up tra l'ingresso di ogni relé e +5V.

Allora ho provato a mettere una resistenza da 10K sull'ingresso 5V del relè ma il problema è che all'arrivo del comando il relè non si eccita ed il led di controllo sul relè stesso si accende in modo impercettibile, è come se gli arrivasse una tensione troppo bassa (tra l'altro plausibile perchè una resistenza in serie sull'ingresso 5V provoca una caduta di tensione sul circuito). Aggiungo che il modulo è composto da otto relè ed il 5V li alimenta tutti e otto.

Ho risolto modificando lo sketch. In pratica nel void setup, dopo aver settato i pin in OUTPUT ho inserito i digitalWrite settandoli tutti allo stato HIGH. Il tutto funziona.

Grazie comunque per tutti i suggerimenti.

Il problema è che all'avvio per un breve attimo faranno uno scatto spento-acceso-spento, senza pull-up. Oltre a questo dovresti anche fare prima la digitalWrite() e poi la pinMode(), in maniera vagamente "anomala".

Comunque il resistotre di pull-up non va in serie ai 5V del relé, ma sul suo ingresso. Cioè, devi mettere una resistenza tra 5V e ingresso.

SukkoPera:
Il problema è che all'avvio per un breve attimo faranno uno scatto spento-acceso-spento, senza pull-up. Oltre a questo dovresti anche fare prima la digitalWrite() e poi la pinMode(), in maniera vagamente "anomala".

Comunque il resistotre di pull-up non va in serie ai 5V del relé, ma sul suo ingresso. Cioè, devi mettere una resistenza tra 5V e ingresso.

No scusa non ho capito bene. Il relè ha un 5V vicino agli ingressi provenienti dai pin di Arduino. Dovrei quindi mettere otto resistori tra il 5V e ciascun ingresso proveniente dai pin di Arduino?

Inoltre, giusto per capire, c'è una ragione per invertire il pinMode con la digitalWrite?

Precisamente, non era chiaro dal post #5?

SukkoPera:
Devi mettere una resistenza di pull-up tra l'ingresso di ogni relé e +5V.

Comunque, se per te è accettabile com'è ora, puoi anche lasciare così.