Kazalo:

Fotografski svetlobni meter DIY: 5 korakov
Fotografski svetlobni meter DIY: 5 korakov

Video: Fotografski svetlobni meter DIY: 5 korakov

Video: Fotografski svetlobni meter DIY: 5 korakov
Video: Установка маяков под штукатурку. Углы 90 градусов. #12 2024, November
Anonim
Fotografski svetlobni meter, naredi sam
Fotografski svetlobni meter, naredi sam
Fotografski svetlobni meter, naredi sam
Fotografski svetlobni meter, naredi sam

Ta Instructable deli nekaj idej o izdelavi preprostega majhnega in poceni merilnika svetlobe.

Ker mi Instructables ne dovoljuje vstavljanja lastnih videoposnetkov, poskusite s to povezavo:

www.youtube.com/embed/avQD10fd52s

Zame je bil cilj merilnik svetlobe, ki je spremljal mojo filmsko kamero Bronica ETRSi srednjega formata.

Stvari, ki sem jih želel predstaviti:

  • enojni ASA (100), ker skoraj uporabljam samo film ASA 100
  • čim manjši
  • daj mi samo kombinacije, ki jih lahko reproducira moja Bronica, kar pomeni f2.8-f22 in 1sec do 1/500th sec
  • brez neumnosti, razen navadnih časov in vrednosti zaslonke

Stvari, ki sem jih uporabil:

  • Adafruit (Vishay) digitalni Lux-meter VEML 7700 (približno 5 USD)
  • Mikro krmilnik Adafruit Trinket M0 (okoli 9 USD)
  • 128 x 32 OLED zaslon (približno 10 USD)
  • gumb za začasno vklop (nekaj centov)
  • majhen kos traku, ker ne uporabljam kablov, vsekakor pa lahko uporabite tudi kable

1. korak: osnovni izračuni | Lux do EV

Osnovni izračuni | Lux do EV
Osnovni izračuni | Lux do EV
Osnovni izračuni | Lux do EV
Osnovni izračuni | Lux do EV

Senzor, ki sem ga kupil, uporablja dve funkciji, na podlagi katerih se lahko odločim zanj:

  • oddaja 16-bitne luksne vrednosti namesto svetlobnih vrednosti "brez dimenzij"
  • oddaja vrednosti prek I2C

Fotografski merilnik svetlobe uporablja vrednosti osvetlitve (EV), senzor, ki sem ga kupil, uporablja vrednosti Lux, kar je popolnoma drugačna lestvica. Prvi korak je torej pridobiti EV iz vrednosti Lux, ki jih je dal senzor.

Na kratko o wikipediji in najdete formulo za merjenje incidentov in pretvorite EV v Lux:

E = 2,5 * 2^EV

kjer se E meri v Luxih.

Ker smo od senzorja že dobili vrednost Lux in želimo vrednost EV, moramo ponovno oblikovati formulo, ki nas pripelje do:

EV = log2 (E/2,5)

To je torej prvi izračun, ki ga je treba narediti, da dobimo fotografske vrednosti iz merilnika svetlobe.

V priloženi iskalni tabeli si lahko ogledate vse vrednosti, ki bodo uporabljene v tem merilniku svetlobe, skupaj z ustreznimi vrednostmi Lux in EV.

2. korak: Predstavljanje vrednosti na zaslonu | Knjižnica Adafruit GFX

Predstavljanje vrednosti na zaslonu | Knjižnica Adafruit GFX
Predstavljanje vrednosti na zaslonu | Knjižnica Adafruit GFX
Predstavljanje vrednosti na zaslonu | Knjižnica Adafruit GFX
Predstavljanje vrednosti na zaslonu | Knjižnica Adafruit GFX
Predstavljanje vrednosti na zaslonu | Knjižnica Adafruit GFX
Predstavljanje vrednosti na zaslonu | Knjižnica Adafruit GFX

Vrednosti sem najprej poskušal predstaviti v celih korakih, ker na to lahko nastavim svojo Bronico, vendar me je to pripeljalo do težave:

Predpostavimo, da ima senzor Lux vrednost natančno 20480, kar bi pomenilo natančno EV 13, zato bi lahko na primer nastavil fotoaparat na f4 in 1/500 sekunde in bi bilo dobro, da gremo

Nato predpostavimo, da bo senzor Lux oddajal 20479 Lux, 1 Lux pod EV13, kar bi dalo vrednost EV 12, vendar je le Lux oddaljeno od EV13

Tako bi fotoaparat nastavil na f2.8 in 1/500 -to sekundo, kar bi preeksponiralo 1 stop, ne da bi sploh vedel, kako blizu sem EV13.

Zaključek: potrebujemo nekakšen analogni prikaz vrednosti, da bi vsaj videli, kako blizu ali daleč je merilnik od naslednjega ali prejšnjega koraka EV.

Ko sem poskušal uporabiti vgrajene črke in pisavo knjižnice GFX, sem se odločil za uporabo dveh grafik po meri, ki se bodo premikale po zaslonu OLED.

Ena za vrednosti zaslonke, ena za čas.

Knjižnica GFX uporablja 8 -bitne vrednosti za predstavitev grafike, zato sem naredil list xls (glej sliko zgoraj).

  • vsaka vrednost ima enako vrednost slikovnih pik na vrednost
  • časi in odprtine imajo popolnoma enako vrednost na vrstico
  • Na začetku vsakega bajta sem dodal "B" in na koncu ","
  • Nato sem ga izvozila v navadno besedilo in voila: priložila sem tretjo grafiko

Vrednosti časa se začnejo za 1/8 sekunde in vrednosti zaslonke se začnejo pri f2,8

Z iskalno tabelo v prejšnjem koraku vemo, da predstavlja 160 Lux ali EV6.

Najtemnejše vrednosti bi bile potem f22 in 1/500 -a sekunde

Tudi po iskalni tabeli lahko vidimo, da to pomeni 655360 Lux ali EV18

Zaenkrat dobro.

Tako mora biti na EV6 grafika zaslonke skrajno levo, časi skrajno desno in obratno na EV18

3. korak: branje in kompenzacija vrednosti Lux | VEML7700

Branje in kompenzacija vrednosti Lux | VEML7700
Branje in kompenzacija vrednosti Lux | VEML7700
Branje in kompenzacija vrednosti Lux | VEML7700
Branje in kompenzacija vrednosti Lux | VEML7700

Med listanjem po podatkovnem listu Vishay VEML7700 Adafruit, ki ga uporablja za svojo ploščo, sem našel precej moteče obvestilo:

Senzor deluje le linearno med 0 in 1000Lux (!)

oglejte si posnetek zaslona z oranžno (linearno) črto in modro (dejanski izhod senzorja)

Sončna svetloba (EV15) znaša okoli 80.000 Lux, kar pomeni, da bi bil brez kompenzacije nelinearnega dela senzorja popolnoma neuporaben kot merilnik svetlobe.

Vishay to ve, zato so svojim strankam priskrbeli še en pdf, imenovan Oblikovanje VEML7700 v aplikacijo.

V tem pdf-ju najdete formulo za kompenzacijo nelinearnosti senzorjev:

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

Kjer je LUX_CORR popravljena vrednost Lux in LUX vrednost, ki jo senzor odda.

To so spremenljivke, ki sem jih uporabil, različne so bile uporabljene na njihovem listu.

Malo me moti, da Adafruit tega ne omenja z eno samo besedo na svoji strani, v dokumentaciji, knjižnici ali kje drugje.

Zato sem se prvih nekaj dni spraševal, zakaj svetlobni meter oddaja največ 20000 Lux tudi pri neposredni sončni svetlobi.

Če pogledate graf z rdečo in modro črto, lahko vidite zakaj: ker brez kompenzacijske formule ne more iti višje.

Toda v dokumentaciji senzorja je skrit še en namig:

Ta izravnalna formula deluje le, če senzor nastavite na 25 ms in razmerje ojačanja 1/8.

S knjižnico Adafruits je to precej enostavno, tako da dodate:

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

v nastavitvi void ()

Po nastavitvi na 1/8 in 25ms in dodajanju izravnalne formule lahko izmerite do 120000 luksov, kar je dovolj za pokrivanje sončne svetlobe pri 80-100k Lux

4. korak: Arduino / C-koda

Ker je odvisno od vašega uporabljenega zaslona in želenega krmilnika, se ne bom preveč spuščal v podrobnosti, dodajam le nekaj misli in namigov, zlasti pri uporabi knjižnic Adafruit in OLED velikosti 128x32 px:

v nastavitvi void:

nastavil sem del knjižnice VEML na:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (true);

v zanki praznine:

obvezno dodajte odškodnino:

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

Če želite dobiti električna vozila iz Luxa, uporabite to vrstico:

plavajoči EV = log2 ((LUX_CORR/2,5));

premikanje bitnih slik

da se prepričate, da se bitne slike premikajo le, če so vrednosti med 160Lux in 655360Lux, kot je navedeno v prejšnjem koraku, ga zavijte v stavek if, kot je ta:

če (LUX_CORR> 159 && LUX_CORR <655361)

Nato moramo preslikati vrednosti EV v koordinate, saj je obseg EV dvomestne številke in jih želimo premakniti z zaslona nad 128 slikovnih pik po celotnem zaslonu, potrebujemo večje vrednosti.

Ker smo že dobili plavajoče število, ga samo pomnožimo s 100 in uporabimo to celo število za preslikavo koordinat

int EV_DSPL = EV*100;

in:

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

Kot lahko vidite v mojem primeru bi bil najmanjši položaj bitne slike -260px, največji pa 39px

Tukaj je mogoče videti tudi to, da sem spremenil koordinate, tako da se dve bitni sliki premikata v nasprotni smeri

Nato moramo bitne slike premakniti glede na koordinate tako:

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

In to je vse, kar je treba narediti

Kot bonus prikazujem naravne vrednosti EV in Lux, ko senzor odda vrednosti pod 160Lux, samo zato, ker sem želel videti stvari pri testiranju.

5. korak: Sestavite skupaj

Sestavljanje skupaj
Sestavljanje skupaj
Sestavljanje skupaj
Sestavljanje skupaj

Ker zaslon in senzor za komunikacijo uporabljata I2C, je izdelava dejanske strojne opreme čim bolj preprosta.

Samo povežite podatke, ozemljitveno uro in 3V linije z Arduinom in pripravljeni ste.

Dodal sem grafiko, kako sem to naredil s trakom, vendar, kot je bilo že rečeno, lahko uporabite kable ali celo zgradite krilo, vse je odvisno od tega, kateri krmilnik in zaslon uporabljate.

Na moji sliki naj bi bile bele pike povezane z zaslonom in senzorjem, rumene pa z Trinket.

Edina izjema bi bil podatkovni zatič linije I2C, ki se poveže z zaslonom, ta pin pa se poveže tudi s podatkovnim zatičem Trinkets.

Odločil sem se, da ne bom uporabljal stikala za vklop/izklop, ampak namesto tega uporabim gumb in dve 3V gumbni celici, da ga začasno vklopim, dokler pritisnem gumb. Vklopi se v manj kot 1/10 sekunde, tako da je dovolj hitro, da si privoščim gumb in ga zmanjšam.

Priporočena: