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

Lampada Stroboscopica LED sincronizzata con il suono - Arduino uno e lo Shield Strobo Syncro.

Lampada Stroboscopica LED sincronizzata con il suono - Arduino uno e lo Shield Strobo Syncro.

Sopra è riportato lo schema del prototipo dell'amplificatore microfonico volutamente tarato per andare in clipping e dare all'uscita un'onda quadra che verrà poi inviata ad un ingresso digitale di arduino uno. La banda passante di questo amplificatore non deve eccedere la massima frequenza del segnale in ingresso che ci interessa, onde evitare di sporcare il segnale digitale in uscita. Il circuito è stato progettato per avere una grande amplificazione e non autooscillare. Il circuito funziona nel seguente modo: I diodi Led D1 e D2 costituiscono insieme alla resistenza R1 un generatore di tensione costante a circa 3,4Volt (in pratica li ho impiegati come degli zener) il condensatore C1 elimina i resigui di alternata dalla tensione che poi andrà ad alimentare attraverso R2 il microfono a condensatore Mic. Il segnale microfonico viene mandato all'ingresso invertente della prima sezione del TL082 per essere amplificato in tensione (di circa 100 volte) poi inviato tramite C5 alla seconda sezione dell'operazionale TL082. A questo punto dopo essere stato amplificato altre 60 volte tramite D3 impiegato come squadratore R9 e C9 (condensatore di speed-up) pilota con un'onda quadra il transistor BC337 che funge da traslatore di livello per pilotare un ingresso digitale di arduino uno. L'operazionale viene alimentato (o meglio sottoalimentato visto che la tensione minima di funzionamento sarebbe di 6Volt) con un'unica tensione e le resistenze R3-R4 e R6-R7 generano un potenziale di massa fittizia per permetterne il corretto funzionamento mentre i condensatori C4 e C6 stabilizzano detta tensione di riferimento.

Questo circuito è ampiamente migliorabile adattando l'amplificazione al microfono utilizzato e magari utilizzando una circuiteria più adatta a funzionare a 5Volt (ricavati dallo stesso arduino uno). Il microfono poi dovrebbe essere più direttivo per non caprate i rumori dell'ambiente che possono disturbare il corretto funzionamento.

Considerazioni sulla sincronizzazione audio del flash stroboscopico:

La massima frequenza che il circuito deve rilevare è funzione di diversi parametri. Esempio pratico: per le prove ho utilizzato una ventola di un computer che ruota a 3000 giri minuto quindi genera una frequenza di 3000/60=50Hz, tuttavia la ventola ha 7 pale quindi la frequenza risultante è 50x7=350Hz.

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.

Prototipo sincronizzatore audio per flash strobo

Prototipo del circuito sincronizzatore audio per arduino shield strobo. Prototipo del circuito sincronizzatore audio per arduino shield strobo. Visto dal fianco. Prototipo del circuito sincronizzatore audio per arduino shield strobo. Visto da sotto.

Prototipo del circuito sincronizzatore audio per arduino shield strobo.

Prototipo del circuito sincronizzatore audio per arduino shield strobo. Visto dal fianco.

Prototipo del circuito sincronizzatore audio per arduino shield strobo. Visto da sotto.

Vista d'insieme dello shield strobo innestato su arduino uno con collegato il sincronizzatore audio.

Vista d'insieme dello shield strobo innestato su arduino uno con collegato il sincronizzatore audio. Il prototipo in fase di prova ha subito svariate modifiche, cosa testimoniata dall'aspetto "caotico" del cablaggio dei componenti sul circuito millefori.

Prova del circuito fotografando una ventola in rotazione Prova del circuito fotografando una ventola in rotazione

Sopra un esempio di ripresa effettuata utilizzando lo shield strobo con il sincronizzatore audio. Le foto singole sono state unite in una sequenza. La ventola durante la ripresa ruotava a circa 3000 giri/minuto e, senza l'ausilio del flash stroboscopico era assolutamente invisibile, vista l'alta velocità di rotazione.

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 sincronizzato con microfono e tutto funziona.

/*
Programmma gestione interfaccia strobo per arduino dotato di sensore microfonico.
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;
int inPin9 = 9; // Sensore microfonico
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);
pinMode(inPin9, 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

while (digitalRead(inPin9) == HIGH) // Attende fino a che lo stato del pin9 non cambia
{
}
while (digitalRead(inPin9) == LOW) // Attende fino a che lo stato del pin9 non cambia
{
}

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

if (digitalRead(inPin6) == LOW)
{
nT1-=10;
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 = 10;
}
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;
}
}