Sommario:

Esposimetro fotografico fai da te: 5 passaggi
Esposimetro fotografico fai da te: 5 passaggi

Video: Esposimetro fotografico fai da te: 5 passaggi

Video: Esposimetro fotografico fai da te: 5 passaggi
Video: ESPOSIMETRO ESTERNO - COME UTILIZZARLO AL MEGLIO 2024, Novembre
Anonim
Esposimetro fotografico fai da te
Esposimetro fotografico fai da te
Esposimetro fotografico fai da te
Esposimetro fotografico fai da te

Questo Instructable condivide alcune idee sulla costruzione di un semplice misuratore di luce incidente piccolo ed economico.

Poiché Instructables non mi consente di inserire i miei video, prova questo link:

www.youtube.com/embed/avQD10fd52s

L'obiettivo per me era un esposimetro per accompagnare la mia fotocamera a pellicola di medio formato Bronica ETRSi.

Cose che volevo che presentasse:

  • singolo ASA (100) perché uso quasi solo pellicola ASA 100
  • il più piccolo possibile
  • dammi solo combinazioni che la mia Bronica può riprodurre, il che significa f2.8-f22 e da 1 sec a 1/500 sec
  • nessuna caratteristica senza senso, eccetto tempi normali e valori di apertura

Cose che ho usato:

  • Luxmetro digitale Adafruit (Vishay) VEML 7700 (circa 5 $)
  • Micro controller Adafruit Trinket M0 (circa 9$)
  • Display OLED 128x32 (circa 10$)
  • un pulsante per accenderlo temporaneamente (alcuni centesimi)
  • un pezzettino di strip-board, perché cerco di non usare cavi, ma puoi certamente usare anche i cavi

Passaggio 1: calcoli di base | Lux a EV

Calcoli di base | Lux a EV
Calcoli di base | Lux a EV
Calcoli di base | Lux a EV
Calcoli di base | Lux a EV

Il sensore che ho acquistato utilizza due funzionalità che mi permettono di decidere su di esso:

  • emette valori lux a 16 bit invece di valori di luce "senza dimensioni"
  • emette i valori tramite I2C

Un esposimetro fotografico utilizza i valori di esposizione (EV) il sensore che ho acquistato utilizza i valori Lux, che è una scala completamente diversa. Quindi il primo passo è ottenere EV dai valori Lux forniti dal sensore.

Un rapido sguardo su wikipedia e puoi trovare una formula per la misurazione degli incidenti e convertire EV in Lux:

E =2,5 * 2^EV

dove E si misura in Lux.

Poiché abbiamo già ottenuto il valore Lux dal sensore e desideriamo il valore EV, dobbiamo riformare la formula, che ci porta a:

EV = log2 (E/2.5)

Quindi questo è il primo calcolo che deve essere fatto per ottenere valori fotografici dall'esposimetro.

Nella tabella di ricerca allegata puoi vedere tutti i valori che verranno utilizzati in questo esposimetro, insieme ai valori Lux ed EV corrispondenti.

Passaggio 2: presentazione dei valori sul display | Libreria Adafruit GFX

Presentazione dei valori sul display | Libreria Adafruit GFX
Presentazione dei valori sul display | Libreria Adafruit GFX
Presentazione dei valori sul display | Libreria Adafruit GFX
Presentazione dei valori sul display | Libreria Adafruit GFX
Presentazione dei valori sul display | Libreria Adafruit GFX
Presentazione dei valori sul display | Libreria Adafruit GFX

Per prima cosa ho provato a presentare i valori in interi passaggi, perché è quello su cui posso impostare la mia Bronica, ma questo mi ha portato a un problema:

Supponiamo che il sensore Lux emetta un valore esattamente di 20480, il che significherebbe che è esattamente EV 13, quindi potrei ad esempio impostare la mia fotocamera su f4 e 1/500 di secondo e sarei a posto

