AVR ile BH1750 Luxmetre Kullanımı

Bu uygulamada yine kullanımı oldukça basit olan BH1750 entegresini kullanıp basit bir luxmetre yapacağız. BH1750 Çin menşeili sitelerde çok uygun fiyatlara modül halinde satılmaktadır. En önemli özelliği ise I2C üzerinden haberleşmesi ve lux değerini hesaplayıp sayı olarak bize bildirmesidir. Yani bizim herhangi bir hesaplama, formül ile işimiz olmayacak ve doğrudan lux değerini okuyacağız.

Öncelikle BH1750 entegresini tanımak adına datasheetini açalım ve okumaya başlayalım.
https://www.mouser.com/datasheet/2/348/bh1750fvi-e-186247.pdf

Datasheetin ilk sayfasında çeşitli özelliklerden bahsedilse de bizim dikkatimizi çeken “Small measurement variation (+/- 20%)” kısmı oldu. Burada ölçüm değişikliğinin %20'leri bulabildiğinden bahsedilmekte. Uygulama alanlarında ise ölçüm cihazlarından çok tablet, telefon, kamera gibi ışığın şiddetinin çok hassas ölçümü gerekmeyen cihazlar yazmakta. Bu entegre ile bizim yapacağımız luxmetre ufak işleri görüp, öğrenci projelerinde yer alabilse de bilimsel bir ölçüm cihazı yerine kullanılamayacaktır. Yine de ben bu luxmetre ile çalışma odamın ışık şiddetini ölçüp buna göre aydınlatmayı ayarladım.

Entegrenin blok diyagramına baktığımızda bir fotodiyot, kuvvetlendirici, ADC ve mantık devresini görmekteyiz. Oldukça basit bir yapıda olsa da dijital olmasından dolayı bizim işimizi kolaylaştırmaktadır.

Ölçüm prosedürü kısmında nasıl ölçüm yapacağımız noktasında bilgi sahibi oluyoruz. Entegreye güç verildiğinde “Power Down” modunda başlıyor. Önce “Power On” moduna getirmeli ve sonrasında ise ölçüm komutunu yollayarak bu ölçümü okumalıyız. Ölçüm modu tek seferlik ölçüm ve devamlı ölçüm olarak ikiye ayrılmakta.

Bu kısımda ise komutları görmekteyiz. I2C arayüzü vasıtasıyla istediğimiz komutu yazıp çalıştıracağız. Biz şimdilik sadece bir defalık yüksek çözünürlüklü bir ölçüm yapmak istiyoruz. Bunun için aşağıda yer alan örnekten faydalanacağız.

Burada öncelikle START durumunu belirleyip sonrasında aygıtın adresini yazdıktan sonra istediğimiz komutu yazıp STOP durumuna geçiyoruz. Sonrasında ise okuma modunda başlatıp, aygıtın adresini yazdıktan sonra yüksek bayt ve düşük bayt olmak üzere toplamda 16-bitlik okuma değerini okuyoruz. Ayrıca bu okunan değeri lux verisine dönüştürmek için 1.2'ye bölmemiz gerektiği yazmakta. Bütün bu bilgilerle örnek bir kod yazıp çalıştıralım.

Burada daha önce yaptığımız gibi i2cscanner programı ile BH1750'nin adresini tespit edebileceğimiz gibi datasheette yazan adresi de doğrudan yazabiliriz. Bu uygulamada da daha öncekilerde olduğu gibi Peter Fluery’in UART ve I2C kütüphanelerini kullandık.

Öncelikle I2C iletişimini başlatıp 0x01 değerini yazıyoruz. Bu değer entegreyi datasheette yazdığı üzere “Powen On” durumuna getirecektir. Bu durumda entegre açık konuma gelmiş oluyor ve bizden gelen ölçüm komutunu bekliyor. Biz ise bir sonraki yazma işleminde bu komutu yazıyoruz.

i2c_write(0x20);

Burada datasheette yer alan 0010_0000 komutunu yani yüksek çözünürlükte tek ölçüm komutunu modüle yazdık ve şimdi okuma moduna geçerek gelen ölçüm verisini alacağız. Yalnız okuma için belli bir süre gerektiği için araya bir bekleme fonksiyonu da koyduk.

i2c_start_wait(BH17150_ADDR+I2C_READ);
okuma = i2c_readAck();
okuma <<= 8;
okuma |= i2c_readNak();
float lux = okuma / 1.2F;

Burada önce yüksek baytı sonrasında ise düşük baytı okuyup okuma adındaki uint16_t tipindeki değişkene atadık. Sonrasında datasheette 1.2 ile çarpmamız gerektiği yazdığından lux adında bir float değişken oluşturup okuma değerini 1.2'ye bölüp buna aktarıyoruz.

Ben programı çalışma ortamımda çalıştırdığımda şöyle bir çıktı aldım.

Çalışma ortamınızda yeterli ışık olduğundan emin olmanız gereklidir. Marketlerde satılan tasarruflu ampüller ve led lambalar genellikle tasarrufa yönelik olup yeterli ışığı sağlamamaktadır. Bunun için LED torch ampülleri kullanmanızı tavsiye ederim. Ortamda yetersiz ışık olmasının aynı zamanda miyopi gibi göz bozukluklarına da yol açtığını tıp uzmanları söylemektedir. Benim tavsiyem 10m2 oda için en az 30W LED torch ampül kullanmanızdır. Hatta 40W da kullanabilirsiniz. Şu bağlantılarda ortamların gerekli lux değerlerini görebilirsiniz.

Bir sonraki uygulamalarda bu modülle çeşitli uygulamalar yapacağız.

--

--