İçindekiler:
- Adım 1: Temel Hesaplamalar | Lüksten EV'ye
- Adım 2: Değerlerin Ekranda Sunulması | Adafruit GFX Kitaplığı
- Adım 3: Lüks Değerlerinin Okunması ve Dengelenmesi | VEML7700
- Adım 4: Arduino / C-kodu
- Adım 5: Bir araya getirmek
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
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
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ığı
İ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
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
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:
Eski Voigtländer (vito Clr) Kamera için Yeni Mikro Işık Ölçer: 5 Adım
Eski Voigtländer (vito Clr) Kamera için Yeni Mikro Işık Ölçer: Dahili ışık ölçerli eski analog kameralar için hevesli olan herkes için bir sorun olabilir. Bu kameraların çoğu 70'lerde/80'lerde üretildiğinden, kullanılan foto sensörler gerçekten eskidir ve düzgün bir şekilde çalışmayı durdurabilir. Bu
Programlamasız Işık Şiddeti Ölçer: 7 Adım (Resimli)
Programlamasız Işık Yoğunluğu Ölçer.: Bu talimat, Arduino veya başka bir mikro denetleyici veya programlama kullanmadan temel bir ışık yoğunluğu ölçer yapmakla ilgilidir. Işık yoğunluğu ölçer, farklı LED renkleriyle farklı ışık yoğunluğu seviyelerini gösterir. Kırmızı LED
Neopiksel ve Pull Up Switch Kullanarak Işık - Işık Modülünü Çekin: 6 Adım (Resimli)
Neopiksel ve Pull Up Switch Kullanarak Işık - Işık Modülünü Çekin: Işık modülünün özellikleri Arduino Uno Hardware & internet Neopixel & Enformatik Okulu'ndan ödünç alınan güç kaynağı & Ürün Tasarımı Güç kaynağı ile kontrol edilen ışık modülü Tüm fonksiyonlar
Bluetooth Uzaktan Kumandalı Işık Anahtarı -- Güçlendirme. Işık Düğmesi Çalışıyor, Ekstra Yazma Yok.: 9 Adım (Resimli)
Bluetooth Uzaktan Kumandalı Işık Anahtarı -- Güçlendirme. Işık Anahtarı Hala Çalışıyor, Ekstra Yazma Yok.: Güncelleme 25 Kasım 2017 -- Bu projenin kilovatlarca yükü kontrol edebilen Yüksek Güçlü versiyonu için bkz. Bazı BLE panoları / yazılım yığınları şarküteri
BH1750 Sensörlü Arduino DIY Işık Ölçer: 6 Adım (Resimlerle)
BH1750 Sensörlü Arduino DIY Işık Ölçer: Bu Eğitilebilir Kitapta, Arduino kullanarak büyük bir Nokia 5110 LCD ekranlı bir Işık ölçerin nasıl oluşturulacağını göstereceğim. Bir Işık Ölçer inşa etmek harika bir öğrenme deneyimidir. Bu projeyi inşa etmeyi bitirdiğinizde daha iyi bir anlayışa sahip olacaksınız