Përmbajtje:

Lightmetër fotografik DIY: 5 hapa
Lightmetër fotografik DIY: 5 hapa

Video: Lightmetër fotografik DIY: 5 hapa

Video: Lightmetër fotografik DIY: 5 hapa
Video: DIY/ baby photography ideas with simple and easy things at home 😍 2024, Korrik
Anonim
Dritë matës fotografik DIY
Dritë matës fotografik DIY
Dritë matës fotografik DIY
Dritë matës fotografik DIY

Ky Instructable ndan disa ide mbi ndërtimin e një ndriçuesi të thjeshtë të vogël dhe të lirë të incidentit.

Meqenëse Instructables nuk më lejon të fut videot e mia, provoni këtë lidhje:

www.youtube.com/embed/avQD10fd52s

Qëllimi për mua ishte një dritë-metër që të shoqëronte kamerën time të filmit të formatit të mesëm Bronica ETRSi.

Gjërat që doja që të shfaqte:

  • single ASA (100) sepse unë pothuajse përdor vetëm filmin ASA 100
  • sa më e vogël
  • më jep vetëm kombinime që Bronica ime mund të riprodhojë, që do të thotë f2.8-f22 dhe 1 sekondë deri në 1/500 sekonda
  • nuk ka veçori të pakuptimta, përveç kohës së thjeshtë dhe vlerave të hapjes

Gjërat që kam përdorur:

  • Adafruit (Vishay) VEML 7700 Lux-meter dixhital (rreth 5 $)
  • Mikrofontues Adafruit Trinket M0 (rreth 9 $)
  • Ekran OLED 128x32 (rreth 10 $)
  • një buton për ta ndezur përkohësisht (disa cent)
  • një copë e vogël e dërrasës së shiritit, sepse përpiqem të mos përdor kabllo, por sigurisht që mund të përdorni edhe kabllo

Hapi 1: Llogaritjet Themelore | Lux në EV

Llogaritjet Themelore | Lux në EV
Llogaritjet Themelore | Lux në EV
Llogaritjet Themelore | Lux në EV
Llogaritjet Themelore | Lux në EV

Sensori që bleva përdor dy veçori që më lejojnë të vendos për të:

  • nxjerr vlera 16bit lux në vend të vlerave të dritës "pa dimension"
  • nxjerr vlerat përmes I2C

Një matës fotografik i dritës përdor Vlerat e ekspozimit (EV), sensori që bleva përdor vlerat Lux, që është një shkallë krejtësisht e ndryshme. Pra, hapi i parë është të merrni EV nga vlerat Lux me kusht që sensori.

Një paraqitje e shpejtë në wikipedia dhe mund të gjeni një formulë për matjen e incidentit dhe konvertimin e EV në Lux:

E = 2.5 * 2^EV

ku E matet në Lux.

Meqenëse ne kemi marrë tashmë vlerën Lux nga sensori dhe duam vlerën EV, ne duhet të ri-formojmë formulën, e cila na çon në:

EV = log2 (E/2.5)

Pra, kjo është llogaritja e parë që duhet bërë për të nxjerrë vlerat fotografike nga matësi i dritës.

Në tabelën e bashkangjitur të kërkimit mund të shihni të gjitha vlerat që do të përdoren në këtë dritë metër, së bashku me vlerat sipas Lux dhe EV.

Hapi 2: Paraqitja e Vlerave në Ekran | Biblioteka Adafruit GFX

Paraqitja e Vlerave në Ekran | Biblioteka Adafruit GFX
Paraqitja e Vlerave në Ekran | Biblioteka Adafruit GFX
Paraqitja e Vlerave në Ekran | Biblioteka Adafruit GFX
Paraqitja e Vlerave në Ekran | Biblioteka Adafruit GFX
Paraqitja e Vlerave në Ekran | Biblioteka Adafruit GFX
Paraqitja e Vlerave në Ekran | Biblioteka Adafruit GFX

Së pari u përpoqa të paraqes vlerat në hapa të tërë, sepse kjo është ajo që unë mund ta vendos Bronica -n time, por kjo më çon në një problem:

Le të supozojmë se sensori Lux del me një vlerë prej saktësisht 20480, që do të thotë se është saktësisht EV 13, kështu që unë mund të vendos për shembull kamerën time në f4 dhe 1/500 të sekondës dhe do të ishte mirë të shkoja

Tjetra, le të supozojmë se sensori Lux do të prodhonte 20479 Lux, 1 Lux nën EV13, që do të prodhonte një vlerë EV prej 12, por është vetëm një Lux larg EV13

Kështu që unë do ta vendosja kamerën time në f2.8 dhe 1/500 të sekondës e cila do të ekspozonte tej mase 1 ndalesë pa e ditur as sa afër isha me EV13.

Përfundim: ne kemi nevojë për një lloj shfaqjeje analoge të vlerave për të parë së paku sa afër ose larg është njehsori nga hapi tjetër ose i mëparshëm EV.

Pasi u përpoqa të përdor shkronjat dhe fontin e integruar të bibliotekës GFX, vendosa të përdor dy grafika të personalizuara që do të lëvizin nëpër ekranin OLED.

Një për vlerat e hapjes, një për kohën.

Biblioteka GFX përdor vlera 8bit për të paraqitur grafikë, kështu që unë bëra një fletë xls (shiko imazhin më lart).

  • çdo vlerë ka të njëjtën sasi pikselësh për vlerë
  • kohët dhe hapjet kanë saktësisht të njëjtën sasi vlerash për rresht
  • Shtova "B" të domosdoshme në fillim të secilit bajt dhe "", në fund
  • Më pas e eksportova në një tekst të thjeshtë dhe voila: grafikun e tretë e bashkangjita

Vlerat e kohës fillojnë me 1/8 e sekondës dhe vlerat e hapjes fillojnë me f2.8

Duke përdorur tabelën e kërkimit të hapit të mëparshëm ne e dimë se kjo përfaqëson 160 Lux ose EV6.

Vlerat më të errëta do të ishin f22 dhe 1/500 e sekondës

Përsëri përmes tabelës së kërkimit ne mund të shohim që do të thotë 655360 Lux ose EV18

Deri këtu mirë.

Pra, në EV6 grafiku i hapjes duhet të jetë në të majtë, koha në të djathtë, dhe anasjelltas në EV18

Hapi 3: Leximi dhe Kompensimi i Vlerave Lux | VEML7700

Leximi dhe Kompensimi i Vlerave Lux | VEML7700
Leximi dhe Kompensimi i Vlerave Lux | VEML7700
Leximi dhe Kompensimi i Vlerave Lux | VEML7700
Leximi dhe Kompensimi i Vlerave Lux | VEML7700

Ndërsa lëvizja nëpër fletën e të dhënave të përdorimit të Vishay VEML7700 Adafruit për tabelën e tyre, gjeta një njoftim mjaft shqetësues:

Sensori funksionon vetëm linear midis 0 dhe 1000Lux (!)

shihni pamjen e ekranit me vijën portokalli (lineare) dhe vijën blu (dalja aktuale e sensorit)

Rrezet e diellit (EV15) janë rreth 80.000 Lux, që do të thotë se pa kompensim të pjesës jo-lineare të sensorit do të ishte krejtësisht e padobishme si njehsor drite.

Vishay e di këtë, kështu që ata u siguruan klientëve të tyre një pdf tjetër të quajtur Dizajnimi i VEML7700 në një Aplikim.

Në këtë pdf mund të gjeni një formulë për të kompensuar sensorët jo-linearitet:

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

Aty ku LUX_CORR është Lux-Value e korrigjuar dhe LUX është vlera që nxjerr sensori.

Ato janë variablat që kam përdorur, ato të ndryshme të përdorura në fletën e tyre.

Ajo që më shqetëson pak është se Adafruit nuk e përmend këtë me një fjalë të vetme në faqen e tyre, dokumentacionin e tyre, bibliotekën e tyre ose diku tjetër.

Kështu që ditët e para po pyesja veten se përse matësi i dritës sime del vetëm 20000 Lux maksimal edhe në rrezet e diellit direkte.

Nëse i hidhni një sy grafikut me vijën e kuqe dhe blu mund të shihni pse: sepse nuk mund të shkojë më lart pa formulën e kompensimit.

Por ka një aluzion tjetër të fshehur në dokumentacionin e sensorit:

Kjo formulë kompensimi funksionon vetëm nëse e vendosni sensorin në 25ms dhe një raport fitimi prej 1/8.

Kjo është bërë shumë lehtë me bibliotekën Adafruits duke shtuar:

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

në konfigurimin tuaj të zbrazët ()

Pra, pasi ta vendosni në 1/8 dhe 25ms dhe të shtoni formulën e kompensimit, mund të matni deri në 120000 lux, mjaftueshëm për të mbuluar rrezet e diellit në 80-100k Lux

Hapi 4: Kodi Arduino / C

Meqenëse varet nga ekrani juaj i përdorur dhe kontrolluesi i preferuar nuk do të hyj shumë në detaje, vetëm disa mendime dhe sugjerime për të shtuar, veçanërisht kur përdorni bibliotekat Adafruit dhe OLED 128x32 px:

në konfigurimin e zbrazëtisë:

e vendosa pjesën e bibliotekës VEML në:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (e vërtetë);

në lakun e zbrazëtisë:

sigurohuni që të shtoni kompensimin:

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

për të marrë EV nga Lux përdorni këtë linjë:

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

duke lëvizur bitmaps

për t'u siguruar që bitmap -ët lëvizin vetëm kur vlerat janë midis 160Lux dhe 655360Lux siç është thënë në një hap të mëparshëm, mbështilleni atë në një klauzolë if si kjo:

nëse (LUX_CORR> 159 && LUX_CORR <655361)

Tjetra ne duhet të hartojmë vlerat e EV në koordinata, pasi diapazoni i EV -ve është dyshifrorë dhe ne duam t'i zhvendosim ato nga jashtë ekranit mbi 128px në të gjithë ekranin që na duhen vlera më të mëdha.

Ndërsa tashmë kemi një numër notues, thjesht e shumëzojmë atë me 100 dhe e përdorim atë numër të plotë për të hartuar koordinatat

int EV_DSPL = EV*100;

dhe:

KOHA = harta (EV_DSPL, 600, 1900, -260, 39); APERTURE = hartë (EV_DSPL, 600, 1900, 39, -260);

Siç mund ta shihni në rastin tim, pozicioni minimal i bitmap do të ishte -260px dhe maksimumi do të ishte 39px

Ajo që gjithashtu mund të shihet këtu është se i ndërrova koordinatat në mënyrë që dy hartat bit të lëvizin në drejtim të kundërt

Tjetra ne duhet të lëvizim bitmaps sipas koordinatave nga:

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

Dhe kjo është gjithçka që duhet bërë

Si bonus unë shfaq vlerat e drejtpërdrejta të EV dhe Lux kur sensori del me vlera nën 160Lux, vetëm sepse doja të shikoja gjëra kur e testoja.

Hapi 5: Vendosja së bashku

Duke e vënë atë së bashku
Duke e vënë atë së bashku
Duke e vënë atë së bashku
Duke e vënë atë së bashku

Si të dy, ekrani dhe sensori po përdorin I2C për të komunikuar, ndërtimi i harduerit aktual është aq i thjeshtë sa mund të jetë.

Thjesht lidhni të dhënat, orën e tokës dhe linjat 3V me Arduino dhe jeni gati për të shkuar.

Unë shtova një grafik se si e bëra atë me një stripboard, por siç u tha më herët ju mund të përdorni kabllo ose edhe të ndërtoni një krah për të, gjithçka varet nga cili kontrollues dhe ekran që përdorni.

Në grafikun tim, pikat e bardha supozohet të jenë të lidhura me ekranin dhe sensorin dhe pikat e verdha të lidhen me xhingël.

Përjashtimi i vetëm do të ishte pin-i i të dhënave i linjës I2C që lidhet me ekranin, ai pin gjithashtu lidhet me pinin e të dhënave Trinkets.

Zgjodha të mos përdor një çelës ndezje/fikje, por në vend të tij të përdor një buton dhe dy qeliza të butonit 3V për ta ndezur përkohësisht atë për aq kohë sa unë shtyp butonin. Fuqizohet nën 1/10 e sekondës në mënyrë që të jetë mjaft e shpejtë për mua që të kursej një buton dhe ta bëj atë më të vogël.

Recommended: