3.5- MicroPython’da BH1750 ve MAX7219 ile Lüksmetre Uygulaması

Lüksmetre ışığın şiddetini lux biriminden ölçmemize yarayan teknik ölçüm cihazlarıdır. Özellikle çalışma ortamında iş güvenliği açısından aydınlatmanın ne eksik ne fazla olması gereklidir. Karanlık ortamda çalışmak elektronik işlerinde işimizi zorlaştırdığı gibi çalışma verimimizi de olumsuz etkileyebilir. Bunun için çalışma ortamımızın en az 200 lux olması tavsiye edilir. Her ne kadar diğer lüksmetreler ile kıyaslanacak seviyede ölçüm yapamasa da BH1750 ışığın şiddetinin ölçülmesi gereken ve bunun çok çok isabetli olması gerekmeyen durumlarda kullanılabilir. En basit örnek olarak arkaplan aydınlatmada veya bir LED göstergenin parlaklığını belirlemede bu modül kullanılabilir. Bu modül I2C protokolü ile haberleşme sağlayıp bizi hiç analog tarafla meşgul etmeden doğrudan lux birimini bize göndermektedir.

BH1750’nin datasheetini aşağıdaki bağlantıdan inceleyebilirsiniz.

https://www.mouser.com/datasheet/2/348/bh1750fvi-e-186247.pdf

Burada modülün genel özelliklerine baktığımızda öncelikle çalışma geriliminin 3.3V mantık seviyesinde olduğunu görüyoruz. Absolute maximum ratings içerisinde ise besleme geriliminin 4.5V olduğunu görmekteyiz. Yani bu entegreyi 5V ile beslerseniz yanacağı anlamına gelmektedir. İlk sayfada ölçüm değerlerinin +-%20’yi bulduğunu ve kızıl ötesinden ufak da olsa etkilendiğini yazmakta. Ölçüm aralığı ise 1–65535 lux olarak belirtilmiş.

Bu özellikler kendi lüksmetremizi yapmamız için yeterli görünmekte. Şimdi bu algılayıcının nasıl çalıştığı hakkında fikir sahibi olmak için blok diyagramı inceleyelim.

Burada fiziksel dünya ile elektronik arasındaki köprüyü en sol tarafta yer alan fotodiyot kurmakta. Fotodiyot üzerine düşen ışık şiddeti kadar üzerinden akım geçirmekte. Bir sonraki sırada yer alan kuvvetlendirici bu akımı gerilime çevirmek için kullanılmakta. Sonrasında ise bu gerilimi dijital dünyaya aktarmak için 16-bit ADC (Analog-dijital çevirici) kullanılmakta. Elde edilen dijital veriyi iletişimde kullanmak ve bu devrenin kontrolünü sağlamak için ise bir mantık devresi kullanılmakta.

Bu devreyi incelediğimizde aslında bunun devresini biz de yapabiliriz gibi görünmekte. Ama o kadar zahmete girmeye değmeyeceği gibi kullanacağımız malzemelerin özellikleri yapacağımız uygulamaya uygun olmalıdır. En önemlisi de analog ve dijital elektronik konusunda bilgi sahibi olup devre tasarımını doğru yapmak gereklidir. Bu tarz dijital modüllerin en büyük kolaylığı derin analog elektronik bilgisine ihtiyaç duymadan bu tarz uygulamaları yapmamıza imkân vermektedir. Elektronik ayrı bir dünya olduğu için bilgisayar bilimleri ve yazılım geliştirme ile meşgul olanların çok içine girememesi gayet doğaldır.

Datasheetin devamında bir akış şeması (flow chart) olarak nasıl ölçüm yapacağımız noktasında bilgi verilmiştir. Bu akış şemasından anladığımız üzere şu işlemleri gerçekleştirmemiz gerekecektir.

· Entegreye güç verildiğinde “Power down” modunda, yani kapalı olarak başlamaktadır. Bizim bunu sonrasında “Power on” moduna getirmemiz yani açmamız gereklidir.
· Sonrasında ölçüm komutu yollanarak ölçüm gerçekleştirilmelidir. Ölçüm sürekli ölçüm ve tek seferlik ölçüm olarak ikiye ayrılmaktadır.
· Ölçüm tek sefer ise otomatik olarak modül kendini kapatmakta yani “Power down” moduna geçmektedir.

Biz bu entegreyi kullanırken belli başlı komutları yazdırarak kullanırız. MAX7219’da yazmaçlara değer yazdırırken burada komut gönderme şeklinde bunu yapmaktayız. Bu komutlar şu şekilde tabloda verilmiştir.

Datasheetin devamında nasıl kodları göndereceğimiz ve nasıl bitleri okuyacağımız açıklanmıştır.

Datasheette yer alan örnek okuma şu şekilde gerçekleştirilmektedir.

1. maddede START bitinden sonra adres değeri yazılır ve sonrasında 00010000 komutu yazdırılır. Bu sayede okuma başlangıcı gerçekleşir.

2. maddede ölçümün tamamlanması için beklememiz gereken süre (180ms) belirtilmektedir.

3. maddede ise aygıtın adresiyle beraber okuma modunda iletişimi başlatıp ilk önce üst bayt sonrasında ise alt bayt okumasını gerçekleştiririz.

Yazılımda ise bu iki baytı birleştirip bunu 1.2’ye bölmemiz gereklidir. Bu sayede lux değerini elde etmiş oluruz.

BH1750’yi kullanmak için son bilmemiz gereken ise aygıtın adresidir. Datasheetten adresi ADDR ayağı 0 ise (veya modülde boştaysa) 0x23, ADDR ayağı 1 ise 0x5C olduğunu öğreniyoruz.

BH1750’yi MAX7219 ile beraber kullanmak için şöyle bir devre kurmamız gereklidir.

bh1750 için ayrı bir modül oluşturmak yerine program içinde bir sınıf oluşturulmuştur. Modülün tüm özelliklerini kullanacağımız metotları eklemek yerine üreticinin tavsiye ettiği yüksek çözünürlük modunda tek bir ölçüm yapılmıştır. Ölçüm tek seferlik olarak yapılıp güç tasarrufu adına ölçüm tamamlandıktan sonra modül kendini kapatmaktadır.

Burada ölçüm süresi 180ms olup zamanlamanın önemli olduğu uygulamalarda yavaş kalmaktadır. Alternatif olarak düşük çözünürlükte sadece 16 mili saniyede ölçüm yapabiliriz. Bu durumda elde edeceğimiz lux değerinden çok gölge, karanlık, aydınlık gibi ışığın durumlarını hızlı bir sürede ayırt edebiliriz.

I2C protokolünde veri gönderirken bytes tipinde göndermemiz gerektiğinden tam sayıyı int.to_bytes() metodu ile bayt dizisine dönüştürmemiz gereklidir. Bunun haricinde eğer bayt değerlerini tek tek yazmamız gerekiyorsa bytes() metodu da kullanılabilir. I2C’den okuma yaptığımızda bunu tamsayıya çevirmek için int.from_bytes() metodunu kullanmamız gerekecektir.

--

--