İçindekiler:

DIY Fotoğrafik Işık Ölçer: 5 Adım
DIY Fotoğrafik Işık Ölçer: 5 Adım
Anonim
DIY Fotoğrafik Işık Ölçer
DIY Fotoğrafik Işık Ölçer
DIY Fotoğrafik Işık Ölçer
DIY Fotoğrafik Işık Ölçer

Bu Eğitilebilir Kitap, basit, küçük ve ucuz bir ışık ölçer oluşturmaya ilişkin bazı fikirleri paylaşmaktadır.

Instructables kendi videolarımı eklememe izin vermediğinden, bu bağlantıyı deneyin:

www.youtube.com/embed/avQD10fd52s

Benim için amaç Bronica ETRi orta format film kamerama eşlik edecek bir ışık ölçerdi.

Öne çıkmasını istediğim şeyler:

  • tek ASA (100) çünkü neredeyse sadece ASA 100 filmi kullanıyorum
  • mümkün olduğunca küçük
  • bana sadece Bronica'mın yeniden üretebileceği kombinasyonları verin, bu da f2.8-f22 ve 1sn ila 1/500thsn anlamına gelir
  • düz zamanlar ve diyafram değerleri dışında saçma sapan özellikler yok

Kullandığım şeyler:

  • Adafruit(Vishay) VEML 7700 dijital Lux-metre (yaklaşık 5$)
  • Adafruit Biblo M0 mikro denetleyici (yaklaşık 9$)
  • 128x32 OLED ekran (yaklaşık 10$)
  • geçici olarak açmak için bir buton (bazı sentler)
  • küçük bir şerit levha parçası, çünkü kablo kullanmamaya çalışıyorum ama kesinlikle kabloları da kullanabilirsiniz

Adım 1: Temel Hesaplamalar | Lüksten EV'ye

Temel Hesaplamalar | Lüksten EV'ye
Temel Hesaplamalar | Lüksten EV'ye
Temel Hesaplamalar | Lüksten EV'ye
Temel Hesaplamalar | Lüksten EV'ye

Satın aldığım sensör, ona karar vermeme izin veren iki özellik kullanıyor:

  • "boyutsuz" ışık değerleri yerine 16 bit lüks değerleri verir
  • değerleri I2C aracılığıyla verir

Bir fotoğrafik ışık ölçer Pozlama Değerlerini (EV) kullanır, satın aldığım sensör tamamen farklı bir ölçek olan Lux değerlerini kullanır. Dolayısıyla ilk adım, sensör tarafından sağlanan Lux değerlerinden EV'leri elde etmektir.

Vikipedi'ye hızlı bir bakış ve olay ölçümü için bir formül bulabilir ve EV'yi Lüks'e dönüştürebilirsiniz:

E =2,5 * 2^EV

burada E, Lux cinsinden ölçülür.

Sensörden Lux değerini zaten aldığımız ve EV değerini istediğimiz için formülü yeniden oluşturmamız gerekiyor, bu da bizi aşağıdakilere ulaştırıyor:

EV = log2 (E/2.5)

Yani ışıkölçerden fotografik değerler almak için yapılması gereken ilk hesaplama budur.

Ekteki arama tablosunda, bu ışık ölçerde kullanılacak tüm değerleri, buna göre Lux ve EV değerleri ile birlikte görebilirsiniz.

Adım 2: Değerlerin Ekranda Sunulması | Adafruit GFX Kitaplığı

Değerlerin Ekranda Sunulması | Adafruit GFX Kitaplığı
Değerlerin Ekranda Sunulması | Adafruit GFX Kitaplığı
Değerlerin Ekranda Sunulması | Adafruit GFX Kitaplığı
Değerlerin Ekranda Sunulması | Adafruit GFX Kitaplığı
Değerlerin Ekranda Sunulması | Adafruit GFX Kitaplığı
Değerlerin Ekranda Sunulması | Adafruit GFX Kitaplığı

İlk önce değerleri tam adımlarda sunmaya çalıştım, çünkü Bronica'mı buna ayarlayabiliyorum, ancak bu beni bir soruna götürüyor:

Lux sensörünün tam olarak 20480 değerinde bir çıktı verdiğini varsayalım, bu tam olarak EV 13 anlamına gelir, böylece örneğin kameramı f4 ve saniyenin 1/500'üne ayarlayabilirim ve gitmem iyi olur

Ardından, Lux sensörünün 20479 Lux, EV13 altında 1 Lux, yani 12'lik bir EV değeri çıkaracağını, ancak EV13'ten yalnızca bir Lux uzakta olduğunu varsayalım

Bu yüzden kameramı f2.8 ve 1/500'e ayarlardım, bu da EV13'e ne kadar yakın olduğumu bile bilmeden 1 durağı aşırı pozlayacaktı.

Sonuç: En azından sayacın bir sonraki veya önceki EV adımından ne kadar yakın veya uzak olduğunu görmek için değerlerin bir tür analog görüntüsüne ihtiyacımız var.

GFX kitaplığının yerleşik harflerini ve yazı tipini kullanmaya çalıştıktan sonra, OLED ekranında hareket edecek iki özel grafik kullanmaya karar verdim.

Biri diyafram değerleri için, biri de zamanlar için.

GFX Kitaplığı, grafikleri sunmak için 8 bit değerleri kullanır, bu yüzden bir xls sayfası yaptım (yukarıdaki resme bakın).

  • her değer, değer başına tam olarak aynı miktarda piksele sahiptir
  • zamanlar ve açıklıklar, satır başına tam olarak aynı miktarda değere sahiptir
  • Her baytın başına gerekli "B"yi ve sonuna "," ekledim.
  • Daha sonra düz bir metne aktardım ve işte: üçüncü grafiği ekledim

Zaman değerleri saniyenin 1/8'i ile başlar ve diyafram değerleri f2.8 ile başlar

Önceki adımın arama tablosunu kullanarak bunun 160 Lux veya EV6'yı temsil ettiğini biliyoruz.

Bu durumda en karanlık değerler f22 ve saniyenin 1/500'ü olacaktır

Yine arama tablosundan bunun 655360 Lux veya EV18 anlamına geldiğini görebiliriz.

Çok uzak çok iyi.

Bu nedenle EV6'da diyafram grafiği en solda, zamanlar en sağda ve EV18'de ise tam tersi olmalıdır.

Adım 3: Lüks Değerlerinin Okunması ve Dengelenmesi | VEML7700

Lüks Değerlerinin Okunması ve Dengelenmesi | VEML7700
Lüks Değerlerinin Okunması ve Dengelenmesi | VEML7700
Lüks Değerlerinin Okunması ve Dengelenmesi | VEML7700
Lüks Değerlerinin Okunması ve Dengelenmesi | VEML7700

Adafruit'in panoları için kullandığı Vishay VEML7700'ün veri sayfasında gezinirken oldukça rahatsız edici bir uyarı buldum:

Sensör yalnızca 0 ile 1000Lux (!) arasında doğrusal çalışır

turuncu (doğrusal) çizgi ve mavi (gerçek sensör çıkışı) çizgi ile ekran görüntüsüne bakın

Güneş ışığı (EV15) 80.000 Lux civarındadır, bu da sensörün doğrusal olmayan kısmının telafisi olmadan bir ışık ölçer olarak tamamen işe yaramaz olacağı anlamına gelir.

Vishay bunu biliyor, bu yüzden müşterilerine VEML7700'ü Uygulamaya Tasarlamak adlı başka bir pdf sağladılar.

Bu pdf'de, sensörlerin doğrusal olmama durumunu telafi etmek için bir formül bulabilirsiniz:

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

LUX_CORR, düzeltilmiş Lüks Değeri ve LUX, sensörün verdiği değerdir.

Bunlar benim kullandığım değişkenler, sayfalarında kullanılanlar farklı.

Beni biraz rahatsız eden şey, Adafruit'in sayfalarında, belgelerinde, kitaplıklarında veya başka bir yerde bundan tek bir kelimeyle bahsetmemesi.

Bu yüzden ilk birkaç gün, ışık ölçerimin neden doğrudan güneş ışığında bile maksimum 20000 Lux çıkış verdiğini merak ediyordum.

Kırmızı ve mavi çizgili grafiğe bakarsanız nedenini görebilirsiniz: çünkü telafi formülü olmadan daha yükseğe çıkamaz.

Ancak sensörün belgelerinde gizlenmiş başka bir ipucu daha var:

Bu telafi formülü yalnızca sensörü 25 ms'ye ve 1/8 kazanç oranına ayarlarsanız çalışır.

Adafruits kütüphanesi ile aşağıdakileri ekleyerek oldukça kolay bir şekilde yapılır:

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

boş kurulumunuzda ()

1/8 ve 25ms'ye ayarladıktan ve telafi formülünü ekledikten sonra, 80-100k Lux'ta güneş ışığını kapsayacak kadar 120000 lux'e kadar ölçüm yapabilirsiniz

Adım 4: Arduino / C-kodu

Kullandığınız ekrana ve tercih ettiğiniz denetleyiciye bağlı olduğu için, özellikle Adafruit kitaplıklarını ve 128x32 piksel OLED'i kullanırken, eklemek için çok fazla ayrıntıya girmeyeceğim, yalnızca birkaç düşünce ve ipucu ekleyeceğim:

boşluk kurulumunda:

VEML kitaplığı bölümünü şu şekilde ayarladım:

veml.setGain(VEML7700_GAIN_1_8);

veml.setIntegrationTime(VEML7700_IT_25MS);

veml.setLowThreshold(10000);

veml.setHighThreshold(20000);

veml.interruptEnable(true);

boşluk döngüsünde:

tazminatı eklediğinizden emin olun:

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

Lux'tan EV almak için bu satırı kullanın:

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

bitmap'leri taşıma

bitmap'lerin yalnızca önceki adımda belirtildiği gibi değerler 160Lux ile 655360Lux arasında olduğunda hareket ettiğinden emin olmak için, onu şöyle bir if yan tümcesine sarın:

if (LUX_CORR > 159 && LUX_CORR <655361)

Daha sonra EV değerlerini koordinatlarla eşleştirmemiz gerekiyor, çünkü EV'lerin aralığı çift haneli olduğundan ve bunları ekranın dışından 128 pikselin üzerine tüm ekran boyunca taşımak istiyoruz, daha büyük değerlere ihtiyacımız var.

Zaten bir kayan sayıya sahip olduğumuz için bunu 100 ile çarparız ve koordinatları eşlemek için bu tamsayıyı kullanırız.

int EV_DSPL = EV*100;

ve:

ZAMAN = harita(EV_DSPL, 600, 1900, -260, 39);APERTURE = harita(EV_DSPL, 600, 1900, 39, -260);

Benim durumumda görebileceğiniz gibi, bitmap'in minimum konumu -260 piksel ve maksimum 39 piksel olacaktır.

Burada da görülebilen şey, iki bitmap'in ters yönde hareket etmesi için koordinatları değiştirdiğimdir.

Ardından, bitmapleri koordinatlara göre şu şekilde hareket ettirmemiz gerekiyor:

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

Ve yapılması gereken tek şey bu

Bonus olarak, sensör 160Lux'un altındaki Değerleri verdiğinde düz EV ve Lux değerlerini görüntülüyorum, çünkü test ederken bir şeyler görmek istedim.

Adım 5: Bir araya getirmek

Bir araya getirmek
Bir araya getirmek
Bir araya getirmek
Bir araya getirmek

Hem ekran hem de sensör iletişim kurmak için I2C kullandığından, gerçek donanımı oluşturmak olabildiğince basittir.

Sadece Veri, Saat toprağı ve 3V hatlarını Arduino'ya bağlayın ve gitmeye hazırsınız.

Bir stripboard ile nasıl yaptığımın bir grafiğini ekledim, ancak daha önce de söylendiği gibi kabloları kullanabilir veya hatta bunun için bir kanat bile yapabilirsiniz, hepsi hangi denetleyiciyi ve ekranı kullandığınıza bağlıdır.

Grafiğimde beyaz noktaların ekrana ve sensöre, sarı noktaların Bibloya bağlanması gerekiyor.

Tek istisna, ekrana bağlanan I2C hattının veri pini olacaktır, bu pin aynı zamanda Trinkets veri pinine de bağlanır.

Bir açma/kapama anahtarı kullanmamayı seçtim, bunun yerine düğmeye bastığım sürece geçici olarak açmak için bir buton ve iki adet 3V düğme hücresi kullandım. Saniyenin 1/10'undan daha kısa sürede açılıyor, bu yüzden bir düğmeyi ayırıp küçültmem için yeterince hızlı.

Önerilen: