Tartalomjegyzék:

DIY fényképészeti fénymérő: 5 lépés
DIY fényképészeti fénymérő: 5 lépés

Videó: DIY fényképészeti fénymérő: 5 lépés

Videó: DIY fényképészeti fénymérő: 5 lépés
Videó: El histograma utilizado como fotómetro Curso de fotografía 39 2024, November
Anonim
DIY fényképészeti fénymérő
DIY fényképészeti fénymérő
DIY fényképészeti fénymérő
DIY fényképészeti fénymérő

Ez az Instructable néhány ötletet oszt meg egy egyszerű kicsi és olcsó fénymérő felépítésével kapcsolatban.

Mivel az Instructables nem engedi beilleszteni a saját videóimat, próbálja meg ezt a linket:

www.youtube.com/embed/avQD10fd52s

A cél számomra egy fénymérő volt, hogy kísérjem a Bronica ETRSi közepes formátumú filmkamerámat.

Amit szerettem volna, hogy megjelenjen:

  • egyetlen ASA (100), mert szinte csak ASA 100 filmet használok
  • a lehető legkisebb
  • csak olyan kombinációkat adjon meg, amelyeket a Bronica képes reprodukálni, ami azt jelenti, hogy f2.8-f22 és 1 másodperc-1/500 másodperc
  • nincs értelmetlen jellemzője, kivéve a sima időket és a rekeszértékeket

Amiket használtam:

  • Adafruit (Vishay) VEML 7700 digitális Lux-méter (körülbelül 5 dollár)
  • Adafruit Trinket M0 mikrovezérlő (körülbelül 9 dollár)
  • 128x32 OLED kijelző (körülbelül 10 dollár)
  • nyomógomb az ideiglenes bekapcsoláshoz (néhány cent)
  • egy apró darab szalagdeszka, mert próbálok nem kábeleket használni, de biztosan használhat kábeleket is

1. lépés: Alapszámítások | Lux -tól EV -ig

Alapszámítások | Lux -tól EV -ig
Alapszámítások | Lux -tól EV -ig
Alapszámítások | Lux -tól EV -ig
Alapszámítások | Lux -tól EV -ig

A megvásárolt érzékelő két funkciót használ, amelyek alapján eldönthetem:

  • 16 bites lux értékeket ad ki a „méret nélküli” fényértékek helyett
  • az értékeket I2C -n keresztül adja ki

Egy fényképes fénymérő expozíciós értékeket (EV) használ, a megvásárolt szenzor Lux értékeket használ, ami teljesen más skála. Tehát az első lépés az EV -k lekérése az érzékelő által biztosított Lux -értékekből.

Egy gyors pillantás a wikipédiára, és megtalálhatja az eseménymérés képletét, és konvertálja az EV -t Lux -ra:

E = 2,5 * 2^EV

ahol E -t luxban mérik.

Mivel már megkaptuk a Lux értéket az érzékelőtől, és szeretnénk az EV értéket, újra kell alakítanunk a képletet, amellyel:

EV = log2 (E/2.5)

Tehát ez az első számítás, amelyet el kell végezni annak érdekében, hogy a fénymérőből ki lehessen venni a fényképes értékeket.

A mellékelt keresési táblázatban láthatja az összes értéket, amelyet ebben a fénymérőben használnak, a megfelelő Lux és EV értékekkel együtt.

2. lépés: Az értékek bemutatása a kijelzőn | Adafruit GFX könyvtár

Az értékek bemutatása a kijelzőn | Adafruit GFX könyvtár
Az értékek bemutatása a kijelzőn | Adafruit GFX könyvtár
Az értékek bemutatása a kijelzőn | Adafruit GFX könyvtár
Az értékek bemutatása a kijelzőn | Adafruit GFX könyvtár
Az értékek bemutatása a kijelzőn | Adafruit GFX könyvtár
Az értékek bemutatása a kijelzőn | Adafruit GFX könyvtár

Először egész lépésekben próbáltam bemutatni az értékeket, mert erre tudom beállítani a Bronica -t, de ez egy problémához vezet:

Tegyük fel, hogy a Lux -érzékelő pontosan 20480 -as értéket ad ki, ami azt jelenti, hogy pontosan az EV 13, így például beállíthatom a fényképezőgépet f4 -re és 1/500 másodpercre, és jó lenne menni

Ezután tegyük fel, hogy a Lux -érzékelő 20479 Lux -ot ad ki, 1 Lux -ot az EV13 alatt, ami 12 -es EV -értéket ad ki, de csak egy lux távolságra van az EV13 -tól

Tehát f2.8 -ra és 1/500 másodpercre állítanám be a fényképezőgépemet, ami túlexponálna 1 stopot anélkül, hogy tudnám, mennyire közel vagyok az EV13 -hoz.

Következtetés: szükségünk van az értékek valamilyen analóg kijelzőjére, hogy legalább lássuk, milyen közel vagy távol van a mérő a következő vagy előző EV lépéstől.

Miután megpróbáltam használni a GFX könyvtár beépített betűit és betűtípusát, úgy döntöttem, hogy két egyedi grafikát használok, amelyek az OLED képernyőn mozognak.

Az egyik a rekeszértékekhez, a másik az időhöz.

A GFX könyvtár 8 bites értékeket használ a grafika bemutatásához, ezért készítettem egy xls lapot (lásd a fenti képet).

  • minden értéknek pontosan ugyanannyi képpontja van értékenként
  • az idők és a rekeszek soronként pontosan ugyanannyi értéket tartalmaznak
  • Hozzáadtam a szükséges "B" betűt minden bájt elején, és a "" -t a végén
  • Ezt követően exportáltam egy egyszerű szövegbe, és íme: csatoltam a harmadik grafikát

Az időértékek másodpercenként 1/8, a rekeszértékek pedig f2.8 -tal kezdődnek

Az előző lépés keresési táblázata alapján tudjuk, hogy ez 160 lux vagy EV6.

A legsötétebb értékek ekkor f22 és 1/500 másodpercek lennének

Ismét a keresési táblázaton keresztül láthatjuk, hogy ez 655360 Lux vagy EV18

Eddig jó.

Tehát az EV6 -on a rekesznyílás grafikának a bal szélsőnek kell lennie, az időknek a jobb szélén, és fordítva az EV18 -nak

3. lépés: A lux értékek olvasása és kompenzálása | VEML7700

A lux -értékek olvasása és kompenzálása | VEML7700
A lux -értékek olvasása és kompenzálása | VEML7700
A lux -értékek olvasása és kompenzálása | VEML7700
A lux -értékek olvasása és kompenzálása | VEML7700

Miközben lapozgattam a Vishay VEML7700 Adafruit táblájához tartozó adatlapját, meglehetősen nyugtalanító észrevételt találtam:

Az érzékelő csak lineárisan működik 0 és 1000Lux (!) Között

lásd a képernyőképet a narancssárga (lineáris) és a kék (tényleges érzékelő kimenet) vonallal

A napfény (EV15) körülbelül 80 000 lux, ami azt jelenti, hogy az érzékelő nemlineáris részének kompenzálása nélkül teljesen haszontalan lenne fénymérőként.

Vishay tudja ezt, ezért ügyfeleiknek egy másik pdf -t adtak, amelynek címe A VEML7700 tervezése alkalmazásba.

Ebben a pdf-ben talál egy képletet az érzékelők nemlinearitásának kompenzálására:

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

Ahol a LUX_CORR a korrigált Lux-érték, a LUX pedig az érzékelő által kiadott érték.

Ezeket a változókat használtam, a táblázatban használt különböző változókat.

Engem kissé zavar, hogy az Adafruit egyetlen szóval sem említi ezt az oldalukon, a dokumentációjukban, a könyvtárukban vagy máshol.

Így az első napokban azon tűnődtem, hogy a fénymérőm miért csak 20000 Lux maximális teljesítményt ad ki közvetlen napfényben is.

Ha megnézed a piros és a kék vonallal ellátott grafikont, láthatod, hogy miért: mert a kompenzációs képlet nélkül nem mehet feljebb.

De van még egy tipp az érzékelő dokumentációjában:

Ez a kompenzációs képlet csak akkor működik, ha az érzékelőt 25 ms -ra és 1/8 erősítési arányra állítja.

Ez könnyen elvégezhető az Adafruits könyvtárral a következőkkel:

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

az üresség beállításában ()

Tehát miután 1/8 és 25 ms-ra állította, és hozzáadta a kompenzációs képletet, akár 120000 luxot is mérhet, ami elég ahhoz, hogy elfedje a napfényt 80-100k Lux-on

4. lépés: Arduino / C-kód

Mivel a használt kijelzőtől és a preferált vezérlőtől függ, nem részletezem túl sokat, csak néhány gondolatot és tippet kell hozzáfűznöm, különösen az Adafruit könyvtárak és a 128x32 px OLED használata esetén:

az üres beállításban:

beállítottam a VEML könyvtárrészt:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (igaz);

az üres körben:

feltétlenül adja hozzá a kompenzációt:

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

Ha EV -t szeretne vásárolni a Lux -tól, használja ezt a sort:

float EV = log2 ((LUX_CORR/2.5));

a bitképek mozgatása

annak biztosítása érdekében, hogy a bitképek csak akkor mozogjanak, ha az értékek 160Lux és 655360Lux között vannak, ahogy az előző lépésben leírtuk, csomagolja be egy ilyen if záradékba:

ha (LUX_CORR> 159 && LUX_CORR <655361)

Ezt követően le kell térképeznünk az EV értékeket a koordinátákra, mivel az EV tartomány két számjegyű, és szeretnénk 128 px fölött a kijelzőről áthelyezni őket a teljes kijelzőn, és nagyobb értékekre van szükségünk.

Mivel már lebegő számot kaptunk, ezt csak megszorozzuk 100 -zal, és ezt az egész számot használjuk a koordináták feltérképezésére

int EV_DSPL = EV*100;

és:

TIME = térkép (EV_DSPL, 600, 1900, -260, 39); APERTURE = térkép (EV_DSPL, 600, 1900, 39, -260);

Mint látható az én esetemben a bitkép minimális pozíciója -260 képpont, a maximális pedig 39 képpont.

Itt látható az is, hogy úgy változtattam a koordinátákat, hogy a két bitkép ellentétes irányba mozogjon

Ezután el kell helyeznünk a bitképeket a koordináták szerint:

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

És ez minden, amit meg kell tenni

Bónuszként egyenes EV és Lux értékeket jelenítek meg, amikor az érzékelő 160Lux alatti értékeket ad ki, csak azért, mert látni akartam valamit a tesztelés során.

5. lépés: Összeállítás

Összerakása
Összerakása
Összerakása
Összerakása

Mivel mind a kijelző, mind az érzékelő I2C -t használ a kommunikációhoz, a tényleges hardver felépítése a lehető legegyszerűbb.

Csak csatlakoztassa az adatokat, az óra földjét és a 3 V -os vezetékeket az Arduino -hoz, és már indulhat is.

Hozzáadtam egy grafikát, hogyan csináltam szalaglappal, de ahogy korábban említettük, használhat kábeleket, vagy akár szárnyat is építhet hozzá, minden attól függ, hogy melyik vezérlőt és kijelzőt használja.

A grafikám szerint a fehér pontokat a kijelzőhöz és az érzékelőhöz kell csatlakoztatni, a sárga pontokat pedig a csecsebecséhez.

Az egyetlen kivétel az I2C vonal adattüske lenne, amely a kijelzőhöz csatlakozik, ez a tű pedig a Trinkets adatcsaphoz is csatlakozik.

Úgy döntöttem, hogy nem használok ki/be kapcsolót, hanem nyomógombot és két 3V -os gombelemet használok ideiglenes bekapcsolásra, amíg megnyomom a gombot. 1 másodperc alatt bekapcsol, így elég gyors ahhoz, hogy megkíméljem a gombot és kicsinyítsem.

Ajánlott: