16-Channel 12V Relay Module con Arduino Mega - riavvio inaspettato

Salve a tutto
ho un problema che non riesco a risolvere da parecchio tempo:
Ho un Arduino collegato al modulo 16-Channel 12V Relay Module che si resetta in continuazione
Allora questo sketch ridotto all’osso

void setup()
{
  // Set console baud rate
  Serial.begin(9600);
  Serial.println("<<<<<ON OFF VERY 60 sec<<<<<<<<<<<<<<<<<inizio setup");
 Serial.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup");
 Serial.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup");
 
//dichiarazione pin che danno 0/1 ai relay
pinMode( 41,OUTPUT ); 
digitalWrite( 41,HIGH);
 }
 
void loop()

{
  Serial.println("ON....");
  digitalWrite(41,0 );
  delay(5000);
   
 Serial.println("spengo....");
  digitalWrite(41,1 );
  delay( 5000);
  
}// fine loop

esito:

<<<<<ON OFF VERY 60 sec<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
ON....
spe⸮<<<<<ON OFF VERY 60 sec<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
ON....
spengo....
ON....
spe⸮<<<<<ON OFF VERY 60 sec<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
ON....

L’arduino mega è alimentato con un alimentatore 12 v stabilizzato 5 A , lo stesso che alimenta il modulo 12 v
Il pin 41 corrisponde al relay 1 . Sulla scheda Arduino è montata una RTC sui pin SDA e SLC , poi un sensore igrometro sulla A1 ma per il test li ho ignorati.

Allora … se eseguo HIGH e LOW sul pin 41 va in crash
Se lo faccio sul 42 che è libero allora non va in crash
è probabile che ho fatto male qualche collegamento…
Aggiungo inoltre che i pin 5v e GRD sia collegati a Arduinio che non va sempre in CRASH

Grazie a chi può aiutarmi…

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (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 il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

DOPO che avrai fatto quanto richiesto, metti il link al modulo relé che stai usando e fai uno schema esatto dei collegamenti, incluse le alimenatazioni ... così vediamo ...

Guglielmo

ora ho tolto tutti i fili che non servono: rtc, sensori…
rimane solo il moodulo 12v 16 relay attaccato e va sempre in crash

questo è lo schema semplificato

schema irri.pdf (629 KB)

Stai usando alimentazioni separate ?

... un alimentazione per Arduino (e gli eventuali sensori), un altra, TOTALMENTE separata (NON quindi lo stesso alimentatore che usi anche per alimentare Arduino), per relé e per le elettrovalvole (... basta fare un po' di ricerche qui sul forum per vedere che la soluzione è nel 90% dei casi questa) ::slight_smile:

Guglielmo

Hai mica un link alla scheda relè che usi ?

gpb01:
Stai usando alimentazioni separate ?

... un alimentazione per Arduino (e gli eventuali sensori), un altra, TOTALMENTE separata (NON quindi lo stesso alimentatore che usi anche per alimentare Arduino), per relé e per le elettrovalvole (... basta fare un po' di ricerche qui sul forum per vedere che la soluzione è nel 90% dei casi questa) ::slight_smile:

Guglielmo

l'utente nel post 1 ha detto:
"L'arduino mega è alimentato con un alimentatore 12 v stabilizzato 5 A , lo stesso che alimenta il modulo 12 v
Il pin 41 corrisponde al relay 1"
quindi direi che usa un solo alimentatore, il problema è che senza link non si capisce se la shield mette le masse in comune o meno

fabpolli:
quindi direi che usa un solo alimentatore, il problema è che senza link non si capisce se la shield mette le masse in comune o meno

Beh ... che le metta o meno ... se l'alimentatore è UNO, le masse sono sicuramente in comune :smiley:

Guglielmo

Grazie per la risposta
in effetti ho letto vari post prima di scivere.. e avevo pensato che l'alimentazione fosse la causa.
Allora ora esiste un alimentatore 12v 5 A con un modulo stabilizzato (questo

Questo alimentare alimenta con il jack l'arduino Mega e poi sdoppio e alimento il modulo 16 relay che è questo:

Ho letto che sebbene ci sia la USB attaccata della seriale , Arduino ingora l'alimetazione del PC e prende solo quella dei Jack.
Ora c'è solo un pin attaccato e ho tolto tutti i sensori dalla scheda.

Devi difatti usare, come detto, DUE alimentatori, uno DEDICATO ad Arduino e UN ALTRO al modulo relè e valvole.

Poi, se ci sarà qualche altro problema, possiamo continuare l'analisi ...

Guglielmo

ok grazie
proverò a metterne un secondo alimentatore.

oltre al pin cosa hai collegato tra Arduino e scheda relè ?
GND ....... 5V ?

Ora ho messo un nuovo alimentatore con il kack 12 v 2 A , tipo quelli dei pc portatili e l’ho messo sull’Arduino.
Ho lasciato il GND e il 5v tra il modulo relay e Arduino Mega e crescia sempre , devo togliere questi 2 fili?

void setup()
{
  // Set console baud rate
  Serial.begin(9600);
  Serial.println("<<<<<ON OFF VERY  c<<<<<<<<<<<<<<<<<inizio setup");
 Serial.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup");
 Serial.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup");
 
//dichiarazione pin che danno 0/1 ai relay
pinMode( 41,OUTPUT ); 
digitalWrite( 41,HIGH);
 }
 
void loop()

{
  Serial.println("ON....");
  digitalWrite(41,0 );
  delay(10000);
   
 Serial.println("spengo....");
  digitalWrite(41,1 );
  delay( 10000);
  
}// fine loop
<<<<<ON OFF VERY  c<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spengo....
ON....
spe⸮<<<<<ON OFF VERY  c<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
ON....
spe⸮<<<<<ON OFF VERY  c<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
ON....
spengo....
ON....
spe⸮<<<<<ON OFF VERY  c<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup
ON....

Dovresti togliere il GND e portare il pin 5V che è sul connettore lungo di controllo al +5V di Arduino, In questo modo la logica sarà invertita ... pin LOW relé eccitato, pin HIGH relé diseccitato.

Guglielmo

Dovresti togliere il GND e portare il pin 5V che è sul connettore lungo di controllo al +5V di Arduino

No, quella scheda è fatta con i piedi, il 5V generato dalla scheda alimenta anche l'ingresso dell' opto.

Quindi il collegamento corretto e' solo GND e Pin

brunello22:
No, quella scheda è fatta con i piedi, il 5V generato dalla scheda alimenta anche l'ingresso dell' opto.

Azz ... vero, ho scaricato lo schema elettrico e, questi idioti, hanno messo in comune i 5V >:( >:( >:( ... una schifezza ...

Mi sa che se vuole risolvere rapidamente fa prima a buttare quella scheda ed ha prenderne due di quelle classiche 8 relé in cui le alimentazioni NON hanno punti in comune ... ::slight_smile:

Guglielmo

Grazie! Funziona !

Allora, ho lasciato il filo 5v tra il modulo e l'arduino e PARE funzioni (GRAZIE !!!!!!!!!!!!!)
funziona sempre invertito: HIGH spegne e LOW accende (per intenderci la lucina del relay, e questo l'ho già gestito nel programma.

Devo mettere anche il GRD??

Poi ..ci vuole per forza un nuovo alimentatore ? li sono un po risicato con gli spazi .. non esiste un disaccoppiatore per usare lo stesso alimentaore?

Poi ..su gli altri componenti parcheggiati che devo aggiungere prima di fare casini chiedo:

  • 1 sensore igrometro prende i 5 v e grd da Arduino e connetto A1 per i dati. OK?

  • 1 modulo ESP 8266 ora è alimentato da un convertitore di tensione stabilizzato che riceve i 12 v sempre dall'alimentatore principale 12 V 5 A e trasforma in 3,3 v , quindi tra la ESP 8266 e questo alimentatore e collegato il 3,3 v , il GRD e il pin ESP a positivo 3,3 volt e pare che funzionava la connessione WIFI
    i serial tx e rx della ESP sono collegato sulla SERIAL1 di Arduino e niente più. SENZA alcun GRD!.
    E' giusto???

Grazie infinite

faben:
Devo mettere anche il GRD??

Se funziona lascialo così ... non è il massimo, ma visto che va ... ::slight_smile:

faben:
Poi ..ci vuole per forza un nuovo alimentatore ?

Si, per separare le alimentazioni ed evitare il ritorno di disturbi.

Guglielmo

Carissimi ho cantato vittoria troppo presto
Attaccando la RTC su SDA e SLC + 5v e - GRD ad Arduino dopo qualche decina di minuti crescia nuovamente
E’ attaccato anche il sensore igrometro sulla A0 e alimentato sempre da Arduino ma per questo test non lo considero nel programma
Ricordo che c’è solo il positivo dal modulo ad Arduino più le uscite dei pin.

Grazie come sempre

#include <Wire.h>
#include <RTClib.h>
  
int mattina=0;
int sera=1;
int pranzo=1;
int zona;
 
 
 

 
//-----rtc
// 43 rele 1 siepe
// 41 cancello
//39 rele 3 nord sinistra
//37 rele 4 fronte
//35 patio 5
//33 nord destro rel 7
// 31 nord centro rel 6
//29 piscina piccola rel8
//27 tubo piscina rel 9
//25 rele vuoto
//23 vuoto

short pinSettore1 = 41; //cancelllo
short pinSettore2 = 27; //tubo piscina
short pinSettore3 = 43  ;//siepe
short pinSettore4 = 29; //piscina piccola
short pinSettore5 = 37 ; //fronte
short pinSettore6 = 35 ; //patio
short pinSettore7 = 31; //nord centro
short pinSettore8 = 39;//nord sin
short pinSettore9 = 33;//nord dest
short pinSettore10 = 25; // servizi tubo 25
short pinSettore11 = 23; //libero
short pinSettore12 = 23; //libero
short pinSettore13 = 23; //libero
short pinSettore14 = 23; //libero
short pinSettore15 = 23; //libero
short pinSettore16 = 23; //libero
 

RTC_DS1307 RTC;

 
void setup()
{
  // Set console baud rate
  Serial.begin(9600);
  Serial.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup");
  Serial.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup");
  Serial.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup");
  
  //----rtc
  Wire.begin();
  RTC.begin();
  
  pinMode( pinSettore1, OUTPUT ); //pin2
  pinMode( pinSettore2, OUTPUT );
  pinMode( pinSettore3, OUTPUT );
  pinMode( pinSettore4, OUTPUT );
  pinMode( pinSettore5, OUTPUT );
  pinMode( pinSettore6, OUTPUT );
  pinMode( pinSettore7, OUTPUT );
  pinMode( pinSettore8, OUTPUT );
  pinMode( pinSettore9, OUTPUT );
  pinMode( pinSettore10, OUTPUT );
  pinMode( pinSettore11, OUTPUT );
  pinMode( pinSettore12, OUTPUT );
  pinMode( pinSettore13, OUTPUT );
  pinMode( pinSettore14, OUTPUT );
  pinMode( pinSettore15, OUTPUT );
  pinMode( pinSettore16, OUTPUT );
   



  all_off();
  
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
     
  }
 
   RTC.adjust(DateTime(2017, 6, 7, 12, 58, 53));
  adesso();
  delay(3000);
  //----rtc



}//fine setup


void all_off () {
  //HIGH mette tutti OFF è spento
  digitalWrite( pinSettore1, HIGH );
  digitalWrite( pinSettore2, HIGH );
  digitalWrite( pinSettore3, HIGH );
  digitalWrite( pinSettore4, HIGH );
  digitalWrite( pinSettore5, HIGH );
  digitalWrite( pinSettore6, HIGH );
  digitalWrite( pinSettore7, HIGH );
  digitalWrite( pinSettore8, HIGH );
  digitalWrite( pinSettore9, HIGH );
  digitalWrite( pinSettore10, HIGH );
  digitalWrite( pinSettore11, HIGH );
  digitalWrite( pinSettore12, HIGH );
  digitalWrite( pinSettore13, HIGH );
  digitalWrite( pinSettore14, HIGH );
  digitalWrite( pinSettore15, HIGH );
  digitalWrite( pinSettore16, HIGH );
}
 


 
void loop()
{  delay(1000);
  adesso();
     
      DateTime now = RTC.now();
      
      int _hour   = now.hour();
      int _minute = now.minute();
      int _secondi = now.second();

       
      if (pranzo == 1) 
      {
        if (_hour == 13 &&  _minute == 00 && _secondi ==00) {accendi(pinSettore1); Serial.println("Start irrigazione");}
        if (_hour == 13 &&  _minute == 10 && _secondi ==00) spegni(pinSettore1);
        if (_hour == 13 &&  _minute == 10 && _secondi ==00) {accendi(pinSettore2); Serial.println("Start settore 2");}
        if (_hour == 13 &&  _minute == 20 && _secondi ==00) spegni(pinSettore2);
        if (_hour == 13 &&  _minute == 20 && _secondi ==00) {accendi(pinSettore4); Serial.println("Start settore 4");}
        if (_hour == 13 &&  _minute == 30 && _secondi ==00) spegni(pinSettore4);
        if (_hour == 13 &&  _minute == 30 && _secondi ==00) {accendi(pinSettore5); Serial.println("Start settore 5");}
        if (_hour == 13 &&  _minute == 40 && _secondi ==00) spegni(pinSettore5);
        if (_hour == 13 &&  _minute == 40 && _secondi ==00) {accendi(pinSettore6); Serial.println("Start settore 6");}
        if (_hour == 13 &&  _minute == 50 && _secondi ==00) spegni(pinSettore6);
        if (_hour == 13 &&  _minute == 50 && _secondi ==00){accendi(pinSettore7); Serial.println("Start settore 7");}
        if (_hour == 14 &&  _minute == 00 && _secondi ==00) spegni(pinSettore7);
        if (_hour == 14 &&  _minute == 00 && _secondi ==00){accendi(pinSettore8); Serial.println("Start settore 8");}
        if (_hour == 14 &&  _minute == 10 && _secondi ==00) spegni(pinSettore8);
        if (_hour == 14 &&  _minute == 10 && _secondi ==00){accendi(pinSettore9); Serial.println("Start settore 9");}
        if (_hour == 14 &&  _minute == 20 && _secondi ==00) spegni(pinSettore9);
        if (_hour == 14 &&  _minute == 20 && _secondi ==00) {accendi(pinSettore10); Serial.println("Start settore 10");}
        if (_hour == 14 &&  _minute == 30 && _secondi ==00) {spegni(pinSettore10);   Serial.println("Stop irrigazione");}
      }
     
     


}// fine loop

void accendi(int zona)
{ digitalWrite( zona, LOW );
}
void spegni(int zona)
{ digitalWrite( zona, HIGH );
}
void adesso()
{ DateTime now = RTC.now();
  int _hour   = now.hour();
  int _minute = now.minute();
  Serial.print("ora attuale ");
  Serial.print(now.day(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.year(), DEC);
  Serial.print(' ');
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
}//adesso

log irri.txt (204 KB)

log irri.txt (204 KB)

la cosa strana che questo va bene per oltre 1/2 mezzora con l’attuale connessione non si resetta mai

void setup()
{
  // Set console baud rate
  Serial.begin(9600);
  Serial.println("<<<<<ON OFF VERY  c<<<<<<<<<<<<<<<<<inizio setup");
 Serial.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup");
 Serial.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<inizio setup");
 
//dichiarazione pin che danno 0/1 ai relay
pinMode( 41,OUTPUT ); 
digitalWrite( 41,HIGH);
 }
 
void loop()

{
  Serial.println("ON....");
  digitalWrite(41,LOW );
  delay(2000);
   
 Serial.println("spengo....");
  digitalWrite(41,HIGH );
  delay( 2000);
  
}// fine loop

/