Quindi, supponiamo che il sensore Lux emetta 20479 Lux, 1 Lux sotto EV13, che emetterà un valore EV di 12, ma è solo un Lux lontano da EV13

Quindi impostare la mia fotocamera su f2.8 e 1/500 di secondo che sovraespone di 1 stop senza che io sappia nemmeno quanto sono vicino a EV13.

Conclusione: abbiamo bisogno di una sorta di visualizzazione analogica dei valori per vedere almeno quanto è vicino o lontano il misuratore dal passaggio EV successivo o precedente.

Dopo aver provato a utilizzare le lettere e i caratteri incorporati della libreria GFX, ho deciso di utilizzare due elementi grafici personalizzati che si sposteranno sullo schermo OLED.

Uno per i valori di apertura, uno per i tempi.

La libreria GFX utilizza valori a 8 bit per presentare la grafica, quindi ho creato un foglio xls (vedi immagine sopra).

  • ogni valore ha esattamente la stessa quantità di pixel per valore
  • tempi e aperture hanno esattamente la stessa quantità di valori per riga
  • Ho aggiunto la necessaria "B" all'inizio di ogni byte e la ", " alla fine
  • L'ho quindi esportato in un testo semplice e voilà: ho allegato il terzo grafico

I valori del tempo iniziano da 1/8 di secondo e i valori dell'apertura iniziano da f2.8

Usando la tabella di ricerca del passaggio precedente sappiamo che questo rappresenta 160 Lux o EV6.

I valori più scuri sarebbero quindi f22 e 1/500 di secondo

Sempre tramite la tabella di ricerca possiamo vedere che significa 655360 Lux o EV18

Fin qui tutto bene.

Quindi su EV6 il grafico del diaframma deve essere all'estrema sinistra, i tempi all'estrema destra e viceversa su EV18

Fase 3: Lettura e compensazione dei valori Lux | VEML7700

Lettura e compensazione dei valori Lux | VEML7700
Lettura e compensazione dei valori Lux | VEML7700
Lettura e compensazione dei valori Lux | VEML7700
Lettura e compensazione dei valori Lux | VEML7700

Scorrendo la scheda tecnica del Vishay VEML7700 che Adafruit utilizza per la sua scheda, ho trovato un avviso piuttosto inquietante:

Il sensore funziona solo in modo lineare tra 0 e 1000 Lux (!)

guarda lo screenshot con la linea arancione (lineare) e la linea blu (uscita sensore effettiva)

La luce solare (EV15) è di circa 80.000 Lux, il che significa che senza compensazione della parte non lineare del sensore sarebbe completamente inutile come esposimetro.

Vishay lo sa, quindi ha fornito ai propri clienti un altro pdf chiamato Designing the VEML7700 Into an Application.

In questo pdf puoi trovare una formula per compensare le non linearità dei sensori:

LUX_CORR = 6.0135e-13*pow(LUX, 4)-9.3924e-9*pow(LUX, 3)+8.1488e-5*pow(LUX, 2)+1.0023*LUX

Dove LUX_CORR è il valore Lux corretto e LUX è il valore emesso dal sensore.

Quelle sono le variabili che ho usato, le diverse usate nel loro foglio.

Quello che mi infastidisce un po' è che Adafruit non lo menziona con una sola parola sulla loro pagina, la loro documentazione, la loro libreria o altrove.

Quindi i primi giorni mi chiedevo perché il mio esposimetro emettesse solo 20000 Lux al massimo anche alla luce diretta del sole.

Se dai un'occhiata al grafico con la linea rossa e blu puoi capire perché: perché non può andare più in alto senza la formula di compensazione.

Ma c'è un altro indizio nascosto nella documentazione del sensore:

Questa formula di compensazione funziona solo se si imposta il sensore su 25 ms e un rapporto di guadagno di 1/8.

Questo è fatto abbastanza facilmente con la libreria Adafruits aggiungendo:

veml.setGain(VEML7700_GAIN_1_8);veml.setIntegrationTime(VEML7700_IT_25MS);

nel tuo setup vuoto()

Quindi, dopo averlo impostato su 1/8 e 25 ms e aver aggiunto la formula di compensazione, è possibile misurare fino a 120000 lux, abbastanza per coprire la luce solare a 80-100k Lux

Passaggio 4: Arduino/codice C

Poiché dipende dal display utilizzato e dal controller preferito, non entrerò troppo nei dettagli, solo alcuni pensieri e suggerimenti da aggiungere, specialmente quando si utilizzano le librerie Adafruit e l'OLED 128x32 px:

nella configurazione del vuoto:

ho impostato la parte della libreria VEML su:

veml.setGain(VEML7700_GAIN_1_8);

veml.setIntegrationTime(VEML7700_IT_25MS);

veml.setLowThreshold(10000);

veml.setHighThreshold(20000);

veml.interruptEnable(true);

nel ciclo vuoto:

assicurati di aggiungere la compensazione:

int LUX_CORR = 6.0135e-13*pow(LUX, 4)-9.3924e-9*pow(LUX, 3)+8.1488e-5*pow(LUX, 2)+1.0023*LUX;

per ottenere veicoli elettrici da Lux usa questa riga:

float EV = log2((LUX_CORR/2.5));

spostare le bitmap

per assicurarti che le bitmap si spostino solo quando i valori sono compresi tra 160Lux e 655360Lux come indicato in un passaggio precedente, avvolgilo in una clausola if come questa:

if (LUX_CORR > 159 && LUX_CORR <655361)

Successivamente dobbiamo mappare i valori EV sulle coordinate, poiché l'intervallo degli EV sono a due cifre e vogliamo spostarli dall'esterno del display su 128 px sull'intero display, abbiamo bisogno di valori più grandi.

Poiché abbiamo già ottenuto un numero float, lo moltiplichiamo per 100 e usiamo quell'intero per mappare le coordinate

int EV_DSPL = EV*100;

e:

TIME = map(EV_DSPL, 600, 1900, -260, 39);APERTURE = map(EV_DSPL, 600, 1900, 39, -260);

Come puoi vedere nel mio caso la posizione minima della bitmap sarebbe -260px e la massima sarebbe 39px

Quello che si può vedere anche qui è che ho cambiato le coordinate in modo che le due bitmap si muovano nella direzione opposta

Quindi dobbiamo spostare le bitmap in base alle coordinate di:

display.drawBitmap((TIME), (0), TIMES_bmp, 352, 16, 1);display.drawBitmap((APERTURE), (15), APERTURES_bmp, 352, 16, 1);

E questo è tutto ciò che deve essere fatto

Come bonus, visualizzo direttamente i valori EV e Lux quando il sensore emette valori inferiori a 160 Lux, solo perché volevo vedere cose durante il test.

Passaggio 5: metterlo insieme

Metterlo insieme
Metterlo insieme
Metterlo insieme
Metterlo insieme

Poiché sia il display che il sensore utilizzano I2C per comunicare, costruire l'hardware effettivo è il più semplice possibile.

Basta collegare le linee Data, Clock ground e 3V con Arduino e sei pronto per partire.

Ho aggiunto un grafico come l'ho fatto con una stripboard, ma come detto prima puoi usare i cavi o persino costruire un'ala per questo, tutto dipende dal controller e dal display che usi.

Sulla mia grafica, i punti bianchi dovrebbero essere collegati al display e al sensore e i punti gialli si collegano al Trinket.

L'unica eccezione sarebbe il pin dati della linea I2C che si collega al display, quel pin si collega anche al pin dati Trinkets.

Ho scelto di non utilizzare un interruttore di accensione/spegnimento, ma di utilizzare invece un pulsante e due pile a bottone da 3V per accenderlo temporaneamente finché premo il pulsante. Si accende in meno di 1/10 di secondo, quindi è abbastanza veloce da permettermi di risparmiare un pulsante e rimpicciolirlo.

Consigliato: