INHOUDSOPGAWE:

DIY fotografiese ligmeter: 5 stappe
DIY fotografiese ligmeter: 5 stappe

Video: DIY fotografiese ligmeter: 5 stappe

Video: DIY fotografiese ligmeter: 5 stappe
Video: НЕ ВЫБРОСИЛА СТАРЫЙ ТЮЛЬ И ХОРОШО СЭКОНОМИЛА СЕМЕЙНЫЙ БЮДЖЕТ! 4 КРУТЫЕ ИДЕИ ИЗ ТЮЛЯ! 2024, Julie
Anonim
DIY fotografiese ligmeter
DIY fotografiese ligmeter
DIY fotografiese ligmeter
DIY fotografiese ligmeter

Hierdie instruksies deel 'n paar idees oor die bou van 'n eenvoudige klein en goedkoop voorvalligmeter.

Aangesien Instructables my nie toelaat om my eie video's in te voeg nie, probeer hierdie skakel:

www.youtube.com/embed/avQD10fd52s

Die doel vir my was 'n ligmeter om my Bronica ETRSi mediumformaat filmkamera te vergesel.

Dinge wat ek wou hê dit moes bevat:

  • enkele ASA (100) omdat ek amper net ASA 100 -film gebruik
  • so klein as moontlik
  • gee my slegs kombinasies wat my Bronica kan reproduseer, wat beteken f2.8-f22 en 1sek tot 1/500 sekonde
  • geen nonsens nie, behalwe gewone tye en diafragma waardes

Dinge wat ek gebruik het:

  • Adafruit (Vishay) VEML 7700 digitale Lux-meter (ongeveer 5 $)
  • Adafruit Trinket M0 mikrobeheerder (ongeveer 9 $)
  • 128 x 32 OLED -skerm (ongeveer 10 $)
  • 'n drukknop om dit tydelik aan te skakel ('n paar sent)
  • 'n klein stuk strookbord, want ek probeer om nie kabels te gebruik nie, maar u kan ook kabels gebruik

Stap 1: Basiese berekeninge | Lux tot EV

Basiese berekeninge | Lux tot EV
Basiese berekeninge | Lux tot EV
Basiese berekeninge | Lux tot EV
Basiese berekeninge | Lux tot EV

Die sensor wat ek gekoop het, gebruik twee funksies waarmee ek daaroor kan besluit:

  • gee 16bit lux waardes af in plaas van 'dimensielose' ligwaardes
  • voer die waardes uit via I2C

'N Fotografiese ligmeter gebruik blootstellingswaardes (EV), die sensor wat ek gekoop het, gebruik Lux -waardes, wat 'n heeltemal ander skaal is. Die eerste stap is dus om EV's van die Lux -waardes te kry, mits die sensor.

Kyk vinnig na Wikipedia, en u kan 'n formule vind vir die meting van voorvalle en omskakel EV in Lux:

E = 2,5 * 2^EV

waar E in Lux gemeet word.

Aangesien ons reeds die Lux-waarde van die sensor gekry het en die EV-waarde wil hê, moet ons die formule hervorm, wat ons tot die volgende kan bring:

EV = log2 (E/2.5)

Dit is dus die eerste berekening wat gedoen moet word om fotografiese waardes uit die ligmeter te haal.

In die aangehegte opzoektabel kan u alle waardes sien wat in hierdie ligmeter gebruik gaan word, tesame met die ooreenstemmende Lux- en EV -waardes.

Stap 2: Die waardes op die skerm voorstel | Adafruit GFX -biblioteek

Die aanbieding van die waardes op die skerm | Adafruit GFX -biblioteek
Die aanbieding van die waardes op die skerm | Adafruit GFX -biblioteek
Die aanbieding van die waardes op die skerm | Adafruit GFX -biblioteek
Die aanbieding van die waardes op die skerm | Adafruit GFX -biblioteek
Die aanbieding van die waardes op die skerm | Adafruit GFX -biblioteek
Die aanbieding van die waardes op die skerm | Adafruit GFX -biblioteek

Ek het eers die waardes in hele stappe probeer voorstel, want dit is waarvoor ek my Bronica kan stel, maar dit het my tot 'n probleem gelei:

Kom ons neem aan dat die Lux -sensor 'n waarde van presies 20480 lewer, wat beteken dat dit presies EV 13 is, sodat ek byvoorbeeld my kamera op f4 en 1/500 sekonde kan plaas, en dit sal goed wees om te gaan

Kom ons neem aan dat die Lux -sensor 20479 Lux, 1 Lux onder EV13 lewer, wat 'n EV -waarde van 12 lewer, maar dit is net 'n Lux weg van EV13

Dus stel ek my kamera op f2.8 en 1/500 sekonde, wat 1 stop te veel sou blootstel sonder dat ek eers weet hoe naby ek EV13 is.

Gevolgtrekking: ons benodig 'n soortgelyke weergawe van die waardes om ten minste te sien hoe naby of ver die meter van die volgende of vorige EV -stap is.

Nadat ek probeer het om die ingeboude letters en lettertipes van die GFX -biblioteek te gebruik, het ek besluit om twee pasgemaakte grafika te gebruik wat oor die OLED -skerm beweeg.

Een vir die diafragma waardes, een vir die tye.

Die GFX -biblioteek gebruik 8bit -waardes om grafika voor te stel, so ek het 'n xls -blad gemaak (sien prent hierbo).

  • elke waarde het presies dieselfde hoeveelheid pixels per waarde
  • tye en diafragma's het presies dieselfde hoeveelheid waardes per ry
  • Ek het die nodige "B" bygevoeg aan die begin van elke greep en die "," aan die einde
  • Ek het dit dan na 'n gewone teks uitgevoer en voila: ek het die derde grafika aangeheg

Tydwaardes begin by 1/8 van 'n sekonde en diafragma waardes begin met f2.8

Deur die opzoektabel van die vorige stap te gebruik, weet ons dat dit 160 Lux of EV6 verteenwoordig.

Die donkerste waardes is dan f22 en 1/500 sekonde

Weereens kan ons sien via die soektafel dat dit 655360 Lux of EV18 beteken

So ver so goed.

So op EV6 moet die diafragma -grafiek heel links wees, die tye heel regs, en omgekeerd op EV18

Stap 3: Lees en kompenseer die Lux -waardes | VEML7700

Lees en kompenseer van die Lux -waardes | VEML7700
Lees en kompenseer van die Lux -waardes | VEML7700
Lees en kompenseer die Lux -waardes | VEML7700
Lees en kompenseer die Lux -waardes | VEML7700

Terwyl ek deur die datablad van die Vishay VEML7700 Adafruit -gebruike vir hul bord blaai, het ek 'n nogal ontstellende kennisgewing gevind:

Die sensor werk slegs lineêr tussen 0 en 1000Lux (!)

sien die skermkiekie met die oranje (lineêre) lyn en die blou (werklike sensoruitset) lyn

Sonlig (EV15) is ongeveer 80.000 Lux, wat beteken dat sonder vergoeding van die nie-lineêre deel van die sensor dit heeltemal nutteloos sou wees as 'n ligmeter.

Vishay weet dit, en daarom het hulle hul kliënte 'n ander pdf gegee met die naam Die ontwerp van die VEML7700 in 'n toepassing.

In hierdie pdf kan u 'n formule vind om die nie-lineariteit van die sensors te vergoed:

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

Waar LUX_CORR die gekorrigeerde Lux-waarde is en LUX die waarde is wat die sensor uitvoer.

Dit is die veranderlikes wat ek gebruik het, die verskillende wat in hul blad gebruik is.

Wat my 'n bietjie pla, is dat Adafruit dit nie noem met 'n enkele woord op hul bladsy, hul dokumentasie, hul biblioteek of elders nie.

Dus het ek die eerste paar dae gewonder hoekom my ligmeter slegs 20000 Lux maksimum lewer, selfs in direkte sonlig.

As u na die grafiek met die rooi en blou lyn kyk, kan u sien hoekom: omdat dit nie hoër kan gaan sonder die vergoedingsformule nie.

Maar daar is nog 'n wenk wat weggesteek is in die dokumentasie van die sensor:

Hierdie vergoedingsformule werk slegs as u die sensor op 25ms stel en 'n winsverhouding van 1/8.

Dit is redelik maklik gedoen met die Adafruits -biblioteek deur die volgende by te voeg:

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

in u leemte -opstelling ()

Dus, nadat u dit op 1/8 en 25 ms ingestel het en die kompensasieformule bygevoeg het, kan u tot 120000 lux meet, genoeg om sonlig by 80-100k Lux te bedek

Stap 4: Arduino / C-kode

Aangesien dit afhang van u gebruikte skerm en voorkeurbeheerder, sal ek nie te veel in detail ingaan nie, net 'n paar gedagtes en wenke om by te voeg, veral as u die Adafruit -biblioteke en die 128x32 px OLED gebruik:

in die nietige opstelling:

ek stel die VEML biblioteek-gedeelte op:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (waar);

in die leemte -lus:

voeg die vergoeding by:

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

Gebruik hierdie reël om EV's van Lux te kry:

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

skuif die bitmaps

Om seker te maak dat die bitmaps slegs beweeg as die waardes tussen 160Lux en 655360Lux is, soos in 'n vorige stap uiteengesit, draai dit in 'n if -klousule soos volg:

as (LUX_CORR> 159 && LUX_CORR <655361)

Vervolgens moet ons die EV -waardes aan die koördinate toewys, aangesien die omvang van die EV's dubbelsyfers is en ons dit van 128px oor die hele skerm uit die skerm wil skuif, benodig ons groter waardes.

Aangesien ons reeds 'n vlotgetal gekry het, vermenigvuldig ons dit met 100 en gebruik die heelgetal om die koördinate in kaart te bring

int EV_DSPL = EV*100;

en:

TYD = kaart (EV_DSPL, 600, 1900, -260, 39); APERTURE = kaart (EV_DSPL, 600, 1900, 39, -260);

Soos u in my geval kan sien, is die minimum posisie van die bitmap -260px en die maksimum 39px

Wat ook hier gesien kan word, is dat ek die koördinate verander het sodat die twee bitmaps in die teenoorgestelde rigting beweeg

Vervolgens moet ons die bitmaps volgens die koördinate skuif deur:

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

En dit is al wat gedoen moet word

As 'n bonus vertoon ek reguit EV- en Lux -waardes wanneer die sensor Waardes onder 160Lux uitsaai, net omdat ek dinge wou sien wanneer ek dit toets.

Stap 5: Saamvoeg

Saamvoeg
Saamvoeg
Saamvoeg
Saamvoeg

Aangesien beide die skerm en die sensor I2C gebruik om te kommunikeer, is die bou van die werklike hardeware so eenvoudig as wat dit moontlik kan wees.

Koppel net die data-, klokgrond- en 3V -lyne met die Arduino, en u is gereed.

Ek het 'n grafika bygevoeg hoe ek dit met 'n strookbord gedoen het, maar soos vroeër gesê, kan u kabels gebruik of selfs 'n vleuel daarvoor bou, dit hang alles af van watter beheerder en skerm u gebruik.

Op my grafiek is die wit kolletjies veronderstel om aan die skerm en sensor gekoppel te word, en die geel kolletjies word verbind met die Trinket.

Die enigste uitsondering sou die data-pen van die I2C-lyn wees wat met die skerm verbind word, die pen kan ook met die Trinkets-datapenn verbind word.

Ek het gekies om nie 'n aan/uit -skakelaar te gebruik nie, maar eerder 'n drukknop en twee 3V knoppieselle om dit tydelik aan te skakel solank ek op die knoppie druk. Dit word binne 1/10 sekonde aangeskakel, sodat ek vinnig genoeg is om 'n knoppie te spaar en dit kleiner te maak.

Aanbeveel: