«

»

Nov 02

Stampa Articolo

LedDriver con ZXLD1350 pilota faretti a led

L’uso dei Led con Arduino è presente in molti progetti presentati, ma quando invece dei semplici led da 5mm vuoi controllare dei faretti da 3W, 5W o superiori ti occorre un led driver, ossia un circuito in grado di pilotare i led da 12v con corrente costante a 350mAh.

Led driver per faretti da 12v 350mAh

Ecco che il led driver progettato da Luca Dentella è l’ideale.

Sul sito lucadentella.it trovi schemi e un tutorial su come realizzartelo in casa ordinando il PCB on-line.

Io ne ho avuto uno in regalo da Luca stesso che mi ha detto di essere disposto a realizzarne degli altri per appassionati interessati, il costo dovrebbe essere intorno ai 10 euro per singolo driver, praticamente solo il costo dei componenti.

Il circuito led driver

il componente principale è l’integrato o chip led driver: ZXLD1350 in grado con pochi componenti esterni di pilotare led da 350mAh in corrente costante variando la luminosità con un segnale di tipo PWM sul pin ADJ.

La configurazione scelta da Luca è una delle applicazioni tipiche che trovi nel Data Sheet con l’aggiunta di un controllo attraverso un transistor open-collector di tipo BC848.

Eccho il circuito assemlato con anche i riferimenti a cui collegare l’alimentazione a 12v, il pin di controllo Arduino e il Led da 12v 350mAh che vuoi pilotare con il led driver:

led driver per faretti a 12v 350mAh

Come led per i test dello sketch ho utilizzato un led da 12v 350mAh con potenza 3W:

Led 3W

lo sketch per il led driver

Comandare una uscita PWM di Arduino è uno sketch molto semplice e l’Ide offre già una serie di esempi che puoi seguire e provare, la sfida che ti propongo è quella di utilizzare un encoder per regolare l’intensità del led driver e quindi della luminosità.

Lo sketch che ho realizzato è simile a quello mostrato nell’articolo Rotary Encoder: come utilizzare un encoder con Arduino con la variante che al pin 5 ( PWM ) colleghi il led Driver proposto, ecco lo sketch:

int encoderPin1 = 2;
int encoderPin2 = 3;
int ledPin = 5;

volatile int lastEncoded = 0;
volatile long encoderValue = 0;

long lastencoderValue = 0;

int lastMSB = 0;
int lastLSB = 0;
int value = 0;

void setup() {
  Serial.begin (9600);

  pinMode(encoderPin1, INPUT);
  pinMode(encoderPin2, INPUT);
  pinMode(ledPin, OUTPUT);

  digitalWrite(encoderPin1, HIGH);
  digitalWrite(encoderPin2, HIGH);
  analogWrite(ledPin, LOW);

  attachInterrupt(0, updateEncoder, CHANGE);
  attachInterrupt(1, updateEncoder, CHANGE);

}

void loop(){
  Serial.print(encoderValue);
  Serial.print( " " );
  value = encoderValue;
  if ( encoderValue < 0 )   { value = 0; }
  if ( encoderValue > 255 ) { value = 255; }
  Serial.println(value);

  analogWrite( ledPin, value );
}

void updateEncoder(){
  int MSB = digitalRead(encoderPin1); //MSB = most significant bit
  int LSB = digitalRead(encoderPin2); //LSB = least significant bit

  int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
  int sum  = (lastEncoded << 2) | encoded; //adding it to the previous encoded value

  if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
  if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue --;

  lastEncoded = encoded; //store this value for next time
}

Come avrai notato c’è sempre la funzione updateEncoder() che conta gli impulsi provenienti dall’encoder rotativo collegato ai pin 2 e 3 di arduino la cui assegnazione avviene alle linee 01-02;

linea 03: imposti il pin a cui colleghi il led driver che a sua volta pilota il led, ricorda che deve essere una uscita di tipo PWM;

linee 05-11: imposta i valori necessari alla funzione updateEncoder() per svolgere il suo lavoro;

linea 12: inizializza una variabile di tipo integer chiamata value il cui valore inizialmente impostato a 0 sarà quello che trasferisci al led driver per pilotare il faretto;

linee 17-19: imposta la modalità di funzionamento di ciascun pin definito alle linee 01-03;

linee 21-23: imposta i valori di default da inviare ai singoli pin;

linee 25-26: definisci con il comando attachInterrupt( interrupt, funzione, mode) quale pin di interrupt al variare del mode esegue la funzione;

linea 33: nel ciclo di loop() assegna alla variabile  value il valore letto dall’encoder;

linee 34-35: se il valore letto dall’encoder è inferiore a 0 o superiore a 255 fissa i valori di minimo e massimo da trasferire al led driver;

linea 38: invia al pin ledPin il valore analogico value definito leggendo l’encoder e filtrato dalle linne 34-35 in modo che il range sia sempre compreso tra 0 e 255;

linee 41-52: definisci la funzione updateEncoder() richiamata dall’interrupt corrispondente ogni volta che su uno dei due interrupt si verifica un cabio ( CHANGE ) da HIGH a LOW e viceversa;

Il video del led driver in funzione

Per mostrarti come il led driver funziona ho realizzato un piccolo video in cui ruotando il cursore dell’encoder la luce prima aumenta di intensità, puoi vedere che il cilindro sale si illumina sempre più e ruotando l’encoder in senso opposto il led driver provvede a spegnere il led collegato:

Buon divertimento !!!

Permalink link a questo articolo: http://www.mauroalfieri.it/elettronica/led-driver-zxld1350-faretti-arduino.html

22 comments

2 pings

Vai al modulo dei commenti

  1. lampadine led

    informazioni che servono sopratutto a chi è pratico in questo ambito, grazie per averle condivise

    1. Mauro Alfieri

      Ciao Silvia,
      se avete altre informazioni che posso essere utili agli oltre 1000 makers che ogni giorno visitano il blog io sarò lieto di poterle diffondere e lavorare insieme ad un progetto.

      Mauro

  2. stefano

    bel progetto!!…:)
    Ho un dubbio però:
    Leggendo in giro vedo che i led da 3w hanno una tensione di alimentazione di circa 3.5v quando invece questo circuito lo alimenti a 12v. La funzione di questo circuito quindi è di regolare la tensione in base al carico?

    1. Mauro Alfieri

      Grazie Stefano,
      io ho utilizzato un led a 12v, se ne usi uno a 3,5v dovrai dargli la corretta alimentazione.
      Il circuito, come scritto, regola la corrente.

      Mauro

  3. stefano

    Ahn….non sapevo che esistessero led da 3w che vanno a 12v. Per favore mi sa consigliare (se esistono) led da 5w che vanno a 12volt? Io non riesco a trovarli.

    Grazie per la disponibilità.

    1. Mauro Alfieri

      Ciao Stefano,
      io di solito acquisto nelle fiere di elettronica, e siccome mi piacciono qualche volta esagero 🙂
      Su internet sono certo che ne troverai, cerca “led 3w 12v”

      Mauro

  4. Stefano

    Ciao Mauro…
    Ho realizzo il circuito utilizzando però lo “ZXLD 1360” invece del “ZXLD 1350” usato in questo articolo per poter usare led da 10W
    Il problema che ho è che ai capi dei morsetti d’uscita c’e tensione e varia anche a seconda della frequenza del PWM in ingresso ma il led resta spento. Ho anche provato a invertire i poli per vedere se magari cambiasse qualcosa, infatti si accende ,ma con un’ inensità luminosa molto lieve. Mi sai aiutare?

    1. Mauro Alfieri

      Ciao Stefano,
      il circuito lo ha realizzato l’Ing. Luca mio amico, lascio che ti risponda lui.

      Mauro

  5. stefano

    Ciao Mauro…
    Ho risolto.
    Per quanto riguarda la polarità dei led sono contrassegnati sbagliati c’è poco da fare. Cercando su internet il mio non è un caso isolato. L’intensità di luce lieve era dovuta ad una saldatura fatta male il che comportava di avere un valore di di 12K ohm invece dei 0.33 ohm di R2 quindi la corrente al led arrivava molto bassa. Grazie per aver pubblicato il progetto.

    1. Mauro Alfieri

      Benissimo Stefano,
      Grazie a te ore aver condiviso la soluzione.

      Mauro

  6. Gerardo

    Ciao Stefano, hai usato lo stesso circuito, con i stessi valori e potenze dei componenti, hai cambiamo solo lo “ZXLD 1360” per controllare lampade led fino a 10W?

    Dove sei riuscito a reperire i componenti? visto che online non riesco a comprare delle resistenze con quantità inferiore a 2.000pz.

    Ciao Gerardo

    1. Mauro Alfieri

      Ciao Gerardo,
      lascio a Stefano la possibilità di aiutarti.

      Mauro

      1. Gerardo

        Ciao Mauro, mi puoi consigliare dei siti web dove comprare i componenti per realizzare questo circuito?

        1. Mauro Alfieri

          Ciao Gerardo,
          non conosco il fornitore da cui sono stati acquistati i componenti, io di solito acquisto da robot-domestici.it che offrono driver di controllo già pronti da utilizzare con Arduino.

          Mauro

  7. Gerardo

    Quanti WATT sono le resistenze in SMD? il condensatore in SMD che tensione di lavoro deve avere?

    1. Mauro Alfieri

      Ciao Gerardo,
      non saprei fornirti questi dati non avendo io progettato il driver.

      Mauro

  8. nuccio

    ciao se era possibile volevo una informazione:
    posso collegare in serie numero tre led bianchi da 5mm che credo abbiano una tensione da 3,5v ciascuno ed una resistenza da 750h ad un driver con tensione in uscita da 9 a 14-v con corrente costante di 350ma?

    p.s. ho scelto la resistenza da 750h per abbassare la corrente in uscita ad un valore di 120 ma considerando che questi led credo richiedano una corrente di 40 ma ciascuno. ditemi se è corretto quanto scritto sopra e correggetemi…e perdonatemi… se ho detto qualche stratosferica c…..a.

    1. Mauro Alfieri

      Ciao Nuccio,
      non mi risulta i led abbiano tensione di alimentazione di 3,5v, in ogni caso puoi calcolare con la legge di ohm la resistenza da applicare.

  9. nuccio

    CIAO SCUSATE HO UN ALTRO PROBLEMINO, HO COLLEGATO TUTTO MA LA LUCE DEI LED è DI BUONA INTENSITA’ MA TREMA COSA PUò ESSERE? COME POSSO RISOLVERE?
    GRAZIE

    1. Mauro Alfieri

      Ciao Nuccio,
      per favore non usare il maiuscolo è cattiva abitudine.
      Ma stai usando questo circuito ? dubito xchè si tratta di un progetto sperimentale di cui conosco l’autore e non mi risulta abbia prodotto e venduto circuiti come questo.
      Probabilmente stai sbagliando articolo o tipo di richiesta ed in questo modo non possiamo aiutarti.

  10. matteo

    Ciao a tutti..
    In questo periodo mi sto avvicinando al mondo dei power led,ma non trovo nulla,o poca roba senza descrizione rigurdo al pilotaggio di led rgbda 3v…
    il progetto che sto realizzando necessita di pilotare il led rgb usando 3 pwm,anche se il top sarebbe gestirli come i led ws2812,anche perche il mio progetto necessiterebbe di 4 led ed altre uscite per relè,ed usare il mega mi crea non pochi problemi di posto…
    che ne dite di aiutarmi a creare una sorta di power led pilotato in quel sistema ??
    un saluto e buona giornata

    1. Mauro Alfieri

      Ciao Matteo,
      cosa intendi per power led? Perchè non usi dei WS2812?

  1. lucadentella.it – PowerLED Driver

    […] l’amico Mauro Alfieri per la recensione e il test del modulo! Tweet (function() { var s = document.createElement('SCRIPT'), s1 = […]

  2. Servo shield arduino - Mauro Alfieri Elettronica

    […] driver per led ad alta luminosità da 350mA o 700mA, come quello realizzato dall’amico Luca ( leggi articolo […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>