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 !!!

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

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

22 commenti

2 ping

Vai al modulo dei commenti

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

    1. 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

    • stefano il 29 Maggio 2013 alle 19:40
    • Rispondi

    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. 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

    • stefano il 31 Maggio 2013 alle 18:19
    • Rispondi

    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. 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

    • Stefano il 27 Novembre 2013 alle 23:39
    • Rispondi

    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. Ciao Stefano,
      il circuito lo ha realizzato l’Ing. Luca mio amico, lascio che ti risponda lui.

      Mauro

    • stefano il 30 Novembre 2013 alle 00:32
    • Rispondi

    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. Benissimo Stefano,
      Grazie a te ore aver condiviso la soluzione.

      Mauro

    • Gerardo il 13 Gennaio 2014 alle 16:33
    • Rispondi

    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. Ciao Gerardo,
      lascio a Stefano la possibilità di aiutarti.

      Mauro

        • Gerardo il 13 Gennaio 2014 alle 17:24
        • Rispondi

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

        1. 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

    • Gerardo il 14 Gennaio 2014 alle 14:22
    • Rispondi

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

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

      Mauro

    • nuccio il 25 Agosto 2015 alle 12:13
    • Rispondi

    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. 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.

    • nuccio il 26 Agosto 2015 alle 16:59
    • Rispondi

    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. 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.

    • matteo il 29 Agosto 2017 alle 17:58
    • Rispondi

    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. Ciao Matteo,
      cosa intendi per power led? Perchè non usi dei WS2812?

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

  2. […] 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.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.