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

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/led-driver-zxld1350-faretti-arduino.html

24 pings

Skip to comment form

  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

Your email address will not be published.

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