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, Novembar
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 svjetlosnog mjerača.

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

www.youtube.com/embed/avQD10fd52s

Cilj mi je bio merač svetlosti da prati moju kameru Bronica ETRSi filma srednjeg formata.

Stvari koje sam želio da to 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 funkcija, osim običnih 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)
  • OLED ekran 128x32 (oko 10 USD)
  • dugme za privremeno uključivanje (nekoliko centi)
  • mali komad strip-ploče, jer pokušavam ne koristiti kabele, ali svakako možete koristiti i kabele

Korak 1: Osnovni proračuni | Lux do EV

Osnovni proračuni | Lux do EV
Osnovni proračuni | Lux do EV
Osnovni proračuni | Lux do EV
Osnovni proračuni | Lux do EV

Senzor koji sam kupio koristi dvije značajke koje mi omogućuju da odlučim o njemu:

  • daje vrijednosti 16bit luksa umjesto "bez dimenzija" svjetlosnih vrijednosti
  • daje vrijednosti preko 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 da dobijete EV iz vrijednosti Lux koje je dao 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 proračun koji je potrebno izvršiti kako bi se iz svjetlomjera izvukle fotografske vrijednosti.

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

Korak 2: Predstavljanje vrijednosti na ekranu | Adafruit GFX biblioteka

Predstavljanje vrijednosti na zaslonu | Adafruit GFX biblioteka
Predstavljanje vrijednosti na zaslonu | Adafruit GFX biblioteka
Predstavljanje vrijednosti na zaslonu | Adafruit GFX biblioteka
Predstavljanje vrijednosti na zaslonu | Adafruit GFX biblioteka
Predstavljanje vrijednosti na zaslonu | Adafruit GFX biblioteka
Predstavljanje vrijednosti na zaslonu | Adafruit GFX biblioteka

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 točno EV 13 pa bih, na primjer, mogao 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

Zato 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 biblioteke, odlučio sam koristiti dvije prilagođene grafike koje će se kretati po OLED ekranu.

Jedan za vrijednosti otvora blende, jedan za vremena.

GFX biblioteka koristi 8 -bitne vrijednosti za predstavljanje grafike, pa sam napravio xls list (vidi sliku iznad).

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

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

Koristeći tablicu pretraživanja iz prethodnog koraka znamo da predstavlja 160 Lux ili EV6.

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

Opet putem tabele 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 tablični list Vishay VEML7700 Adafruit koji koristi za svoju ploču, našao sam prilično uznemirujuće upozorenje:

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

pogledajte snimak ekrana sa narandž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č svjetlosti.

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 direktnoj 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 Adafruits biblioteke dodavanjem:

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

u vašoj postavci void ()

Dakle, nakon što ga postavite na 1/8 i 25 ms i dodate kompenzacijsku formulu, možete izmjeriti do 120000 luksa, što je dovoljno za pokrivanje sunčeve svjetlosti pri 80-100.000 luksa

Korak 4: Arduino / C-kod

Kako ovisi o vašem ekranu koji koristite i preferiranom 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 dio VEML biblioteke na:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (true);

u petlji void:

obavezno dodajte kompenzaciju:

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));

pomeranje bitmapa

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

ako (LUX_CORR> 159 && LUX_CORR <655361)

Zatim moramo preslikati vrijednosti EV u koordinate, jer je raspon EV dvocifren i želimo ih premjestiti s ekrana preko 128 piksela po cijelom ekranu, potrebne su nam veće vrijednosti.

Kako već imamo 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

Ovdje se može vidjeti i to 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 prave EV i Lux vrijednosti 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 i zaslon 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 sa stripboardom, ali kao što je ranije rečeno možete koristiti kabele ili čak izgraditi krilo za to, sve ovisi koji kontroler i ekran koristite.

Na mojoj slici, bijele tačke bi trebale biti povezane s ekranom i senzorom, a žute tačke sa Trinket.

Jedino izuzetak bio bi pin za podatke I2C linije koji se povezuje s ekranom, a taj pin se povezuje i s podatkovnim pinom Trinkets.

Odlučio sam da ne koristim prekidač za uključivanje/isključivanje, već da umjesto toga koristim dugme i dvije ćelije sa 3 V dugmeta za privremeno uključivanje dok god pritisnem dugme. Uključuje se za manje od 1/10 sekunde, tako da je dovoljno brzo da uštedim dugme i smanjim ga.

Preporučuje se: