Taula de continguts:

Mesurador fotogràfic de bricolatge: 5 passos
Mesurador fotogràfic de bricolatge: 5 passos

Vídeo: Mesurador fotogràfic de bricolatge: 5 passos

Vídeo: Mesurador fotogràfic de bricolatge: 5 passos
Vídeo: Беслан. Помни / Beslan. Remember (english & español subs) 2024, De novembre
Anonim
Mesurador fotogràfic de bricolatge
Mesurador fotogràfic de bricolatge
Mesurador fotogràfic de bricolatge
Mesurador fotogràfic de bricolatge

Aquesta instrucció comparteix algunes idees sobre la construcció d’un mesurador de llum incident senzill, petit i barat.

Com que Instructables no em permet inserir els meus propis vídeos, proveu aquest enllaç:

www.youtube.com/embed/avQD10fd52s

L’objectiu per a mi era un mesurador de llum per acompanyar la meva càmera de cinema de format mitjà Bronica ETRSi.

Coses que volia que figuressin:

  • sola ASA (100) perquè gairebé només faig servir la pel·lícula ASA 100
  • el més petit possible
  • només doneu-me combinacions que la meva Bronica pugui reproduir, cosa que significa f2.8-f22 i 1 segons a 1/500 segons
  • sense funcions de disbarats, excepte els temps normals i els valors d'obertura

Coses que he utilitzat:

  • Adafruit (Vishay) Lux-meter digital VEML 7700 (al voltant de 5 $)
  • Microcontrolador Adafruit Trinket M0 (al voltant de 9 $)
  • Pantalla OLED de 128x32 (al voltant de 10 $)
  • un polsador per engegar-lo temporalment (alguns cèntims)
  • un petit tros de tauler de tires, perquè intento no utilitzar cables, però segur que també els podeu utilitzar

Pas 1: càlculs bàsics | Lux a EV

Càlculs bàsics | Lux a EV
Càlculs bàsics | Lux a EV
Càlculs bàsics | Lux a EV
Càlculs bàsics | Lux a EV

El sensor que he comprat fa servir dues funcions que em permeten decidir-me:

  • emet valors de lux de 16 bits en lloc de valors de llum "sense dimensions"
  • emet els valors mitjançant I2C

Un mesurador fotogràfic utilitza Valors d’exposició (EV), el sensor que he comprat utilitza valors Lux, que és una escala totalment diferent. Per tant, el primer pas és obtenir EVs a partir dels valors Lux proporcionats pel sensor.

Un cop d'ull ràpid a la viquipèdia i podeu trobar una fórmula per mesurar incidents i convertir EV a Lux:

E = 2,5 * 2 ^ EV

on E es mesura en lux.

Com que ja hem obtingut el valor Lux del sensor i volem el valor EV, hem de tornar a formar la fórmula, que ens porta a:

EV = log2 (E / 2.5)

Per tant, aquest és el primer càlcul que s’ha de fer per treure valors fotogràfics del mesurador de llum.

A la taula de cerca adjunta podeu veure tots els valors que s’utilitzaran en aquest mesurador de llum, juntament amb els valors Lux i EV d’acord.

Pas 2: Presentació dels valors a la pantalla | Biblioteca AdFruit GFX

Presentació dels valors a la pantalla | Biblioteca AdFruit GFX
Presentació dels valors a la pantalla | Biblioteca AdFruit GFX
Presentació dels valors a la pantalla | Biblioteca AdFruit GFX
Presentació dels valors a la pantalla | Biblioteca AdFruit GFX
Presentació dels valors a la pantalla | Biblioteca AdFruit GFX
Presentació dels valors a la pantalla | Biblioteca AdFruit GFX

Primer vaig intentar presentar els valors en passos sencers, perquè això és el que puc configurar la meva Bronica, però això em porta a un problema:

Suposem que el sensor Lux produeix un valor exactament de 20480, això significaria que és exactament el seu EV 13, de manera que podria, per exemple, posar la meva càmera en f4 i 1/500 de segon i estaria bé

A continuació, suposem que el sensor Lux produiria 20479 Lux, 1 Lux en EV13, que produiria un valor EV de 12, però és només un Lux de EV13

Per tant, posaria la meva càmera a f2.8 i 1/500 de segon, la qual cosa sobreexposaria una parada sense que jo sapigués fins a quin punt estava a prop de EV13.

Conclusió: necessitem algun tipus de visualització analògica dels valors per, almenys, veure a quina distància o distància es troba el mesurador del pas EV següent o anterior.

Després d'intentar utilitzar les lletres i el tipus de lletra incorporats de la biblioteca GFX, vaig decidir utilitzar dos gràfics personalitzats que es desplaçaran per la pantalla OLED.

Un per als valors d'obertura, un per als temps.

La biblioteca GFX utilitza valors de 8 bits per presentar gràfics, de manera que he fet un full xls (vegeu la imatge superior).

  • cada valor té exactament la mateixa quantitat de píxels per valor
  • els temps i les obertures tenen exactament la mateixa quantitat de valors per fila
  • He afegit el necessari "B" al principi de cada byte i el "," al final
  • Aleshores el vaig exportar a un text pla i voilà: tinc adjunt el tercer gràfic

Els valors de temps comencen un 1/8 de segon i els valors d'obertura comencen per f2.8

Utilitzant la taula de cerca del pas anterior sabem que representa 160 Lux o EV6.

Els valors més foscos serien llavors f22 i 1/500 de segon

De nou a través de la taula de cerca, podem veure que significa 655360 Lux o EV18

Fins ara, tot bé.

Així doncs, a EV6, el gràfic d'obertura ha de situar-se a l'extrem esquerre, els temps a l'extrema dreta i viceversa a EV18.

Pas 3: Lectura i compensació dels valors Lux VEML7700

Lectura i compensació dels valors Lux VEML7700
Lectura i compensació dels valors Lux VEML7700
Lectura i compensació dels valors Lux VEML7700
Lectura i compensació dels valors Lux VEML7700

Mentre es desplaçava pel full de dades del Vishay VEML7700 que Adafruit utilitza per al seu tauler, he trobat un avís força inquietant:

El sensor només funciona linealment entre 0 i 1000Lux (!)

vegeu la captura de pantalla amb la línia taronja (lineal) i la línia blava (sortida real del sensor)

La llum del sol (EV15) ronda els 80.000 lux, el que significa que sense compensació de la part no lineal del sensor seria inútil com a mesurador de llum.

Vishay ho sap, de manera que van proporcionar als seus clients un altre pdf anomenat Dissenyar el VEML7700 en una aplicació.

En aquest pdf podeu trobar una fórmula per compensar la no linealitat dels sensors:

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

On LUX_CORR és el valor Lux corregit i LUX és el valor que emet el sensor.

Aquestes són les variables que he fet servir, les diferents que he utilitzat al seu full.

El que em molesta una mica és que Adafruit no ho menciona amb una sola paraula a la seva pàgina, a la seva documentació, a la seva biblioteca o a qualsevol altre lloc.

Així doncs, els primers dies em preguntava per què el meu mesurador de llum només emet 20.000 Lux màxim fins i tot amb llum solar directa.

Si mireu el gràfic amb la línia vermella i blava podeu veure per què: perquè no pot anar més amunt sense la fórmula de compensació.

Però hi ha un altre indici amagat a la documentació del sensor:

Aquesta fórmula de compensació només funciona si configureu el sensor a 25 ms i una proporció de guany de 1/8.

Això es fa fàcilment amb la biblioteca d'Adafruits afegint:

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

a la configuració buida ()

Per tant, després d’establir-lo a 1/8 i 25 ms i afegir la fórmula de compensació, podeu mesurar fins a 120000 lux, suficientment per cobrir la llum solar de 80-100k Lux

Pas 4: Arduino / C-code

Com que depèn de la pantalla que utilitzeu i del controlador preferit, no aprofundiré en els detalls, només cal afegir algunes idees i suggeriments, sobretot quan s'utilitzen les biblioteques Adafruit i el OLED de 128x32 px:

a la configuració buida:

He configurat la part de la biblioteca VEML en:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (true);

al bucle buit:

assegureu-vos d'afegir la compensació:

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 obtenir vehicles elèctrics de Lux, utilitzeu aquesta línia:

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

movent els mapes de bits

per assegurar-vos que els mapes de bits només es mouen quan els valors es troben entre 160Lux i 655360Lux tal com es va indicar en un pas anterior, emboliqueu-lo en una clàusula if així:

if (LUX_CORR> 159 && LUX_CORR <655361)

A continuació, hem de mapar els valors EV a coordenades, ja que el rang dels EVs són de dos dígits i els volem moure des de la pantalla més de 128 px a tota la pantalla, necessitem valors més grans.

Com que ja tenim un número flotant, només multiplicem per 100 i fem servir aquest nombre enter per assignar les coordenades

int EV_DSPL = EV * 100;

i:

TEMPS = mapa (EV_DSPL, 600, 1900, -260, 39); APERTURE = mapa (EV_DSPL, 600, 1900, 39, -260);

Com podeu veure en el meu cas, la posició mínima del mapa de bits seria de -260 px i la màxima seria de 39 px

El que també es pot veure aquí és que vaig canviar les coordenades de manera que els dos mapes de bits es moguessin en la direcció oposada

A continuació, hem de moure els mapes de bits segons les coordenades:

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

I això és tot el que cal fer

Com a bonificació, mostro valors EV i Lux rectes quan el sensor emet valors inferiors a 160 Lux, només perquè volia veure coses en provar-lo.

Pas 5: ajuntar-lo

Posant-ho en comú
Posant-ho en comú
Posant-ho en comú
Posant-ho en comú

Tant la pantalla com el sensor utilitzen I2C per comunicar-se, la construcció del maquinari real és tan senzill com pot ser.

Només cal que connecteu les dades, la terra del rellotge i les línies de 3V amb l’Arduino i estareu a punt.

Vaig afegir un gràfic de com ho vaig fer amb un tauler de fusta, però, com es va dir anteriorment, podeu utilitzar cables o fins i tot construir-ne una ala, tot depèn del controlador i de la pantalla que utilitzeu.

Al meu gràfic, se suposa que els punts blancs estan connectats a la pantalla i al sensor i que els punts grocs es connecten al Trinket.

L'única excepció seria el pin de dades de la línia I2C que es connecta a la pantalla, aquest pin també es connecta al pin de dades Trinkets.

Vaig optar per no utilitzar un interruptor d’encès / apagat, sinó utilitzar un polsador i dues cel·les de botó de 3V per engegar-lo temporalment sempre que premés el botó. S’encén en menys d’un 1/10 de segon perquè sigui prou ràpid com per poder estalviar un botó i fer-lo més petit.

Recomanat: