Sadržaj:

Fotografski svjetlomjer DIY: 5 koraka
Fotografski svjetlomjer DIY: 5 koraka

Video: Fotografski svjetlomjer DIY: 5 koraka

Video: Fotografski svjetlomjer DIY: 5 koraka
Video: Kako napraviti sir u 5 koraka - Volim Sir.com 2024, Studeni
Anonim
Fotografski svjetlomjer, uradi sam
Fotografski svjetlomjer, uradi sam
Fotografski svjetlomjer, uradi sam
Fotografski svjetlomjer, uradi sam

Ovaj Instructable dijeli neke ideje o izgradnji jednostavnog malog i jeftinog svjetlomjera.

Kako mi Instructables ne dopuštaju da umetnem vlastite videozapise, isprobajte ovu vezu:

www.youtube.com/embed/avQD10fd52s

Cilj mi je bio mjerač svjetla koji bi pratio moju kameru Bronica ETRSi za film.

Stvari koje sam htio da prikaže:

  • single ASA (100) jer skoro koristim samo ASA 100 film
  • što je moguće manji
  • daj mi samo kombinacije koje moja Bronica može reproducirati, što znači f2.8-f22 i 1sec do 1/500. sec
  • nema besmislenih značajki, osim običnog vremena i vrijednosti otvora blende

Stvari koje sam koristio:

  • Adafruit (Vishay) VEML 7700 digitalni Lux-metar (oko 5 USD)
  • Mikro kontroler Adafruit Trinket M0 (oko 9 USD)
  • 128x32 OLED zaslon (oko 10 USD)
  • gumb za privremeno uključivanje (nekoliko centi)
  • maleni komad strip-ploče, jer pokušavam ne koristiti kabele, ali svakako možete koristiti i kabele

Korak 1: 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 koji sam kupio koristi dvije značajke koje mi omogućuju da odlučim o njemu:

  • emitira 16-bitne luks vrijednosti umjesto svjetlosnih vrijednosti "bez dimenzija"
  • emitira vrijednosti putem I2C

Fotografski mjerač svjetla koristi vrijednosti ekspozicije (EV), a senzor koji sam kupio koristi vrijednosti Lux, što je potpuno druga skala. Dakle, prvi korak je dobiti EV iz vrijednosti Lux pod uvjetom da senzor.

Brzi pogled na wikipedia i možete pronaći formulu za mjerenje incidenata i pretvoriti EV u Lux:

E = 2,5 * 2^EV

gdje se E mjeri u Luksima.

Kako smo već dobili vrijednost Lux od senzora i želimo vrijednost EV, moramo ponovno oblikovati formulu koja nas dovodi do:

EV = log2 (E/2,5)

Dakle, to je prvi izračun koji se mora napraviti kako bi se fotografske vrijednosti izvukle iz svjetlomjera.

U priloženoj tablici za pretraživanje možete vidjeti sve vrijednosti koje će se koristiti u ovom svjetlomjeru, zajedno s vrijednostima Lux i EV.

Korak 2: Prikaz vrijednosti na zaslonu | Knjižnica Adafruit GFX

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

Prvo sam pokušao prikazati vrijednosti u cijelim koracima, jer na to mogu postaviti svoju Bronicu, ali to me dovelo do problema:

Pretpostavimo da Lux senzor daje vrijednost točno 20480, što bi značilo da je točno EV 13 pa bih mogao, na primjer, postaviti kameru na f4 i 1/500 dio sekunde i bilo bi dobro krenuti

Zatim, pretpostavimo da bi Lux senzor izlazio 20479 Lux, 1 Lux ispod EV13, što bi dalo vrijednost EV od 12, ali je samo Lux udaljeno od EV13

Pa bih kameru postavio na f2.8 i 1/500 dio sekunde što bi preeksponiralo 1 korak, a da nisam ni znao koliko sam blizu EV13.

Zaključak: potrebna nam je neka vrsta analognog prikaza vrijednosti kako bismo barem vidjeli koliko je mjerač blizu ili udaljen od sljedećeg ili prethodnog koraka EV.

Nakon što sam pokušao koristiti ugrađena slova i font GFX knjižnice, odlučio sam koristiti dvije prilagođene grafike koje će se kretati po OLED zaslonu.

Jedan za vrijednosti otvora blende, jedan za vremena.

Knjižnica GFX koristi 8 -bitne vrijednosti za predstavljanje grafike, pa sam napravio xls list (vidi gornju sliku).

  • svaka vrijednost ima potpuno isti broj piksela po vrijednosti
  • vremena i otvori imaju potpuno istu vrijednost po retku
  • Dodao sam potrebno "B" na početku svakog bajta i "," na kraju
  • Zatim sam ga izvezao u običan tekst i voila: u prilogu sam dobio treću grafiku

Vrijednosti vremena počinju za 1/8 sekunde, a vrijednosti otvora blende počinju za f2,8

Koristeći tablicu pretraživanja u prethodnom koraku znamo da predstavlja 160 Lux ili EV6.

Najtamnije vrijednosti tada bi bile f22 i 1/500 dio sekunde

Ponovno putem tablice za pretraživanje možemo vidjeti da to znači 655360 Lux ili EV18

Zasada je dobro.

Dakle, na EV6 grafika otvora blende mora biti krajnje lijevo, vremena krajnje desno i obrnuto na EV18

Korak 3: Očitavanje i kompenzacija vrijednosti Lux | VEML7700

Očitavanje i kompenzacija vrijednosti Lux | VEML7700
Očitavanje i kompenzacija vrijednosti Lux | VEML7700
Očitavanje i kompenzacija vrijednosti Lux | VEML7700
Očitavanje i kompenzacija vrijednosti Lux | VEML7700

Prelistavajući tehnički list Vishay VEML7700 Adafruit koji koristi za svoju ploču, našao sam prilično uznemirujuću obavijest:

Senzor radi samo linearno između 0 i 1000Lux (!)

pogledajte snimak zaslona s narančastom (linearnom) linijom i plavom (stvarni izlaz senzora) linijom

Sunčeva svjetlost (EV15) iznosi oko 80.000 luksa, što znači da bi bez kompenzacije nelinearnog dijela senzora bilo potpuno beskorisno kao mjerač svjetla.

Vishay to zna, pa su svojim klijentima dali još jedan pdf pod nazivom Dizajniranje VEML7700 u aplikaciju.

U ovom pdf-u možete pronaći formulu za kompenzaciju nelinearnosti senzora:

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

Gdje je LUX_CORR ispravljena vrijednost Lux i LUX vrijednost koju senzor daje.

To su varijable koje sam koristio, različite su se koristile u njihovom listu.

Ono što me pomalo muči je to što Adafruit to ne spominje niti jednom riječju na svojoj stranici, svojoj dokumentaciji, svojoj biblioteci ili drugdje.

Tako sam se prvih nekoliko dana pitao zašto moj svjetlomjer daje maksimalno 20000 Lux čak i na izravnoj sunčevoj svjetlosti.

Ako pogledate grafikon s crvenom i plavom linijom, možete vidjeti zašto: jer ne može ići gore bez formule kompenzacije.

No, u dokumentaciji senzora skriven je još jedan savjet:

Ova formula kompenzacije funkcionira samo ako postavite senzor na 25 ms i omjer pojačanja 1/8.

To se prilično lako postiže pomoću biblioteke Adafruits dodavanjem:

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

u postavkama void ()

Dakle, nakon što ga postavite na 1/8 i 25 ms i dodate kompenzacijsku formulu, možete izmjeriti do 120000 luksa, dovoljno da pokrije sunčevu svjetlost pri 80-100 000 luksa

Korak 4: Arduino / C-kod

Budući da ovisi o vašem zaslonu koji koristite i željenom kontroleru, neću previše ulaziti u detalje, samo nekoliko misli i savjeta za dodati, posebno kada koristite biblioteke Adafruit i OLED 128x32 px:

u postavci void:

postavio sam VEML library-part na:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (true);

u petlji void:

svakako dodajte nadoknadu:

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

za dobivanje EV -ova od Lux -a koristite ovu liniju:

plutajući EV = log2 ((LUX_CORR/2,5));

pomicanje bitmapa

kako biste bili sigurni da se bitmape pomiču samo kada su vrijednosti između 160Lux i 655360Lux kako je navedeno u prethodnom koraku, zamotajte je u klauzulu if ovako:

ako (LUX_CORR> 159 && LUX_CORR <655361)

Zatim moramo preslikati vrijednosti EV u koordinate, budući da je raspon EV dvoznamenkast i želimo ih premjestiti s zaslona preko 128 piksela po cijelom zaslonu, trebaju nam veće vrijednosti.

Kako smo već dobili float broj, samo ga pomnožimo sa 100 i koristimo taj cijeli broj za preslikavanje koordinata

int EV_DSPL = EV*100;

i:

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

Kao što vidite u mom slučaju minimalna pozicija bitmape bila bi -260px, a maksimalna 39px

Ono što se također može vidjeti ovdje je da sam promijenio koordinate tako da se dvije bitmape kreću u suprotnom smjeru

Zatim moramo pomaknuti bitmape prema koordinatama na sljedeći način:

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

I to je sve što treba učiniti

Kao bonus, prikazujem izravne vrijednosti EV i Lux kada senzor daje vrijednosti ispod 160Lux, samo zato što sam htio vidjeti stvari prilikom testiranja.

Korak 5: Sastavite to zajedno

Sastavljajući to zajedno
Sastavljajući to zajedno
Sastavljajući to zajedno
Sastavljajući to zajedno

Kako zaslon, tako i senzor koriste I2C za komunikaciju, izgradnja stvarnog hardvera je što je moguće jednostavnija.

Samo povežite podatkovne, uzemljene i 3 V vodove s Arduinom i spremni ste za rad.

Dodao sam grafiku kako sam to učinio s stripboardom, ali kao što je ranije rečeno možete koristiti kabele ili čak izgraditi krilo za to, sve ovisi koji kontroler i zaslon koristite.

Na mojoj slici, bijele točkice bi trebale biti spojene na zaslon i senzor, a žute točkice na Trinket.

Jedino izuzetak bio bi podatkovni pin I2C linije koji se povezuje s zaslonom, a taj pin također se povezuje s podatkovnim pinom Trinkets.

Odlučio sam ne koristiti prekidač za uključivanje/isključivanje, već umjesto toga pomoću gumba i dvije ćelije s 3 V gumba privremeno ga uključiti sve dok pritisnem gumb. Uključuje se za manje od 1/10 sekunde, tako da je dovoljno brzo da uštedim gumb i učinim ga manjim.

Preporučeni: