Obsah:
- Krok 1: Základní výpočty | Lux až EV
- Krok 2: Prezentace hodnot na displeji | Knihovna Adafruit GFX
- Krok 3: Čtení a kompenzace hodnot Lux | VEML7700
- Krok 4: Arduino / C-kód
- Krok 5: Dát to dohromady
Video: Fotografický světelný měřič DIY: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:20
Tento Instructable sdílí několik nápadů na stavbu jednoduchého malého a levného měřiče dopadajícího světla.
Protože Instructables mi nedovolí vkládat vlastní videa, zkuste tento odkaz:
www.youtube.com/embed/avQD10fd52s
Cílem pro mě byl světelný metr doprovázející mou středoformátovou filmovou kameru Bronica ETRSi.
Věci, které jsem chtěl, aby to představovalo:
- single ASA (100), protože téměř výhradně používám film ASA 100
- co nejmenší
- dávejte mi pouze kombinace, které dokáže moje Bronica reprodukovat, což znamená f2,8-f22 a 1 s až 1/500 s
- žádné nesmyslné funkce, kromě obyčejných časů a hodnot clony
Věci, které jsem použil:
- Adafruit (Vishay) VEML 7700 digitální Lux-metr (kolem 5 $)
- Mikroprocesor Adafruit Trinket M0 (přibližně 9 $)
- 128x32 OLED displej (přibližně 10 $)
- tlačítko pro dočasné zapnutí (některé centy)
- malý kousek páskové desky, protože se snažím nepoužívat kabely, ale určitě můžete použít i kabely
Krok 1: Základní výpočty | Lux až EV
Senzor, který jsem koupil, používá dvě funkce, které mi umožňují rozhodnout se o něm:
- místo hodnot světla „bezrozměrných“vydává hodnoty 16bit Lux
- odesílá hodnoty přes I2C
Měřič fotografického světla používá hodnoty expozice (EV), snímač, který jsem koupil, používá hodnoty Lux, což je úplně jiné měřítko. Prvním krokem je tedy získání EV z hodnot Lux za předpokladu senzoru.
Rychlý pohled na wikipedii a můžete najít vzorec pro měření incidentů a převod EV na Lux:
E = 2,5 * 2^EV
kde E se měří v Lux.
Protože jsme již dostali hodnotu Lux ze snímače a chceme hodnotu EV, musíme znovu vytvořit vzorec, který nás dostane:
EV = log2 (E/2,5)
Toto je první výpočet, který je třeba provést, aby se z měřiče světla dostaly fotografické hodnoty.
V přiložené vyhledávací tabulce vidíte všechny hodnoty, které budou použity v tomto světelném měřiči, společně s příslušnými hodnotami Lux a EV.
Krok 2: Prezentace hodnot na displeji | Knihovna Adafruit GFX
Nejprve jsem se pokusil prezentovat hodnoty v celých krocích, protože na to mohu nastavit Bronicu, ale to mě vedlo k problému:
Předpokládejme, že snímač Lux vydává hodnotu přesně 20480, což by znamenalo jeho přesně EV 13, takže bych mohl například nastavit svůj fotoaparát na f4 a 1/500 sekundy a bylo by dobré jít
Dále předpokládejme, že snímač Lux bude produkovat 20479 Lux, 1 Lux pod EV13, což by mělo hodnotu EV 12, ale je to jen Lux daleko od EV13
Fotoaparát bych tedy nastavil na f2,8 a 1/500 sekundy, což by přeexponovalo 1 zastávku, aniž bych věděl, jak blízko jsem k EV13.
Závěr: potřebujeme nějaký druh analogového zobrazení hodnot, abychom alespoň viděli, jak blízko nebo daleko je měřič od dalšího nebo předchozího kroku EV.
Poté, co jsem se pokusil použít vestavěná písmena a písma knihovny GFX, rozhodl jsem se použít dvě vlastní grafiky, které se budou pohybovat po obrazovce OLED.
Jeden pro hodnoty clony, jeden pro časy.
Knihovna GFX používá k prezentaci grafiky 8bitové hodnoty, proto jsem vytvořil list xls (viz obrázek výše).
- každá hodnota má přesně stejné množství pixelů na hodnotu
- časy a clony mají přesně stejné množství hodnot na řádek
- Přidal jsem potřebné „B“na začátek každého bajtu a „,“na konec
- Potom jsem to exportoval do prostého textu a voila: připojil jsem třetí grafiku
Časové hodnoty začínají o 1/8 sekundy a hodnoty clony začínají na f2,8
Pomocí vyhledávací tabulky z předchozího kroku víme, že to představuje 160 Lux nebo EV6.
Nejtmavší hodnoty by pak byly f22 a 1/500 sekundy
Znovu prostřednictvím vyhledávací tabulky vidíme, že to znamená 655360 Lux nebo EV18
Zatím je vše dobré.
Na EV6 tedy musí být grafika clony zcela vlevo, časy zcela vpravo a naopak na EV18
Krok 3: Čtení a kompenzace hodnot Lux | VEML7700
Při procházení datasheetu Vishay VEML7700 Adafruit, který používá pro svou desku, jsem našel docela znepokojivé upozornění:
Senzor funguje pouze lineárně mezi 0 a 1000 Lux (!)
viz snímek obrazovky s oranžovou (lineární) čarou a modrou (skutečný výstup snímače) čárou
Sluneční světlo (EV15) se pohybuje kolem 80 000 Luxů, což znamená, že bez kompenzace nelineární části senzoru by bylo jako měřič světla zcela zbytečné.
Vishay to ví, a tak poskytli svým zákazníkům další pdf s názvem Designing the VEML7700 Into an Application.
V tomto pdf najdete vzorec pro kompenzaci nelinearity senzorů:
LUX_CORR = 6.0135e-13*pow (LUX, 4) -9.3924e-9*pow (LUX, 3)+8.1488e-5*pow (LUX, 2)+1.0023*LUX
Kde LUX_CORR je opravená hodnota Lux a LUX je hodnota, kterou senzor vydává.
To jsou proměnné, které jsem použil, použité různé ve svém listu.
Trochu mi vadí, že to Adafruit nezmiňuje jediným slovem na své stránce, dokumentaci, knihovně nebo jinde.
Prvních pár dní jsem tedy přemýšlel, proč můj světelný přístroj vydává maximum pouze 20 000 Luxů, a to i na přímém slunci.
Když se podíváte na graf s červenou a modrou čarou, uvidíte proč: protože bez vzorce pro kompenzaci nemůže jít výše.
V dokumentaci senzoru se však skrývá ještě jeden náznak:
Tento kompenzační vzorec funguje pouze tehdy, když nastavíte snímač na 25 ms a poměr zisku 1/8.
To se s knihovnou Adafruits provádí docela snadno přidáním:
veml.setGain (VEML7700_GAIN_1_8); veml.setIntegrationTime (VEML7700_IT_25MS);
ve vašem neplatném nastavení ()
Takže po nastavení na 1/8 a 25 ms a přidání kompenzačního vzorce můžete změřit až 1 200 000 luxů, což je dost na pokrytí slunečního světla při 80 až 100 000 luxech
Krok 4: Arduino / C-kód
Vzhledem k tomu, že to závisí na vašem použitém displeji a preferovaném ovladači, nebudu se příliš rozepisovat, stačí přidat několik myšlenek a rad, zvláště při použití knihoven Adafruit a OLED 128x32 px:
v nastavení prázdnoty:
Nastavil jsem část knihovny VEML na:
veml.setGain (VEML7700_GAIN_1_8);
veml.setIntegrationTime (VEML7700_IT_25MS);
veml.setLowThreshold (10 000);
veml.setHighThreshold (20000);
veml.interruptEnable (true);
ve smyčce prázdnoty:
nezapomeňte přidat kompenzaci:
int LUX_CORR = 6,0135e-13*pow (LUX, 4) -9,3924e-9*pow (LUX, 3)+8,1488e-5*pow (LUX, 2)+1,0023*LUX;
Chcete -li získat EV z Luxu, použijte tento řádek:
float EV = log2 ((LUX_CORR/2.5));
přesouvání bitmap
Chcete -li zajistit, aby se bitmapy pohybovaly pouze tehdy, když jsou hodnoty mezi 160Lux a 655360Lux, jak bylo uvedeno v předchozím kroku, zabalte jej do klauzule if takto:
pokud (LUX_CORR> 159 && LUX_CORR <655361)
Dále musíme namapovat hodnoty EV na souřadnice, protože rozsah EV je dvouciferný a chceme je přesunout z displeje přes 128 pixelů na celý displej, potřebujeme větší hodnoty.
Protože jsme již dostali plovoucí číslo, vynásobíme je 100 a použijeme celé číslo k mapování souřadnic
int EV_DSPL = EV*100;
a:
TIME = mapa (EV_DSPL, 600, 1900, -260, 39); APERTURE = mapa (EV_DSPL, 600, 1900, 39, -260);
Jak vidíte v mém případě, minimální pozice bitmapy by byla -260 pixelů a maximum by bylo 39 pixelů
Zde je také vidět, že jsem změnil souřadnice tak, aby se obě bitmapy pohybovaly v opačném směru
Dále musíme přesunout bitmapy podle souřadnic podle:
display.drawBitmap ((TIME), (0), TIMES_bmp, 352, 16, 1); display.drawBitmap ((APERTURE), (15), APERTURES_bmp, 352, 16, 1);
A to je vše, co je třeba udělat
Jako bonus zobrazuji přímé hodnoty EV a Lux, když snímač vydává hodnoty pod 160 Lux, jen proto, že jsem chtěl při testování vidět věci.
Krok 5: Dát to dohromady
Protože displej i senzor používají ke komunikaci I2C, je sestavení skutečného hardwaru tak jednoduché, jak jen může být.
Stačí propojit datové, hodinové a 3V linky s Arduinem a můžete vyrazit.
Přidal jsem grafiku, jak jsem to udělal se stripboardem, ale jak již bylo řečeno, můžete k tomu použít kabely nebo dokonce postavit křídlo, vše závisí na tom, jaký ovladač a displej použijete.
Na mé grafice mají být bílé tečky připojeny k displeji a senzoru a žluté tečky k Trinketu.
Jedinou výjimkou by byl datový pin linky I2C, který se připojuje k displeji, tento pin se také připojuje k datovému kolíku Trinkets.
Rozhodl jsem se nepoužívat vypínač/vypínač, ale místo toho použít tlačítko a dva 3V knoflíkové články k dočasnému zapnutí, dokud stisknu tlačítko. Zapne se za méně než 1/10 sekundy, takže je to dost rychlé na to, abych ušetřil tlačítko a zmenšil ho.
Doporučuje:
Nový mikro světelný měřič pro starou kameru Voigtländer (vito Clr): 5 kroků
Nový mikro světelný měřič pro starou kameru Voigtländer (vito Clr): Pro každého, kdo je nadšený starými analogovými kamerami se zabudovaným měřičem světla, se může objevit jeden problém. Protože většina těchto kamer je vyrobena v 70./80. letech, použité foto senzory jsou opravdu staré a mohou přestat správně fungovat. V thi
Fotografický světelný box vyrobený z lepenky: 6 kroků (s obrázky)
Fotografický světelný box vyrobený z lepenky: Už jste se někdy dostali do situace, kdy jste museli něco dokonale vyfotit a neměli jste dokonalé blesky ani pěkné pozadí? Máte rádi fotografování, ale nemáte mnoho peněz na drahé studiové vybavení? Pokud ano, je to
Světelný měřič Arduino DIY se snímačem BH1750: 6 kroků (s obrázky)
Světelný měřič Arduino DIY se senzorem BH1750: V tomto instruktážním návodu vám ukážu, jak vytvořit měřič světla s velkým LCD displejem Nokia 5110 pomocí Arduina. Budování světelného měřiče je skvělá zkušenost s učením. Když dokončíte stavbu tohoto projektu, budete lépe rozumět
Fotografický světelný box s ovládáním barev: 5 kroků
Fotografický světelný box s ovládáním barev: Lightbox je zařízení používané ve fotografii k ovládání toho, jak bílé je světlo dopadající na předmět. Většina plánů lightboxů, které jsem viděl na internetu, spoléhá na přirozené světlo nebo bílé umělé osvětlení, například ze žárovek, zářivek a
Fotografický světelný box: 6 kroků (s obrázky)
Fotografický světelný box: Fotografický světelný box pro fotografování malých a středních předmětů. :: Díly :: Velká lepenková krabice (silnější krabice vydrží zneužití řezání a práce na ní) Několik yardů bílé látky (mám 3 yardy ) Wide/Think Double stick tape (použil jsem