Torna alla visione normale della pagina
Questa è una pagina ottimizzata per la stampa - Torna alla pagina normale

Lampada Stroboscopica LED per fotografia macro di oggetti in rapido movimento. Arduino uno e lo Shield Strobo.

Lampada Stroboscopica LED per fotografia macro

Lampada Stroboscopica LED per fotografia macro: Breve Introduzione.

Questo circuito è progettato per generare lampi di luce di breve durata, adatto per fotografare oggetti in rapido movimento. Quando i tempi diventano molto brevi l'energia in gioco cala drasticamente fino ad arrivare al limite di sensibilità del sensore della macchina fotografica. Il nostro obbiettivo è produrre lampi con una energia il più alta possibile.

Lampada Stroboscopica LED per fotografia macro: Principio di funzionamento.

Quando un oggetto in rotazione viene investito da una luce pulsante che ha la stessa frequenza (o un sottomultiplo) di quella di rotazione dell'oggetto questi sembra fermo. Variano la frequenza della luce la velocità apparente di rotazione dell'oggetto sarà data dalla velocità dell'oggetto meno la frequenza della luce che lo investe. Variando la frequenza della luce che lo illumina quindi possimo vedere al rallenty la rotazione dell'oggetto e studiarne il movimento, nonchè riprenderlo e fotografarlo. Se l'oggetto che si muove non ha un moto rotatorio ma traslatorio e il tempo di ripresa della macchina fotografica è un multiplo del tempo di un singolo lampo di luce otterremo diverse foto dell'oggetto ripreso sovrapposte e traslate del movimento che è intercorso fra un lampo e l'altro. In questo modo con dei riferimenti e sapendo il tempo che intercorre fra un lampo e l'altro potremo calcolare la velocità dell'oggetto in ogni suo punto.

Lampada Stroboscopica LED per fotografia macro: Perchè abbiamo utilizzato un led?

Il diodo led ha il vantaggio di avere dei tempi di eccensione/spegnimento estremamente rapidi, quindi si tratta di un dispositivo più performente di uno stroboscopio classico a gas. Il limite fino a qualche tempo fa era sulla potenza che era in grado di gestire, ora con i led dell'ultima generazione il problema della potenza massima è stato superato. I led COB (Chip On Board) arrivano oggi (2014 ndr) a potenze di 100-500 Watt per singolo chip.

Lampada Stroboscopica LED per fotografia macro: Parametri di progetto.

Il nostro scopo è quello di fotografare una fresa di una macchina utensile mentre lavora. Di seguito i dati su cui ci siamo basati:

Lampada Stroboscopica LED per fotografia macro, Arduino uno e lo Shield Strobo: Schema

Lampada Stroboscopica LED per fotografia macro, Arduino uno e lo Shield Strobo: Schema

Sopra lo schema dello shield, molto semplice. La complessità è stata trasferita sul software. L'alimentazione esterna è funzione del led COB che utilizzeremo, limitata dalla tensione massima che gestisce il Tr1 (100V) e dalla corrente che riesce a reggere (8A). Per quello che riguarda gli altri componenti, R1 e R2 formano un partitore per polarizzare correttamente la base di Tr1, mentre C1 è un condensatore di spped-up che migliora i tempi di commutazione di Tr1. Vengono utilizzati gli ingressi-uscite digitali da 2 a 7.

Emettitore di luce con bassissimo tempo di accensione e spegnimento per flash strobo: i LED COB

Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto dal fianco. Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto di fronte. Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto da dietro (contatto termico per dissipazione di calore).

Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto dal fianco. Il dissipatore è inutile in quanto funzionando in regime impulsivo dissipa pochissima energia.

Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto di fronte.

Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto da dietro (contatto termico per dissipazione di calore).

Ci sono poi delle considerazioni da fare sulla energia in gioco in un flash di questo tipo. In genere è molto bassa, funzione del rapporto fra tempo di accensione e tempo di spegnimeto del dispositivo. In questo caso il tempo minimo (impostato da programma) fra un lampo e l'altro è di 1mS mentre il tempo massimo di accensione è 100uS, quindi il rapporto è 10, quindi in un secondo l'energia in gioco è 1joule. E questa è la massima energia che questo flash stroboscopico può assorbire in condizioni standard. Aumentando la tensione e lavorando in regime impulsivo "spremendo" al limite della distruzione il led cob si può arrivare a 2joule ma leggendo il datasheet del led consigliamo di non passare 1,5joule altrimenti potrebbe durare veramente poco. In questo caso per aumentare l'energia in gioco occorre aumentare la potenza del led, in questo periodo (giugno 2014) si possono reperire led cob ad alta potenza da massimo 100Watt. Quindi possiamo arrivare ad una energia di 10-20joule che inizia ad essere interessante anche per impieghi diversi, come ad esempio un servoflash. Per contro i flash commerciali possono avere potenze che arrivano anche a 100joule (per un singolo lampo), ma quando si aumenta la potenza aumenta anche il tempo di flash (durata del lampo) a scapito della velocità e non possono emettere lampi troppo ravvicinati nel tempo perchè si devono ricaricare (funzionano ad alta tensione e si basano su una scarica capacitiva). Per arrivare a certe potenze con i led occorre collegare insieme un numero abbastanza alto di led. Teoricamente (ma anche praticamente) è possibile. L'approccio a led è molto sclabile, in linea di massima si possono collegare insieme un numero tanto alto di led cob da coprire qualsiasi necessità di energia. Pensate ad un pannello con una matrice 10x10 di led cob da 100Watt, quindo 10Kw. Non basterebbe l'utenza domestica per alimentari ma avrebbero un ingombro di 60x60 cm, quindi un pannello di dimensioni accettabili e funzionando a regime impulsivo non necessiterebbero di raffreddamento e avrebbero un costo paragonabile ad un flash allo xenon di fascia media.

Lampada Stroboscopica LED per fotografia macro, Arduino uno e lo Shield Strobo: Verifiche sperimentali

Abbiamo preso una scheda arduino uno e abbiamo costruito un circuito driver di potenza per pilotare qualsiasi tipo di lampada led di potenza con tensioni fino a 100V e correnti fino a 6 Ampere. Praticamente con questo circuito possiamo fare prove su tutti i led commerciali sia SMD che COB. Poi abbiamo programmato arduino per generare impulsi della durata dell'ordine delle decine di microsecondi intervallati da tempi programmabili (il vantaggio di arduino è quello di non essere legati in fase di test a circuiti hardware dalla difficile modifica). Poi abbiamo smontato una lampada led da 3Watt (un faretto) e la abbiamo alimentata direttamente con il nostro circuito. E' durata poco, perchè durante le prove riducendo il tempo di accensione abbiamo dovuto aumentare la tensione della lampada per avere una luce accettabile e così facendo abbiamo esagerato triplicando i 12V di alimentazione della stessa che è durata nonostante lo stress alcune decine di minuti. Quindi abbiamo rimpiazzato la lampada con un'altra (un ripiego) e ridotto la distanza fra la lampada e l'oggetto da illuminare senza esagerare con l'alimentazione della stessa. Nel frattempo abbiamo ordinato un led COB da 10W che posto abbastanza vicino all'oggetto da illuminare e doverosamente sovralimentato (senza esagerare) dovrebbe svolgere egregiamente il suo compito.

Circuito driver di potenza per led con arduino Circuito driver di potenza per led con arduino Circuito driver di potenza per led con arduino
Circuito driver di potenza per led con arduino Circuito driver di potenza per led con arduino Circuito driver di potenza per led con arduino
Circuito driver di potenza per led con arduino Lampada led per strobo ricavata da faretto da 3 watt Lampada led per strobo ricavata da faretto da 3 watt
Lampada led per strobo ricavata da faretto da 3 watt Lampada led per strobo ricavata da faretto da 3 watt Lampada led per strobo ricavata da faretto da 3 watt

int outPin = 4; // digital pin 4

void setup()
{
pinMode(outPin, OUTPUT); // setta il pin come output
digitalWrite(outPin, LOW);
}

void loop()
{
digitalWrite(outPin, HIGH); // Setta il pin a livello alto
delayMicroseconds(100); // pausa di 100 microseconds
digitalWrite(outPin, LOW); // Setta il pin a livello basso
delay(20); // pausa di 20 millisecondi
}

A sinistra il Programma di test per arduino. Per variare i tempi di accensione e di attesa fra un lampo e l'altro basta variare i due delay, il primo in microsecondi (durata del lampo) e il secondo in millisecondi (il tempo fra un lampo e l'altro) e ritrasmettere il programma ad arduino per vedere l'effetto. Ricordate che se survoltate il led il tempo di accensione deve essere molto più corto del tempo in cui il led stà spento, altrimenti si brucia rapidamente. Nel codice di esempio il tempo di spegnimento è 20 mS mentre quello di accensione è 100 uS = 0,1 mS. Il rapporto fra i due è quindi 200.

Lampada Stroboscopica LED per fotografia macro, Arduino uno e lo Shield Strobo: Progetto prototipo definitivo.

Visti gli incoraggianti risultati ottenuti abbiamo continuato lo sviluppo della lampada stroboscopica aggiungendo i comandi per rendere indipendenti arduino uno e lo Shield Strobo dal computer. Abbiamo aggiunto due pulsanti per gestire il tempo di spegnimento, due per gestire il tempo di flash e uno per attivare la modalità regolazione fine del tempo di spegnimento. Questo Shield Strobo è sempre un prototipo, quando ne faremo una versione definitiva impiegheremo un display lcd per visualizzare le informazioni. Ora per avere un output (in fase di sviluppo è molto utile) usiamo il monitor seriale del sistema di sviluppo di arduino.

Vista di Arduino uno Shield Strobo visto da sopra. Vista di Arduino uno Shield Strobo visto di fianco. Vista di Arduino uno Shield Strobo visto di fianco.

Vista di Arduino uno Shield Strobo visto da sopra.

Vista di Arduino uno Shield Strobo visto di fianco.

Vista di Arduino uno Shield Strobo visto di fianco.

Vista di Arduino uno Shield Strobo visto da sotto. Vista di Arduino uno Shield Strobo visto da sotto di fianco. Vista di Arduino uno Shield Strobo da sotto visto di fianco.

Vista di Arduino uno Shield Strobo visto da sotto.

Vista di Arduino uno Shield Strobo visto da sotto di fianco.

Vista di Arduino uno Shield Strobo da sotto visto di fianco.

Vista di Arduino uno con lo Shield Strobo visto dal fianco. Vista di Arduino uno con lo Shield Strobo visto dal fianco. Vista di Arduino uno con lo Shield Strobo visto dal fianco.

Vista di Arduino uno con lo Shield Strobo visto dal fianco.

Vista di Arduino uno con lo Shield Strobo visto dal fianco.

Vista di Arduino uno con lo Shield Strobo visto dal fianco.

Vista di Arduino uno con lo Shield Strobo visto dal fianco. Vista di Arduino uno con lo Shield Strobo visto dal fianco. Vista di Arduino uno con lo Shield Strobo visto dal fianco.

Vista di Arduino uno con lo Shield Strobo visto dal fianco.

Vista di Arduino uno con lo Shield Strobo visto dal fianco.

Vista di Arduino uno con lo Shield Strobo visto dal fianco.

Vista di Arduino uno con lo Shield Strobo visto dal fianco. Vista di Arduino uno con lo Shield Strobo visto da sopra.

Vista di Arduino uno con lo Shield Strobo visto dal fianco.

Vista di Arduino uno con lo Shield Strobo visto da sopra.

Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto dal fianco. Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto di fronte. Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto da dietro (contatto termico per dissipazione di calore).

Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto dal fianco. Il dissipatore è inutile in quanto funzionando in regime impulsivo dissipa pochissima energia.

Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto di fronte.

Led COB (chips on board) da 10W privo dell'aletta di raffreddamento, visto da dietro (contatto termico per dissipazione di calore).

La potenza di Arduino Uno unita a questo semplice shield ci permettono di avere una flessibilità, per quello che concerne i tempi di flash e di pausa praticamente assoluta, con la possibilità di scalare semplicemente a livello di potenza, fino a potenze veramente alte.

Di seguito il programma usato nella versione prototipale definitiva con i relativi commenti per una pronta comprensione. Basta copiare il programma, trasferirlo ad arduino uno munito dello shield strobo e tutto funziona.

/*
Programmma gestione interfaccia strobo per arduino.
I settaggi iniziali e i limiti di definizione dei tempi di attesa e flash sono stati calcolati per essere "sicuri" per la buona salute della
lampada led nel caso sia survoltata (al 100%)
Questi tempi, in funzione dell'hardware realmente utilizzato e del fenomeno da riprendere possono essere ovviamente variati sempre nell'ottica conservativa per il led.
Tenete anche conto dei campi di esistenza delle variabili int
*/
int inPin2 = 2; // digital pin 2 in
int inPin3 = 3; // digital pin 3 in
int outPin = 4; // digital pin 4 out
int inPin5 = 5; // digital pin 5 in
int inPin6 = 6; // digital pin 6 in
int inPin7 = 7; // digital pin 7 in Moltiplicatore
int nPrint = 0;
unsigned int nDelay = 100; // Delay iniziale fra un lampo e l'altro in milliSec
unsigned int nFlash = 50; // Durata iniziale lampo in microSec
unsigned int nT1 = 5; // Delay iniziale fra un lampo e l'altro in microSec
unsigned int nWait = 10; // Tempo di attesa dopo la pressione di un tasto
long nAlert = 0;
void setup()
{
Serial.begin(9600);
pinMode(outPin, OUTPUT); // sets the digital pin as output
pinMode(inPin2, INPUT);
pinMode(inPin3, INPUT);
pinMode(inPin5, INPUT);
pinMode(inPin6, INPUT);
pinMode(inPin7, INPUT);
digitalWrite(outPin, LOW);
}

void loop()
{

digitalWrite(outPin, HIGH); // sets the pin on
delayMicroseconds(nFlash); // pauses for nFlash microseconds
digitalWrite(outPin, LOW); // sets the pin off
delayMicroseconds(nT1); // pausa da aggiungere a nDelay
delay(nDelay);

// Settaggio tempo di attesa fra i flash
// Tempo massimo 1 Sec
// Tempo minimo 2 mSec che corrispondono a 500 lampi

if (digitalRead(inPin7) == LOW)
{
if (digitalRead(inPin5) == LOW)
{
nT1++;
nPrint =1;
delay(nWait);
}

if (digitalRead(inPin6) == LOW)
{
nT1--;
nPrint =1;
delay(nWait);
}

}
else
{
if (digitalRead(inPin5) == LOW)
{
nDelay++;
nPrint =1;
delay(nWait);
}

if (digitalRead(inPin6) == LOW)
{
nDelay--;
nPrint =1;
delay(nWait);
}
}

if (nT1 > 1000) // Quando nT1 arriva a 1000 (1000uS=1mS) viene aggiunto un milliSecondo
{
nDelay++;
nT1 = 1;
}
if (nT1 < 1) // Quando nT1 arriva a 1 viene messo a 1000 (1000uS=1mS) viene tolto un milliSecondo
{
nT1 = 1000;
nDelay--;
}

if (nDelay < 1) // Quando nDelay è zero viene rimesso a 1
{
nDelay = 1;
}
if (nDelay > 1000) // Quando nDelay è 1000 (limite superiore=1S) viene rimesso a 1000
{
nDelay = 1000;
}
// Settaggio tempo di flash
// Tempo massimo 5 microSec
// Tempo minimo 100 microSec = 0,1 milliSecondi

if (digitalRead(inPin3) == LOW)
{
nFlash++;
nPrint =1;
delay(nWait);
}

if (digitalRead(inPin2) == LOW)
{
nFlash--;
nPrint =1;
delay(nWait);
}

if (nFlash < 5)
{
nFlash = 5;
}
if (nFlash > 100)
{
nFlash = 100;
}
if (nPrint == 1) // Qualsiasi tasto è stato premuto e viene visualizzata la variazione dei valori
{
if (nDelay < 200) // Quando il valore di nDelay cala troppo per evitare una eccessiva reattività dei tasti viene incrementato il tempo di attesa dopo la pressione di un tasto
{
nWait=200;
}
else
{
nWait=10;
}
nAlert=long(nDelay)*1000;
nAlert+=long(nT1);
nAlert=nAlert/long(nFlash);
Serial.print("Tempo di attesa mS->");
Serial.print(nDelay);
Serial.print(" Tempo di attesa uS->");
Serial.print(nT1);
Serial.print(" Tempo di Flash uS->");
Serial.print(nFlash);
Serial.print(" Rapporto L/B->");
Serial.print(nAlert);
Serial.print("\n");
nPrint = 0;
}
}