- BH1750 Dijital Işık Sensörü Modülüne Giriş
- Arduino
- BH1750 Işık Sensörü arabirimi için Arduino programlama
Telefonunuzu güneş ışığında veya yüksek ışıkta aldığınızda, aydınlatma koşullarına göre parlaklığı otomatik olarak ayarlar. İster TV, ister cep telefonu olsun, görüntüleme cihazlarının çoğu, parlaklığı otomatik olarak ayarlamak için Ortam Işığı Sensörüne sahiptir. Bugün bu eğiticide, böyle bir sensör BH1750 Işık Sensörü Modülü kullanacağız ve Arduino ile arayüz oluşturacak ve Lux değerini 16x2 LCD üzerinde göstereceğiz.
BH1750 Dijital Işık Sensörü Modülüne Giriş
BH1750, cep telefonlarında, LCD ekranlarda ekran parlaklığını otomatik olarak ayarlamak veya dış aydınlatma koşullarına bağlı olarak otomobillerdeki farları açmak / kapatmak için kullanılabilen bir Dijital Ortam Işığı Sensörü veya Işık Yoğunluğu Sensörüdür.
Sensör, mikro denetleyicilerle kullanımı kolaylaştıran I 2 C seri iletişim protokolünü kullanır. I2C iletişimi için SDI ve SDA pinlerine sahiptir. BH1750 çevre ışık algılayıcı pin dizilimi aşağıda gösterilmiştir:
Bu sensörün çıkışı LUX (lx) cinsindendir, bu nedenle başka hesaplamalar gerektirmez. Lux, Işık yoğunluğunu ölçen birimdir. Yoğunluğu, belirli bir alana çarpan ışık miktarına göre ölçer. Bir lüks, metrekare başına bir lümene eşittir.
Sensör, 2.4V ila 3.6V (tipik olarak 3.0V) arasındaki voltajlarda çalışır ve 0.12mA akım tüketir. Bu sensör geniş bir aralığa ve yüksek çözünürlüğe (1-65535lx) sahiptir ve buna ek olarak, ölçüm varyasyonu da küçüktür (yaklaşık +/-% 20). Ayrıca herhangi bir harici bileşen olmadan bağımsız olarak çalışabilir.
Her ne kadar bir LDR sensörü, cihazları aydınlatma koşullarına göre kontrol etmek için de kullanılabilir, ancak o kadar doğru değildir. Birçok ışık kontrollü uygulama oluşturmak için LDR sensörünü kullandık:
- LDR kullanarak Arduino Işık Sensörü Devresi
- LDR ve 555 Zamanlayıcı IC kullanan Karanlık Dedektör
- Işığı Algılamak için Basit LDR Devresi
- RGB LED ve LDR kullanan Arduino Renk Karıştırma Lambası
Arduino
BH1750 Işık sensörünü Arduino ile bağlamak için devre şeması aşağıda gösterilmiştir.
BH1750'nin I2C iletişim pinleri SDA ve SCL, I 2 C iletişimi için sırasıyla Arduino pin A4 ve A5'e bağlanır. Sensörün çalışma voltajının 3.3v olduğunu bildiğimiz için BH1750'nin VCC ve GND'si Arduino'nun 3.3V ve GND'sine bağlanır. LCD için veri pinleri (D4-D7) Arduino'nun D2-D5 dijital pinlerine, RS ve EN pinleri ise Arduino'nun D6 ve D7'sine bağlanır. LCD'nin V0'ı pota bağlanır ve LCD parlaklığını kontrol etmek için 10k pot kullanılır.
BH1750 Işık Sensörü arabirimi için Arduino programlama
Bu LUX sensörünü Arduino ile kullanmak için programlama kısmı çok kolaydır. Bu sensör için bir kütüphane olmasına rağmen, onu onsuz da kullanabiliriz.
İlk olarak, LCD ve I 2 C protokolü için başlık dosyalarını ekledik.
#Dahil etmek
In kurulum fonksiyonu, her iki LCD ve sensörü başlatıldı ve LCD açılış mesajı baskılı ettik.
geçersiz kurulum () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Işık"); lcd.setCursor (0,1); lcd.print ("Yoğunluk Sensörü"); gecikme (2000); }
Burada BH1750_Read ve BH1750_Init fonksiyonları sırasıyla Lux değerlerini okumak ve yazmak için kullanılır. Wire.beginTransmission () işlev iletimini başlatmak için kullanılır ve Wire.requestFrom (adres, 2) fonksiyonu 2 kayıt sayısını gösterir kayıtları okumak için kullanılır.
Ayrıca Wire.endTransmission () , iletimi sonlandırmak için kullanılır ve Wire.write () işlevi, bu kaydın adresini girerek istenen kayda gitmek için kullanılır.
int BH1750_Read (int adres) { int i = 0; Wire.beginTransmission (adres); Wire.requestFrom (adres, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); dönüş i; } void BH1750_Init (int adres) { Wire.beginTransmission (adres); Wire.write (0x10); Wire.endTransmission (); }
In döngü fonksiyonu, biz edilir LCD üzerinde gerçek zamanlı lux değerleri baskı. Önce BH1750_Read fonksiyonundan dönüş değerini 2 ile karşılaştırın ve sonra 2'ye eşitse Lux değerlerini yazdırmaya başlayın. Burada değerler 2 ile karşılaştırılır çünkü BH1750_Read fonksiyonu register count değerini döndürür ve biz sadece 2 register okuyoruz. Böylece 2'ye ulaştığında, program ışık yoğunluğunun LUX değerlerini yazdırmaya başlar.
Daha sonra, değerleri her iki kayıt defterinden almak ve bunları ölçüm doğruluğu olan 1.2'ye bölmek için bir formül kullanılır.
boşluk döngü () { int i; uint16_t değer = 0; BH1750_Init (BH1750adresi); gecikme (200); eğer (2 == BH1750_Oku (BH1750adresi)) { değer = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("LUX olarak Yoğunluk"); lcd.setCursor (6,1); lcd.print (değer); } gecikme (150); }
Sonunda Arduino'yu çalıştırın ve programı Arduino'ya yükleyin. Program yüklenir yüklenmez LCD, LUX birimlerinde ışık yoğunluğunu göstermeye başlar. Sen gösterildiği gibi sensör etrafında ışık yoğunluğunu değiştirerek değerleri de değişebilir video aşağıda.