RGB Shield arduino strip led

La RGB Shield ti permette di controllare led ad alta luminosità ed è particolarmente interessante in combinazione alle strisce di led.

RGB shield arduino

mi sono procurato una striscia di led RGB ed una RGB Shield per testare alcuni progetti che vorrei realizzare per l’arredo casalingo come lampade, lampadari e illuminazione di ambienti.

Il primo passo quando ho in mente un progetto è lo studio dei componenti necessari sia dal punto di vista hardware ( shield, strip led, connettori, alimentazione, .. ) sia dal punto di vista software.

Mi sono quindi procurato:

  • n.1 arduino uno R3
  • n.1 RGB Shield
  • n.1 alimentatore per Strip RGB ( adeguato al numero di led della striscia che prevedi di accendere )

Il seocndo passo è stato lo studio della shield.

Come è fatta la RGB Shield

Dal sito ufficiale ho preso il PDF RGB di descrizione della RGB shield da cui ho appreso sia o schema:

RGB shield schema

sia l’elenco dei componenti, in cui comprendi facilmente che il componente principale è il Mosfet STP36NE06 e che i pin usati sono:

Pin Arduino Led RGB shield
3 Rosso ( R )
5 Verde ( G )
6 Blu ( B )

Passando al datasheet del mosfet ho trovato che è in grado di lavorare con correnti fino a 36A e tensioni di 60V:

RGB shield STP36NE06

anche se il componente può lavorare con tensioni e correnti molto elevate la RGB shield è data per un funzionamento a 12v o 24v ed un massimo di 6A.

Il primo sketch per la RGB shield

Per eseguire il primo test della RG Shield ho utilizzato il seguente sketch:

int RED = 3;
int GREEN = 5;
int BLUE = 6;
int brightness = 0;
int DELAY = 5;

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
}

void loop() {

  for (brightness = 0; brightness < 255; brightness ++) {
    analogWrite(RED, brightness);
    delay(DELAY);
  }
  for (brightness = 255; brightness > 0; brightness --) {
    analogWrite(RED, brightness);
    delay(DELAY);
  }
  analogWrite(RED, 0);

  for (brightness = 0; brightness < 255; brightness ++) {
    analogWrite(GREEN, brightness);
    delay(DELAY);
  }
  for (brightness = 255; brightness > 0; brightness --) {
    analogWrite(GREEN, brightness);
    delay(DELAY);
  }
  analogWrite(GREEN, 0);

  for (brightness = 0; brightness < 255; brightness ++) {
    analogWrite(BLUE, brightness);
    delay(DELAY);
  }
  for (brightness = 255; brightness > 0; brightness --) {
    analogWrite(BLUE, brightness);
    delay(DELAY);
  }
  analogWrite(BLUE, 0);


  for (brightness = 0; brightness < 255; brightness ++) {
    analogWrite(GREEN, brightness);
    analogWrite(RED, brightness);
    analogWrite(BLUE, brightness);
    delay(DELAY);
  }
  for (brightness = 255; brightness > 0; brightness --) {
    analogWrite(GREEN, brightness);
    analogWrite(RED, brightness);
    analogWrite(BLUE, brightness);
    delay(DELAY);
  }

  for (brightness = 10; brightness > 0; brightness --) {
    analogWrite(GREEN, 0);
    analogWrite(RED, 0);
    analogWrite(BLUE, 0);
    delay(50);
    analogWrite(GREEN, 255);
    analogWrite(RED, 255);
    analogWrite(BLUE, 255);
    delay(50);
  }

  for (brightness = 10; brightness > 0; brightness --) {
    analogWrite(GREEN, 0);
    analogWrite(RED, 0);
    analogWrite(BLUE, 0);
    delay(50);
    analogWrite(GREEN, 0);
    analogWrite(RED, 255);
    analogWrite(BLUE, 0);
    delay(50);
  }
  for (brightness = 10; brightness > 0; brightness --) {
    analogWrite(GREEN, 0);
    analogWrite(RED, 0);
    analogWrite(BLUE, 0);
    delay(50);
    analogWrite(GREEN, 0);
    analogWrite(RED, 0);
    analogWrite(BLUE, 255);
    delay(50);
  }
  for (brightness = 10; brightness > 0; brightness --) {
    analogWrite(GREEN, 0);
    analogWrite(RED, 0);
    analogWrite(BLUE, 0);
    delay(50);
    analogWrite(GREEN, 255);
    analogWrite(RED, 0);
    analogWrite(BLUE, 0);
    delay(50);
  }

  analogWrite(GREEN, 0);
  analogWrite(RED, 0);
  analogWrite(BLUE, 0);
}

in cui noti subito che ci sono dei blocchi di codice che si ripetono, vediamo quali iniziando dalle prime linee:

linee 01-03: definisci i 3 pin a cui sono connessi i Mosfet che controlleranno ciascuno un colore della tua striscia led;

linea 04: definisci una variabile che userai per memorizzare i valori di luminosità durate il ciclo;

linea 05: imposta un valore per la variabiel DELAY di default;

linee 08-10: definisci la modalità in cui userai i pin relativi ai 3 output della shield;

linea 15: crea un ciclo for in cui fai variare il valore di brightness da 0 a 255;

linea 16: applica il valore corrente di brightness al led rosso con il comando analogWrite( pin, valore );

linea 17: attendi il delay impostato alla linea 05;

linea 19: imposta un ciclo for in cui il valore di brightness passa da 255 a 0;

linea 20: applica il valore di brightness al led rosso;

linea 21: attendi tra un valore ed il successivo il tempo impostato per DELAY;

linea 23: imposta a 0 il valore del led rosso;

linee 25-33: esegui le medesime operazioni viste per le linee 15-23 applicandole al led green;

linee 35-43: esegui le medesime operazioni viste per le linee 15-23 applicandole al led blu;

linee 46-57: crea un ciclo ascendente 0-255 ed un ciclo discendente 255-0 ma applicandolo contemporaneamente ai tre led;

linee 59-68: passando da un valore 10 a 0 per la variabile brightness esegui lo spegnimento dei tre led e la successiva accensione dopo 50 millisecondi per ciascun ciclo. L’effetto è un veloce lampeggio di tutti i led contemporaneamente per 10 cicli successivi;

linee 70-99: esegui 3 cicli separati di 10 valori ciascuno in cui ogni singolo colore del led si accende. La sequenza produrrà 10 lampeggi del led rosso, 10 lampeggi del led blu e 10 lampeggi del led verde;

linee 101-103: imposta a 0 il valore dei tre led a fine di ciascuna sequenza di accensione, alla fine di ogni loop()

Ho trovato una applicazione maker interessante realizzata con una strip RGB controllabile in seriale da arduino con il WS2811/WS2812 ma che potresti riprodurre tranquillamente con la RGB shield:

lampada RGB shield

puoi trovare tutti i dettagli del progetto in questo link, in cui ho trovato anche il seguente video:

Progetti futuri RGB

In un prossimo futuro ho in mente di connettere questa shield ad una Ethernet o Wifi shield per collegarmi da remoto e controllare la striscia RGB direttamente dal mio cellulare come già fatto con il singolo RGB in questo articolo.

RGB shield Ethernet

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/rgb-shield-arduino-strip-led.html

15 comments

