Indholdsfortegnelse:

DIY Photographic Lightmeter: 5 trin
DIY Photographic Lightmeter: 5 trin

Video: DIY Photographic Lightmeter: 5 trin

Video: DIY Photographic Lightmeter: 5 trin
Video: The best way for digitizing your negatives 🎞️ 2024, November
Anonim
DIY fotografisk lysmåler
DIY fotografisk lysmåler
DIY fotografisk lysmåler
DIY fotografisk lysmåler

Denne instruktør deler nogle ideer om at bygge et simpelt lille og billigt hændelseslysmeter.

Da Instructables ikke vil lade mig indsætte mine egne videoer, kan du prøve dette link:

www.youtube.com/embed/avQD10fd52s

Målet for mig var en lysmåler, der skulle ledsage mit Bronica ETRSi mediumformat filmkamera.

Ting, jeg ville have, at den skulle indeholde:

  • single ASA (100), fordi jeg næsten kun bruger ASA 100 film
  • så lille som muligt
  • giv mig kun kombinationer, som min Bronica kan gengive, hvilket betyder f2.8-f22 og 1sek til 1/500 sek.
  • ingen nonsensfunktioner, undtagen almindelige tider og blændeværdier

Ting jeg brugte:

  • Adafruit (Vishay) VEML 7700 digital Lux-meter (ca. 5 $)
  • Adafruit Trinket M0 mikrokontroller (ca. 9 $)
  • 128x32 OLED -skærm (ca. 10 $)
  • en trykknap for midlertidigt at tænde den (nogle øre)
  • et lille stykke strip-board, fordi jeg forsøger ikke at bruge kabler, men du kan bestemt også bruge kabler

Trin 1: Grundlæggende beregninger | Lux til EV

Grundlæggende beregninger | Lux til EV
Grundlæggende beregninger | Lux til EV
Grundlæggende beregninger | Lux til EV
Grundlæggende beregninger | Lux til EV

Sensoren, jeg købte, bruger to funktioner, der lader mig beslutte mig for det:

  • udsender 16bit lux værdier i stedet for "dimensionsløse" lysværdier
  • udsender værdierne via I2C

En fotografisk lysmåler bruger eksponeringsværdier (EV) den sensor, jeg købte, bruger Lux -værdier, hvilket er en helt anden skala. Så det første trin er at få elbiler fra Lux -værdierne, forudsat at sensoren er.

Et hurtigt indblik i wikipedia, og du kan finde en formel for hændelsesmåling og konvertere EV til Lux:

E = 2,5 * 2^EV

hvor E måles i Lux.

Da vi allerede fik Lux-værdien fra sensoren og ønsker EV-værdien, er vi nødt til at omforme formlen, som får os til at:

EV = log2 (E/2.5)

Så det er den første beregning, der skal udføres for at få fotografiske værdier ud af lysmåleren.

I den vedlagte opslagstabel kan du se alle værdier, der vil blive brugt i dette lysmåler, sammen med de tilsvarende Lux- og EV -værdier.

Trin 2: Præsentation af værdierne på displayet | Adafruit GFX -bibliotek

Præsentation af værdierne på displayet | Adafruit GFX -bibliotek
Præsentation af værdierne på displayet | Adafruit GFX -bibliotek
Præsentation af værdierne på displayet | Adafruit GFX -bibliotek
Præsentation af værdierne på displayet | Adafruit GFX -bibliotek
Præsentation af værdierne på displayet | Adafruit GFX -bibliotek
Præsentation af værdierne på displayet | Adafruit GFX -bibliotek

Jeg forsøgte først at præsentere værdierne i hele trin, for det er hvad jeg kan indstille min Bronica til, men det førte mig til et problem:

Lad os antage, at Lux -sensoren udsender en værdi på nøjagtigt 20480, det ville betyde dens nøjagtige EV 13, så jeg for eksempel kunne sætte mit kamera på f4 og 1/500 sekund og ville være godt at gå

Lad os derefter antage, at Lux -sensoren udsender 20479 Lux, 1 Lux under EV13, der ville udsende en EV -værdi på 12, men den er bare en Lux væk fra EV13

Så jeg ville sætte mit kamera på f2.8 og 1/500 sekund, hvilket ville overeksponere 1 stop uden at jeg selv vidste hvor tæt jeg var på EV13.

Konklusion: vi har brug for en slags analog visning af værdierne for i det mindste at se, hvor tæt eller langt væk måleren er fra det næste eller forrige EV -trin.

Efter at have forsøgt at bruge de indbyggede bogstaver og skrifttype i GFX -biblioteket besluttede jeg at bruge to brugerdefinerede grafikker, der vil bevæge sig hen over OLED -skærmen.

En for blændeværdierne, en for tiden.

GFX -biblioteket bruger 8bit -værdier til at præsentere grafik, så jeg lavede et xls -ark (se billedet ovenfor).

  • hver værdi har den nøjagtig samme mængde pixels pr. værdi
  • tider og åbninger har nøjagtig den samme mængde værdier pr. række
  • Jeg tilføjede det nødvendige "B" i begyndelsen af hver byte og "," i slutningen
  • Jeg eksporterede det derefter til en ren tekst og voila: jeg fik den tredje grafik vedhæftet

Tidsværdier starter med 1/8 sekund og blændeværdier starter med f2.8

Ved hjælp af opslagstabellen i det foregående trin ved vi, at dette repræsenterer 160 Lux eller EV6.

De mørkeste værdier ville derefter være f22 og 1/500 sekund

Igen via opslagstabellen kan vi se, at det betyder 655360 Lux eller EV18

Så langt så godt.

Så på EV6 skal blændegrafikken være yderst til venstre, tiderne yderst til højre og omvendt på EV18

Trin 3: Læsning og kompensation af Lux -værdier | VEML7700

Aflæsning og kompensation af Lux -værdier | VEML7700
Aflæsning og kompensation af Lux -værdier | VEML7700
Aflæsning og kompensation af Lux -værdier | VEML7700
Aflæsning og kompensation af Lux -værdier | VEML7700

Mens jeg rullede gennem databladet til Vishay VEML7700 Adafruit -brugerne til deres bord, fandt jeg en temmelig foruroligende meddelelse:

Sensoren fungerer kun lineært mellem 0 og 1000Lux (!)

se skærmbilledet med den orange (lineære) linje og den blå (faktiske sensoroutput) linje

Sollys (EV15) er omkring 80.000 Lux, hvilket betyder, at uden kompensation for den ikke-lineære del af sensoren ville det være fuldstændig ubrugeligt som en lysmåler.

Vishay ved det, så de gav deres kunder en anden pdf kaldet Designing the VEML7700 Into an Application.

I denne pdf kan du finde en formel til at kompensere sensorernes ikke-linearitet:

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

Hvor LUX_CORR er den korrigerede Lux-værdi og LUX er værdien, sensoren udsender.

Det er de variabler, jeg brugte, de brugte forskellige i deres ark.

Det, der irriterer mig lidt, er, at Adafruit ikke nævner dette med et enkelt ord på deres side, deres dokumentation, deres bibliotek eller andre steder.

Så de første dage spekulerede jeg på, hvorfor mit lysmåler kun udsender 20000 Lux maksimum selv i direkte sollys.

Hvis du tager et kig på grafen med den røde og blå linje, kan du se hvorfor: fordi det ikke kan gå højere uden kompensationsformlen.

Men der er et andet tip gemt i dokumentationen til sensoren:

Denne kompensationsformel fungerer kun, hvis du indstiller sensoren til 25 ms og et forstærkningsforhold på 1/8.

Det gøres ret let med Adafruits bibliotek ved at tilføje:

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

i din tomrumsopsætning ()

Så efter at have indstillet den til 1/8 og 25 ms og tilføjet kompensationsformlen kan du måle op til 120000 lux, nok til at dække sollys ved 80-100k Lux

Trin 4: Arduino / C-kode

Da det afhænger af din brugte skærm og foretrukne controller, vil jeg ikke gå for meget i detaljer, kun et par tanker og tip at tilføje, især når du bruger Adafruit -bibliotekerne og 128x32 px OLED:

i tomrumsopsætningen:

jeg indstillede VEML biblioteksdelen til:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (true);

i tomrumsløkken:

Sørg for at tilføje kompensationen:

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

for at få elbiler fra Lux, brug denne linje:

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

flytte bitmaps

for at sikre, at bitmaps kun bevæger sig, når værdier er mellem 160Lux og 655360Lux som angivet i et tidligere trin, skal du pakke det ind i en if -klausul som den:

hvis (LUX_CORR> 159 && LUX_CORR <655361)

Dernæst skal vi kortlægge EV -værdierne til koordinater, da EV'ernes rækkevidde er tocifrede, og vi vil flytte dem fra ud af displayet over 128px på tværs af hele displayet, har vi brug for større værdier.

Da vi allerede har et float -tal, multiplicerer vi det bare med 100 og bruger det helt tal til at kortlægge koordinaterne

int EV_DSPL = EV*100;

og:

TID = kort (EV_DSPL, 600, 1900, -260, 39); APERTURE = kort (EV_DSPL, 600, 1900, 39, -260);

Som du kan se i mit tilfælde, ville bitmapets minimumsposition være -260px, og maksimum ville være 39px

Det, der også kan ses her, er, at jeg skiftede koordinaterne, så de to bitmaps bevæger sig i den modsatte retning

Dernæst skal vi flytte bitmaps i henhold til koordinaterne ved at:

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

Og det er alt, hvad der skal gøres

Som en bonus viser jeg lige EV- og Lux -værdier, når sensoren udsender værdier under 160Lux, bare fordi jeg ville se ting, når jeg testede det.

Trin 5: Sæt det sammen

At sætte det sammen
At sætte det sammen
At sætte det sammen
At sætte det sammen

Da både displayet og sensoren bruger I2C til at kommunikere, er det at bygge den egentlige hardware så enkelt som det overhovedet kan være.

Tilslut bare data-, urjord- og 3V -linjer med Arduino, og du er klar til at gå.

Jeg tilføjede en grafik, hvordan jeg gjorde det med en stripboard, men som det er sagt tidligere, kan du bruge kabler eller endda bygge en vinge til det, alt afhænger af hvilken controller og skærm du bruger.

På min grafik skal de hvide prikker tilsluttes displayet og sensoren, og de gule prikker forbinder til Trinket.

Den eneste undtagelse ville være datapinden på I2C-linjen, der opretter forbindelse til displayet, den pin også forbinder til Trinkets-datapinden.

Jeg valgte ikke at bruge en tænd/sluk -kontakt, men i stedet bruge en trykknap og to 3V -knapceller til midlertidigt at tænde den, så længe jeg trykker på knappen. Den tændes på under 1/10 sekund, så det er hurtigt nok til, at jeg kan spare en knap og gøre den mindre.

Anbefalede: