arduino alimentazione board rele'

Ciao a tutti,
ho arduino ethernet, una board con 4 rele’ e un sensore dht11 (in futuro aggiungero un ricevitore rf 433Mhz). ho fatto uno sketch (webserver, in una sezione comanda i 4 rele, in una seconda mostra la temperatura e l’ umidita), l’ ho implementato in tre step. Il mio problema è il seguente:
mi è stato suggerito, visto che i 4 rele assorbono parecchia corrente di alimentarli separatamente.
a questo punto ho reciclato un caricabatteria di un cellulare (5v, 890mA), l’ ho collegato alla board (led verde si accende), ho collegato i 4 connettori ai pin, ma i rele non si aprono o chiudono…faccio presente che i comandi al webserver arrivano, che il webserver “sente” che il pin passa da low ad high. Se collego la board direttamente ad arduino il tutto funziona correttamente naturalmente ho dovuto scollegare il dht11 e usare i pin di alimentazione per la board.
di seguito lo sketch

#include <SPI.h>
#include <Ethernet.h>
#include <DHT11.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 6);

EthernetServer server(80);
DHT11 dht11(6);

void setup()
{
  Serial.begin(9600);    
  Ethernet.begin(mac, ip);
  server.begin();
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
} 

void loop()
{
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0)
  {
    Serial.print(temp);
    Serial.print(humi);
  }
  EthernetClient client = server.available();
  if (client) {
    boolean currentLineIsBlank = true;
    String buffer = "";  
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);   
        buffer+=c;       
       if (c == '\n' && currentLineIsBlank) {          
          client.println(F("<HTML><HEAD><TITLE>Jarvis</TITLE></HEAD><BODY><center>"));
          client.println(F("
"));
          client.println(F("
"));
          client.println(F("<table width=450 border=8 bordercolordark=#A9A9A9 bordercolorlight=#D3D3D3 >"));
          client.println(F("<tr><td colspan=4><font face=Georgia size=5><center><strong>Comandi</font></td></tr>"));
	  client.println(F("<tr><td height=75 width=75><img src=\"http://digilander.libero.it/sire2p/video.jpg\"></td>"));
          if (digitalRead(2)== true) 
             {client.println(F("<td height=75 width=150><font face=verdana size=4>Webcam Off</td>"));}  
          else 
             {client.println(F("<td height=75 width=150><font face=verdana size=4>Webcam  On</td>"));}
          client.println(F("<td><center><FORM action=\"http://192.168.1.6/\" >"));
          client.println(F("<input type=\"submit\" name=\"status\" value=\"Acceso\" onclick=\"this.value=1;\"/>"));
          client.println(F("</FORM></td>"));
	  client.println(F("<td><center><FORM action=\"http://192.168.1.6/\" >"));
	  client.println(F("<input type=\"submit\" name=\"status\" value=\"Spento\" onclick=\"this.value=0;\"/>"));
          client.println(F("</FORM></td>"));
          client.println(F("</tr>"));
          
          client.println(F("<tr>"));
	  client.println(F("<td><img src=\"http://digilander.libero.it/sire2p/luci.jpg\"></td>"));
          if (digitalRead(3)== true) 
             {client.println(F("<td><font face=verdana size=4>Luci Esterne Off</td>"));}  
          else 
             {client.println(F("<td><font face=verdana size=4>Luci Esterne  On</td>"));} 
          client.println(F("<td><center><FORM action=\"http://192.168.1.6/\" >"));
          client.println(F("<input type=\"submit\" name=\"status\" value=\"Acceso\" onclick=\"this.value=2;\"/>"));
          client.println(F("</FORM></td>"));
	  client.println(F("<td><center><FORM action=\"http://192.168.1.6/\" >"));
	  client.println(F("<input type=\"submit\" name=\"status\" value=\"Spento\" onclick=\"this.value=3;\"/>"));
          client.println(F("</FORM></td>"));
          client.println(F("</tr>"));

          client.println(F("<tr>"));
	  client.println(F("<td><img src=\"http://digilander.libero.it/sire2p/irrigazione.jpg\"></td>")); 
          if (digitalRead(4)== true) 
             {client.println(F("<td><font face=verdana size=4>Irrigazione Off</td>"));}  
          else 
             {client.println(F("<td><font face=verdana size=4>Irrigazione  On</td>"));} 
          client.println(F("<td><center><FORM action=\"http://192.168.1.6/\" >"));
          client.println(F("<input type=\"submit\" name=\"status\" value=\"Acceso\" onclick=\"this.value=4;\"/>"));
          client.println(F("</FORM></td>"));
	  client.println(F("<td><center><FORM action=\"http://192.168.1.6/\" >"));
	  client.println(F("<input type=\"submit\" name=\"status\" value=\"Spento\" onclick=\"this.value=5;\"/>"));
          client.println(F("</FORM></td>"));
          client.println(F("</tr>"));

          client.println(F("<tr>"));
	  client.println(F("<td><img src=\"http://digilander.libero.it/sire2p/caldaia.jpg\"></td>"));
          if (digitalRead(5)== true) 
             {client.println(F("<td><font face=verdana size=4>Caldaia Off</td>"));}  
          else 
             {client.println(F("<td><font face=verdana size=4>Caldaia  On</td>"));} 
          client.println(F("<td><center><FORM action=\"http://192.168.1.6/\" >"));
          client.println(F("<input type=\"submit\" name=\"status\" value=\"Acceso\" onclick=\"this.value=6;\"/>"));
          client.println(F("</FORM></td>"));
	  client.println(F("<td><center><FORM action=\"http://192.168.1.6/\" >"));
	  client.println(F("<input type=\"submit\" name=\"status\" value=\"Spento\" onclick=\"this.value=7;\"/>"));
          client.println(F("</FORM></td>"));
          client.println(F("</font></tr>"));
	
	  client.println(F("<tr><td colspan=4><font face=Verdana size=5 color=#FF0000><center><strong>Sensori</font></td></tr>"));
          client.println(F("<td rowspan =\"2\" height=75 width=75><img src=\"http://digilander.libero.it/sire2p/termometro.jpg\"></td>"));
	  client.println(F("<td height=75 width=150><font face=Georgia size=4 color=#FF0000>Temperatura</td>"));
	  client.println(F("<td><p align=\"center\">"));
          client.println(temp);
          client.println(F("</td>"));
          client.println(F("<td><font face=Georgia size=4 color=#FF0000>Gradi</td>"));
	  client.println(F("</tr>"));
          client.println(F("<tr>"));
	  client.println(F("<td><font face=Georgia size=4 color=#FF0000>Umidita</td>"));
	  client.println(F("<td><p align=\"center\">"));
          client.println(humi);
          client.println(F("</td>"));
	  client.println(F("<td><font face=Georgia size=4 color=#FF0000>%</td>"));
          client.println(F("</tr>"));

	  client.println(F("</table>"));
          client.println(F("</BODY>"));
                          
          break;
        }
        if (c == '\n') {
          
          currentLineIsBlank = true;
          buffer="";       
        } else if (c == '\r') {            
          if(buffer.indexOf("GET /?status=1")>=0)
            digitalWrite(2, LOW);  
          if(buffer.indexOf("GET /?status=0")>=0)
            digitalWrite(2, HIGH);

          if(buffer.indexOf("GET /?status=2")>=0)
            digitalWrite(3, LOW);
          if(buffer.indexOf("GET /?status=3")>=0)
            digitalWrite(3, HIGH);

          if(buffer.indexOf("GET /?status=4")>=0)
            digitalWrite(4, LOW);
          if(buffer.indexOf("GET /?status=5")>=0)
            digitalWrite(4, HIGH);

          if(buffer.indexOf("GET /?status=6")>=0)
            digitalWrite(5, LOW);
          if(buffer.indexOf("GET /?status=7")>=0)
            digitalWrite(5, HIGH);
        }
        else {
          
          currentLineIsBlank = false;
        }
      }
    }
    
    delay(1);
    
    client.stop();
  }
}

aggiungo il link della board.

http://www.ebay.it/itm/261144424777?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649

Dovresti postare lo schema della parte che gestisce i relè.

Non è che hai fatto la furbata di collegarli direttamente alle uscite dell’Arduino eh?!

Ah, ok, ho scritto quando ancora non avevi postato il link.

I relè sono i classici a 5V con buffer a transistor, quindi a zero problemi.

Devi calarti nei panni dell'elettronico: armati di tester e verifica che ci sia UNO (5V) sugli ingressi della scheda, ed eventualmente metti 5v gli ingressi della stessa e cerca di sentire se i relè scattano.

Molto probabilmente (se Arduino riceve i comandi) hai fatto un semplice errore di cablaggio.

Non è che hai fatto la furbata di collegarli direttamente alle uscite dell'Arduino eh?!

a me sembra che quella schedina abbia un transistor per pilotare il relé.

@siredue ho capito bene che alimenti Arduino con la USB e la scheda relé coll'alimentatore? hai collegato le masse? (Polo negativo del alimentatore con GND di Arduino) Ciao Uwe

uwefed:

Non è che hai fatto la furbata di collegarli direttamente alle uscite dell'Arduino eh?!

a me sembra che quella schedina abbia un transistor per pilotare il relé.

@siredue ho capito bene che alimenti Arduino con la USB e la scheda relé coll'alimentatore? hai collegato le masse? (Polo negativo del alimentatore con GND di Arduino) Ciao Uwe

Se scriviamo tutti a tempo e non leggiamo quando arriva il warning, ci ritroviamo a correggerci continuamente! XD

ciao Uwe,
Intanto mi scuso per il mio liguaggio “elettronico” da ignorante (di mestiere faccio l’ informatico) credo tu abbia ragione…ho preso direttamente “il rosso e il nero” dell’ alimentatore e li ho connessi alla board.
Quindi se ho capito bene devo fare arrivare il nero del caricabatteria e il nero (gnd) di arduino alla board sullo stesso pin denominato GND della board cerchio arancione dell immagine
Allego un immagine di cio che ho realizzato.

Ciao,
ho collegato il nero del caricabatteria e ilgnd di arduino…ma non funziona…arduino si accende, i rele si “accendono” ma non risco a spegnerli dal webserver…in che cosa hosbagliato. Allego foto con i cablaggi

Ciao
ho cercato su internet, e ho trovato questo schema di montaggio. é corretto?

ciao sireduep, scusa l'intromissione e l'OT ma... la scatola dove hai messo dentro arduino e i relay... dove l'hai presa?

l' ho comperata al negozio di elettronica sotto casa ( a roma)

ciao,
ecco lo schema di come ho montato il tutto. ho sbagliato qualcosa?

lo schema è corretto. Ma ti vorrei porre un quesito Tu hai detto

mi è stato suggerito, visto che i 4 rele assorbono parecchia corrente di alimentarli separatamente.

Chi te l'ha suggerito? Sembra che ci siano dei transistor per ogni relè sulla scheda che usi, e sembra che quei relè siano fatti appositamente per essere comandati dai 5 volt uscenti da arduino. Elimina quell'alimentatore che hai trovato e collega tutto alla 5 volt e gnd di arduino, anche il dht11 Se non funziona il problema è il codice. Ciao

dr4gone:

mi è stato suggerito, visto che i 4 rele assorbono parecchia corrente di alimentarli separatamente.

Chi te l'ha suggerito?

Chiunque glie lo abbia suggerito ha fatto bene ... ... 4 relè contemporaneamente attivi, è facile che superino i limiti massmii che può assorbire da Arduino (funzione anche di come lo alimenta), quindi ... un alimentatore a parte è da consigliare ...

Quella scheda è predisposta per essere alimentata a parte : " ... Sul connettore strip ci sono i 4 comandi dei relè e i due contatti per l'alimentazione a 5Vdc .." ;)

Guglielmo

gpb01:

dr4gone:

mi è stato suggerito, visto che i 4 rele assorbono parecchia corrente di alimentarli separatamente.

Chi te l'ha suggerito?

Chiunque glie lo abbia suggerito ha fatto bene ... ... 4 relè contemporaneamente attivi, è facile che superino i limiti massmii che può assorbire da Arduino (funzione anche di come lo alimenta), quindi ... un alimentatore a parte è da consigliare ...

Quella scheda è predisposta per essere alimentata a parte : " ... Sul connettore strip ci sono i 4 comandi dei relè e i due contatti per l'alimentazione a 5Vdc .." ;)

Guglielmo

Non sono d'accordo con la tua opinione, in quanto ho una scheda simile a 8 relay e sono sufficenti 20 mA da ogni pin di arduino pilotare un circuito con quei transitor. L'alimentazione a 5v e la massa a parte è necessaria per i led e i transistor. Ovviamente se non si misura non si può avere la certezza per quel tipo specifico di relay. Ma non credo proprio che ci vogliano più di 300mA per pilotare quella schedina.. Alla fine sono tutte uguali

Opinione prettamente personale. Potrei anche sbagliarmi.

dr4gone: Non sono d'accordo con la tua opinione, in quanto ho una scheda simile a 8 relay e sono sufficenti 20 mA da ogni pin di arduino pilotare un circuito con quei transitor ....

Difatti sbagli ... ... NON sto parlando della corrente necessaria ad Arduino su ciascun pin per pilotare il transistor, lo so benissimo che è trascurabile, sto parlando di quanto assorbono le bobine dei relè !!!

Ho visto schedine simili, con soli 4 relè, assorbire con tutti i relè attivi anche 750 mA (... ok, erano relè piuttosto robusti) !!! Non per nulla spesso prevedono i pin per alimentarle con un alimentatore a parte (come quella che ha lui) !

Purtroppo il venditore di quella schedina, non specifica l'assorbimento dei relè e ... io non me la sento di fargli correre il rischio di cuocere il regolatore di corrente del suo Arduino ... :roll_eyes:

Guglielmo

gpb01:

dr4gone: Non sono d'accordo con la tua opinione, in quanto ho una scheda simile a 8 relay e sono sufficenti 20 mA da ogni pin di arduino pilotare un circuito con quei transitor ....

Difatti sbagli ... ... NON sto parlando della corrente necessaria ad Arduino su ciascun pin per pilotare il transistor, lo so benissimo che è trascurabile, sto parlando di quanto assorbono le bobine dei relè !!!

Ho visto schedine simili, con soli 4 relè, assorbire con tutti i relè attivi anche 750 mA !!! Non per nulla spesso prevedono i pin per alimentarle con un alimentatore a parte !

Purtroppo il venditore di quella schedina, non specifica l'assorbimento dei relè e ... io non me la sento di fargli correre il rischio di cuocere il regolatore di corrente del suo Arduino ... :roll_eyes:

Guglielmo

continuo a restare del mio parere. La mia a 8 relay consuma 400ma in totale a pieno carico. e comunque se non misura non lo può sapere. Se poi per lui mettere un'altro alimentatore esterno non da fastidio, che lo metta pure. Nel mio caso sarebbe stato sprecato. Ciao Buonaserata ;)

dr4gone: ... continuo a restare del mio parere. ...

Tu puoi anche restare de tuo parere, ma, oltretutto, non sapendo come lui alimenta il suo Arduino (se via USB ha al massimo 500 mA disponibili e via Jack ... devi vedere che tensione di ingresso usa per poter calcolare la dissipazione del regolatore) NON puoi dirgli che è sicuro alimentare il tutto tramite quello ... semplicemente perché non lo puoi sapere ...

Quindi ... meglio restare sul sicuro ... se il costruttore ha messo dei pin per fornire l'alimentazione alla scheda ... magari avrà avuto i suoi buoni motivi ... ;)

Poi tu naturalmente tu. con il TUO Arduino, fai come ti pare ... :grin:

Guglielmo

dr4gone: Ovviamente se non si misura non si può avere la certezza per quel tipo specifico di relay.

dr4gone: e comunque se non misura non lo può sapere.

Si potrebbe anche consultare il datasheet del Relé. I relé della schedina a 4 relá é il SRD-05VDC-SL-C e consuma 71,4mA. Percui con tutti i relé attivi quelli consumano 285,6 mA. Questo é dentro le specifiche di Arduino e della USB ma comunque consiglio di alimentarlo direttamente dal alimentatore e non attraverso Arduino. Se si pensa di voler alimentare Arduino con un alimentatore esterno come disegnato nel sottostante schema allora é obligatorio un stabilizzatore 5V per la schedina relé.

@dr4gone Se la Tua scheda ha gli stessi relé allora stai rischiando di rompere Arduino. Il consumo é maggiore di 570mA. Ciao Uwe