Skip to comment form

    • Antonio on 30 maggio 2015 at 20:55
    • Reply

    …un’altro bellissimo articolo pieno di interessanti stimoli ed idee.
    Come ti avevo anticipato nel mio post sul tuo progetto alba-tramonto, mi sono arrivate le N-Drive Shield Freetronics e devo dire che le ho trovate eccezionali sia in termini di layout che di prestazioni; hanno ben 6 N-channel MOSFETs ed ognuno può gestire 60V / 20A.
    Considerando il prezzo (13 euro già montata) e la confezione nella quale è inserita (anche il packaging è un’indicatore della qualità) sarebbe da farci un pensierino.

    1. Ciao Antonio,
      leggo il tuo entusiasmo nelle shield che hai utilizzato, che Mosfet utilizzano ?

        • Antonio on 3 giugno 2015 at 01:53
        • Reply

        Mauro,
        sono Mosfet NTD5867NLT4G della ON Semiconductor, in particolare NFET con montaggio superficiale (DPAK) e con 60V di V(BR)DSS, Id max 18-20 A e resistenza RDS (Drain−to−Source On) sui 33 MOhm.
        Sulla carta mi sembrano interessanti, almeno per quanto riguarda le applicazioni con Arduino. In questi giorni li sto testando con varie led strip e/o power led e, per adesso, rispondono in maniera adeguata.

        1. Ottimo Antonio !!!
          Grazie

      • marco grasselli on 3 aprile 2017 at 22:24
      • Reply

      Salve Antonio e Mauro,

      potete consigliarmi dove poter comprare le N-Drive Shield Freetronics?

      In commercio esistono shield simili, ma con 10 canali anzichè 6?

      Saluti,
      Marco

      1. Ciao Marco,
        purtroppo io non ne conosco.

    • IDRIS on 8 luglio 2015 at 11:53
    • Reply

    Buongiorno,Mauro.
    Mi sto cervellando da giorni per una applicazione con delle strisce rgb,ma non riesco nel mo intento.
    Dovrei realizzare una lampada rgb con degli effetti luce che si possano scegliere premendo un pulsante.
    Fino a qui tutto bene,pero vorrei che questi effetti potessero luppare (su se stessi)e cambiare stato solo quando premo il pulsante.Se posto lo sketch potresti darmi una dritta ? grazie

    [[ codice rimosso in automatico ]]

    1. Ciao Idris,
      come hai letto in fondo ad ogni sketch non è possibile incolare sketch nei commenti perché non ho modo di provarli e senza un test non sari in grado di comprendere cosa stai facendo.
      Posso darti una dritta: metti i giochi di luce in funzioni e dalla loop() chiami le singole funzioni alla pressione del pulsante.
      Puoi leggere il mio articolo sui giochi di luce pubblicato in occasione del natale 2011 o 2012.

    • idris on 9 luglio 2015 at 07:33
    • Reply

    Ciao Mauro,ho seguito i tuoi consigli e sono arrivato al 90%dell’opera.Mi sono bloccato nell’ uso del pulsante quando devo fare il cambio di effetto luminoso. Praticamente quando funziona l’ultimo gioco che è’ una cambio di colore rgb,in dissolvenza, non riesco ,premendo il pulsante, a cambiare ciclo. Come posso inserire in questo loop la presenza se richiamata del tasto che a sua volta mi rimanda al primo loop scritto?grazie

    1. Ciao Idris,
      nel mio articolo sui giochi di luce trovi la descrizione di tutti i concetti di programmazione che ho utilizzato ed in particolare nell’articolo:
      http://www.mauroalfieri.it/elettronica/giochi-di-luce-con-arduino-secondo-gioco-prima-parte.html
      alla linea 47 è descritto quello che ti occorre.

      Ti consiglio, se vuoi veramente imparare qualcosa su arduino, di leggere i miei articoli con attenzione, troverai tutto quello che ti può servire.

    • idris on 12 luglio 2015 at 21:34
    • Reply

    Buonasera, Mauro.Dopo svariati tentativi sono riuscito a realizzare il mio progetto. Siccome ho trasferito il programma su un attiny 44,per motivi di spazio, dopo una decina di minuti che è acceso , mi va in blocco il programma . Per sbloccare il micro devo togliere tensione e poi rifunziona. Potresti suggerirmi qualcosa? Grazie

    1. Ciao Idris,
      dovresti verificare se si tratti di un blocco relativo all’alimentazione o alla quantità di memoria utilizzata.

    • idris on 13 luglio 2015 at 02:35
    • Reply

    Ho provato ad aggiungere un condensatore da 10 uF sulla linea di alimentazione del micro e sembra che il problema sia stato eliminato… Il circuito è rimasto acceso per ore senza andare in blocco. Speriamo bene. Un’ ultima domanda: è possibile creare su un attiny 85 un’ uscita aggiuntiva PWM? Grazie per la disponibilità

    1. Ciao Idris,
      evidentemente t sei trovato in un errore di alimentazione che il condensatore ti ha risolto stabilizzandola.
      Non ho mai provato gli Attiny85 tuttavia penso tu possa provare con una libreria software, se ti basta la memoria, mi sembra si chiami SoftPWM e devo averla utilizzata con dei giochi di luce in un progetto di qualche anno fa.

    • idris on 15 luglio 2015 at 01:53
    • Reply

    Grazie terro’ presente, a breve partirò pere le ferie,spero di poter approfondire l’ argomento. Saluti e complimenti per il tuo lavoro e impegno

Lascia un commento

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.