Obsah:

Fotografický svetelný merač DIY: 5 krokov
Fotografický svetelný merač DIY: 5 krokov

Video: Fotografický svetelný merač DIY: 5 krokov

Video: Fotografický svetelný merač DIY: 5 krokov
Video: 5 УДИВИТЕЛЬНЫХ ЖИЗНЕННЫХ ХАКОВ # 2 2024, November
Anonim
DIY fotografický merač svetla
DIY fotografický merač svetla
DIY fotografický merač svetla
DIY fotografický merač svetla

Tento návod zdieľa niekoľko nápadov na stavbu jednoduchého malého a lacného merača dopadajúceho svetla.

Keďže mi Instructables nedovolí vkladať vlastné videá, vyskúšajte tento odkaz:

www.youtube.com/embed/avQD10fd52s

Cieľom pre mňa bol svetelný meter, ktorý by sprevádzal moju strednoformátovú filmovú kameru Bronica ETRSi.

Veci, ktoré som chcel, aby predstavoval:

  • single ASA (100), pretože takmer výlučne používam film ASA 100
  • čo najmenšie
  • len mi dajte kombinácie, ktoré dokáže moja Bronica reprodukovať, čo znamená f2,8-f22 a 1 s až 1/500 s
  • žiadne nezmyselné funkcie, okrem bežných časov a hodnôt clony

Veci, ktoré som použil:

  • Adafruit (Vishay) VEML 7700 digitálny luxmeter (približne 5 $)
  • Mikroprocesor Adafruit Trinket M0 (približne 9 $)
  • 128 x 32 OLED displej (približne 10 $)
  • tlačidlo na dočasné zapnutie (niekoľko centov)
  • malý kúsok pásky, pretože sa snažím nepoužívať káble, ale určite môžete použiť aj káble

Krok 1: Základné výpočty | Lux až EV

Základné výpočty | Lux až EV
Základné výpočty | Lux až EV
Základné výpočty | Lux až EV
Základné výpočty | Lux až EV

Senzor, ktorý som si kúpil, používa dve funkcie, ktoré mi umožňujú rozhodnúť sa o ňom:

  • namiesto hodnôt svetla „bez rozmerov“vydáva hodnoty 16 bitov lux
  • odosiela hodnoty cez I2C

Fotografický merač svetla používa hodnoty expozície (EV), snímač, ktorý som kúpil, používa hodnoty Lux, čo je úplne iná mierka. Prvým krokom je teda získanie EV z hodnôt Lux za predpokladu, že bude snímač.

Krátky pohľad na wikipédiu a môžete nájsť vzorec na meranie incidentov a prevod EV na Lux:

E = 2,5 * 2^EV

kde E sa meria v luxoch.

Pretože sme už dostali hodnotu Lux zo senzora a chceme hodnotu EV, musíme znova vytvoriť vzorec, ktorý nás dostane:

EV = log2 (E/2,5)

Toto je prvý výpočet, ktorý je potrebné vykonať, aby sa zo svetelného merača dostali fotografické hodnoty.

V priloženej vyhľadávacej tabuľke môžete vidieť všetky hodnoty, ktoré budú použité v tomto svetelnom merači, spolu s príslušnými hodnotami Lux a EV.

Krok 2: Zobrazenie hodnôt na displeji | Knižnica Adafruit GFX

Zobrazenie hodnôt na displeji | Knižnica Adafruit GFX
Zobrazenie hodnôt na displeji | Knižnica Adafruit GFX
Prezentácia hodnôt na displeji | Knižnica Adafruit GFX
Prezentácia hodnôt na displeji | Knižnica Adafruit GFX
Prezentácia hodnôt na displeji | Knižnica Adafruit GFX
Prezentácia hodnôt na displeji | Knižnica Adafruit GFX

Najprv som sa pokúsil prezentovať hodnoty v celých krokoch, pretože na to môžem nastaviť svoju Bronicu, ale to ma priviedlo k problému:

Predpokladajme, že snímač Lux má výstup presne 20480, to by znamenalo jeho presný EV 13, takže by som napríklad mohol nastaviť fotoaparát na f4 a 1/500 sekundy a bolo by dobré ísť

Ďalej predpokladajme, že snímač Lux by produkoval 20479 Lux, 1 Lux pod EV13, ktorý by produkoval hodnotu EV 12, ale bol by len Lux vzdialený od EV13

Fotoaparát by som teda nastavil na f2,8 a 1/500 sekundy, čo by preexponovalo 1 zastávku bez toho, aby som vedel, ako blízko som k EV13.

Záver: Potrebujeme nejaký druh analógového zobrazenia hodnôt, aby sme aspoň videli, ako blízko alebo ďaleko je merač od nasledujúceho alebo predchádzajúceho kroku EV.

Keď som sa pokúsil použiť vstavané písmená a písma knižnice GFX, rozhodol som sa použiť dve vlastné grafiky, ktoré sa budú pohybovať po obrazovke OLED.

Jeden pre hodnoty clony, jeden pre časy.

Knižnica GFX používa na prezentáciu grafiky hodnoty 8 bitov, a tak som vytvoril list xls (pozri obrázok vyššie).

  • každá hodnota má presne rovnaký počet pixelov na hodnotu
  • časy a clony majú presne rovnaký počet hodnôt na riadok
  • Pridal som potrebné „B“na začiatok každého bajtu a „,“na koniec
  • Potom som to exportoval do obyčajného textu a voila: pripojil som tretiu grafiku

Časové hodnoty začínajú o 1/8 sekundy a hodnoty clony začínajú na f2,8

Pomocou vyhľadávacej tabuľky z predchádzajúceho kroku vieme, že to predstavuje 160 Lux alebo EV6.

Najtmavšie hodnoty by potom boli f22 a 1/500 sekundy

Opäť prostredníctvom vyhľadávacej tabuľky vidíme, že to znamená 655360 Lux alebo EV18

Zatiaľ je všetko dobré.

Takže na EV6 musí byť grafika clony úplne vľavo, časy úplne vpravo a naopak na EV18

Krok 3: Čítanie a kompenzácia hodnôt Lux | VEML7700

Čítanie a kompenzácia hodnôt Lux | VEML7700
Čítanie a kompenzácia hodnôt Lux | VEML7700
Čítanie a kompenzácia hodnôt Lux | VEML7700
Čítanie a kompenzácia hodnôt Lux | VEML7700

Pri listovaní v technickom liste Vishay VEML7700 Adafruit, ktorý používa na svojej doske, som našiel dosť znepokojujúce oznámenie:

Senzor funguje lineárne iba medzi 0 a 1000 Lux (!)

pozrite si snímku obrazovky s oranžovou (lineárnou) čiarou a modrou (skutočný výstup snímača)

Slnečné svetlo (EV15) sa pohybuje okolo 80 000 Luxov, čo znamená, že bez kompenzácie nelineárnej časti senzora by bolo ako merač svetla úplne zbytočné.

Vishay to vie, a tak svojim zákazníkom poskytlo ďalšie pdf s názvom Navrhovanie VEML7700 do aplikácie.

V tomto pdf nájdete vzorec na kompenzáciu nelinearity senzorov:

LUX_CORR = 6,0135e-13*prášok (LUX, 4) -9,3924e-9*prášok (LUX, 3)+8,1488e-5*prášok (LUX, 2)+1,0023*LUX

Kde LUX_CORR je korigovaná hodnota Lux a LUX je hodnota, ktorú senzor vydáva.

Toto sú premenné, ktoré som použil, použité rôzne v ich hárku.

Trochu mi vadí, že Adafruit to nespomína jediným slovom na svojej stránke, dokumentácii, knižnici ani inde.

Prvých niekoľko dní som sa teda čudoval, prečo môj merač svetla vydáva maximum iba 20 000 Luxov, dokonca aj na priamom slnku.

Ak sa pozriete na graf s červenou a modrou čiarou, pochopíte prečo: pretože bez vzorca pre kompenzáciu nemôže ísť vyššie.

V dokumentácii senzora je však skrytý ďalší náznak:

Tento vzorec kompenzácie funguje iba vtedy, ak nastavíte snímač na 25 ms a pomer zisku 1/8.

S knižnicou Adafruits sa to robí celkom jednoducho pridaním:

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

vo vašom neplatnom nastavení ()

Takže po nastavení na 1/8 a 25 ms a pridaní vzorca pre kompenzáciu môžete namerať až 1 200 000 luxov, čo je dostatočné množstvo na pokrytie slnečného svetla pri 80 až 100 000 luxoch

Krok 4: Arduino / C-kód

Keďže to závisí od použitého displeja a preferovaného ovládača, nebudem sa príliš rozpisovať, len niekoľko myšlienok a rád, ktoré je potrebné doplniť, najmä pri použití knižníc Adafruit a OLED s rozlíšením 128 x 32 px:

v nastavení prázdnoty:

Nastavil som časť knižnice VEML na:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10 000);

veml.setHighThreshold (20 000);

veml.interruptEnable (true);

v prázdnej slučke:

Nezabudnite pridať kompenzáciu:

int LUX_CORR = 6,0135e-13*prášok (LUX, 4) -9,3924e-9*prášok (LUX, 3)+8,1488e-5*prášok (LUX, 2)+1,0023*LUX;

na získanie EV z Luxu použite tento riadok:

float EV = log2 ((LUX_CORR/2,5));

presúvanie bitových máp

aby ste sa uistili, že sa bitmapy pohybujú iba vtedy, keď sú hodnoty medzi 160Lux a 655360Lux, ako je uvedené v predchádzajúcom kroku, zabaľte ho do klauzule if takto:

ak (LUX_CORR> 159 && LUX_CORR <655361)

Ďalej musíme mapovať hodnoty EV na súradnice, pretože rozsah EV je dvojciferný a chceme ich presunúť z mimo displeja na 128 pixelov na celý displej, potrebujeme väčšie hodnoty.

Keď sme už dostali číslo s pohyblivou číslicou, vynásobíme ho 100 a pomocou tohto celého čísla zmapujeme súradnice

int EV_DSPL = EV*100;

a:

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

Ako vidíte v mojom prípade, minimálna poloha bitmapy by bola -260 pixelov a maximálna by bola 39 pixelov

Tu je tiež možné vidieť, že som zmenil súradnice tak, aby sa dve bitové mapy pohybovali v opačnom smere

Ďalej musíme presunúť bitmapy podľa súradníc podľa:

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

A to je všetko, čo je potrebné urobiť

Ako bonus zobrazujem rovné hodnoty EV a Lux, keď snímač vydáva hodnoty pod 160 Lux, len preto, že som chcel pri testovaní vidieť veci.

Krok 5: Dajte to dohromady

Dať to dohromady
Dať to dohromady
Dať to dohromady
Dať to dohromady

Pretože displej aj senzor používajú na komunikáciu I2C, budovanie skutočného hardvéru je také jednoduché, ako to len môže byť.

Stačí prepojiť dátové, hodinové a 3V vedenia s Arduino a môžete ísť.

Pridal som grafiku, ako som to urobil s tabuľou, ale ako už bolo povedané, môžete na to použiť káble alebo dokonca postaviť krídlo, všetko závisí od toho, ktorý ovládač a displej použijete.

Na mojej grafike majú byť biele bodky pripojené k displeju a senzoru a žlté bodky k Trinketu.

Jedinou výnimkou by bol dátový kolík linky I2C, ktorý sa pripája k displeju, tento pin sa tiež pripája k dátovému kolíku Trinkets.

Rozhodol som sa nepoužívať vypínač/vypínač, ale namiesto toho použiť tlačidlo a dva 3V gombíkové články na dočasné zapnutie, pokiaľ tlačidlo stlačím. Zapne sa za menej ako 1/10 sekundy, takže pre mňa dostatočne rýchlo ušetrím tlačidlo a zmenším ho.

Odporúča: