BH1750. I2C veriyoluna sahip ortam ışığı sensörü.

BH1750. I2C veriyoluna sahip ortam ışığı sensörü.

BH1750. I2C veriyoluna sahip ortam ışığı sensörü.

BH1750, oldukça yüksek çözünürlük ve hassasiyete sahip bir ortam aydınlatma sensörüdür. Görünür ışık karşısında insan gözününkine benzer şekilde davranır ve kızılötesi radyasyondan etkilenmez ve aydınlatma türünün renk sıcaklığına bağlı değildir, yani doğal ışıkla ve doğal ışıkla iyi çalışır. farklı yapay aydınlatma türleri. Mikrodenetleyici ile dijital olarak iletişim kurar. I2C otobüsüyani kendisini okuyan devreden belirli bir mesafeye konulduğu takdirde girişime karşı dayanıklıdır. Tepki süresi oldukça düşüktür; en olumsuz koşullarda 200 ms'nin altındadır.

İçindekiler

    BH1750 Ortam ışığı sensörü

    Elektronik açıdan bakıldığında uygulaması çok basittir. Gücü (2,4V ile 3,6V arasında) ve I2C otobüsü. İsteğe bağlı olarak, iki cihazı bağlamak için veri yolu adresi değiştirilebilir (düşük seviyedeki ADDR ile 0B0100011 veya 0x23 ve yüksek seviyedeki ADDR ile 0B1011100 veya 0x5C'dir) ve VDI hattı sıfırlama işlevi için kullanılabilir. mikrodenetleyici.

    BH1750'yi bağlamak için Arduino3,3 V çıkıştan güç almanın yanı sıra, seviye dönüştürücüsünün kullanılması en doğru olanıdır. çekme dirençleri için I2C otobüsü. Bileşen veri yoluna doğrudan bağlantıyı desteklese de I2C otobüsü Seviyeyi dönüştürmeyi düşünmeden bir devreyi boyutlandırmak tavsiye edilmez.

    BH1750 ortam aydınlatma sensörü. Uygulama devresi

    Hassasiyetine göre çok ucuz olmasından dolayı popülaritesi nedeniyle, başlangıçtaki fotoğrafta görülebilen, iyi bilinen GY-30 gibi çeşitli modüller bulunmaktadır. Bir mikrodenetleyici ile prototip oluştururken bunları daha rahat bağlamak için genellikle seviye dönüştürücüler içerirler. I2C otobüsü ve 5V çıkışı yerine daha yüksek bir voltajla (3,3V'a kadar) güç sağlamak için voltaj regülatörleri Arduino.

    BH1750, aktif ve düşük güç veya uyku olmak üzere iki duruma karşılık gelen sürekli ve bireysel olmak üzere iki okuma moduna sahiptir. Sürekli okuma modu kullanıldığında BH1750 örnekleme sonrasında aktif kalır, bireysel ölçüm yapıldıktan sonra otomatik olarak uyku ve düşük güç moduna girer. Sürekli modda ilk okuma maksimum 180 ms sürer ve sonraki okumalar çözünürlüğe bağlı olarak 16 ms ile 120 ms arasında sürer.

    Sensör 4 lüks, 1 lüks ve 0,5 lüks aralıklarla (çözünürlük) ölçüm yapma kapasitesine sahiptir. BH1750, veri sayfasında 1 lüks çözünürlüğün kullanılmasını önerir; bu, 10 lüksün altındaki aydınlatmaların ayırt edilmesine olanak tanır (bu, alacakaranlığa karşılık gelir) ve ölçümü etkileyebilecek gürültüye karşı daha bağışıktır.

    1 lüks ve 4 lüks çözünürlükler, tamsayı kısmı temsil etmek için 16 bitlik veriyi kullanır, böylece maksimum 65535 lüks ölçüm elde edilebilir (doğrudan ışık olmadan güneşli bir gün). 0,5 lüks modu, ondalık kısım için en az anlamlı biti kullanır (0,5 lüksten 0,5 lükse kadar ölçülür), böylece kalan 15 bit ile maksimum 32767 lüks değeri temsil etmek mümkündür (doğrudan ışık olmadan dış mekan)

    BH1750'nin ortalama kapasitesi ile teorik güneş ışığı aydınlatması
    Makalenin yazıldığı yer ve günün teorik güneş aydınlatması (güneş enerjisi değil yasal süre) ve BH1750'nin 1 lüksteki ortalama kapasitesi

    Normalde, ortam ışığının ölçüldüğü optik pencere, görünür spektrumun tamamına karşılık gelir ve amaç, burada insanlarla karşılaştırılabilir bir hassasiyet dağılımı elde etmektir. Optik pencere azaltılırsa (ışık daha düşük bir dalga boyu aralığında ölçülür), zaman okumasını artırarak optik pencerenin etkisinin ayarlanmasını iptal etme moduyla BH1750'nin hassasiyeti artırılabilir (0,11 lükse kadar) orantılı olarak. Bu özel (büyük boyutlu) modda ayrı okumalar alındığı için bağlamın, ölçüm koşullarını özellikle değiştirmeden buna izin vermesi gerekir (örneğin, sensör çok sabit kalmalı, farklı aydınlatma koşullarına sahip bir alana hareket etmemelidir).

    BH1750 Çalışma Kodları

    Devlet
    5>

    • 0B00000000 (0x00) Düşük güç veya bekleme modu.

    • 0B00000001 (0x01) Açık.

    • 0B00000111 (0x07) Sıfırla. BH1750 veri günlüklerini temizler.

    Karar
    5>

    • 0B00010011 (0x13) 4 lüks çözünürlükte sürekli ölçüm (16 ms ile okuma süresi arasında)

    • 0B00010000 (0x10) 1 lüks çözünürlükte sürekli ölçüm (120 ms okuma süresi)

    • 0B00010001 (0x11) 0,5 lüks çözünürlükte sürekli ölçüm (120 ms okuma süresi)

    • 0B00100011 (0x23) 4 lüks çözünürlükte ölçüm (16 ms okuma süresi)

    • 0B00100000 (0x20) 1 lüks çözünürlükte ölçüm (120 ms okuma süresi)

    • 0B00100001 (0x21) 0,5 lüks çözünürlükte ölçüm (120 ms okuma süresi)

    Optik penceredeki değişiklik için ayarlama
    5>

    • 0B011MT [0,1,2,3,4] MTREG (Ölçüm Zamanı Kaydı) kaydının düşük biti.

    • 0B01000MT [5,6,7] MTREG kaydı yüksek biti.

    Arduino'dan BH1750'yi okuyun

    BH1750 ile ortam aydınlatmasını ölçmek için Arduino kütüphane kullanılıyor Tel ile iletişimi yöneten I2C otobüsü. Süreç bu tür iletişimlerde olağan bir süreçtir; ilk önce (programa girdikten sonra) aşağıdaki komutla etkinleştirilirler: Wire.begin()BH1750 ile iletişim şununla başlar: Wire.beginTransmission() ve adresiniz I2C (ADDR'nin yüksek veya düşük olmasına bağlı olarak sırasıyla 0x5C veya 0x23), karşılık gelen kodun ile gönderilmesiyle yapılandırılır. Wire.write() ve otobüs serbest bırakılır Wire.endTransmission()

    Sürekli okuma modlarından biri kullanılıyorsa, adresi içeren verileri almak için Wire.beginTransmission() kullanılır. I2C BH1750'ye erişime karşılık gelen iki bayt (çözünürlük 16 bit) istenir. Wire.requestFrom() kullanılarak okunan Wire.read()ve ilk baytı 8 bit döndürerek işaretsiz bir tam sayıya yüklenir. Otobüs daha sonra serbest bırakıldı Wire.endTransmission(). Nihai sonuç, döndürülen değerin hassasiyet faktörüne bölünmesiyle elde edilir (optik pencere değişmediyse 1,2)

    Bireysel okuma modu kullanıldığında BH1750 uyku moduna girer Aktif moda dönmek için bir konfigürasyon (aynı okuma modu veya yenisi) veya açılış kodu (0x01) gönderilebilir. Kapatma kodu (1750x0) BH00'yi uyku moduna zorlamak için kullanılabilir.

    Çözünürlüğe bağlı olan sensör okuma süresine uymak önemlidir. Bekleme kritik değilse, okumanın tamamlanmasını sağlamak amacıyla tüm durumlar için beklenen maksimum değerden biraz daha büyük olabilecek bir değer halinde birleştirilebilir.

    BH1750 için kod yazmayı daha rahat hale getirmek için Arduino, en ilgili işlem kodları aşağıdaki başlık belgesinde bulunur.

    Aşağıdaki örnek kod, ışık sensöründeki en yaygın okuma modunu gösterir I2C BH1750. Çözünürlük 1 lükstür ve okuma modu süreklidir. Örnekte seri konsolun kullanıldığı gösterilmektedir Arduino, ölçülen değerden elde edilen her sonuç.

    Yukarıda söylediğim gibi hem 1 lüks hem de 4 lüks çözünürlük modları, ölçümü bir tamsayı olarak ifade etmek için 16 bitlik veriyi kullanır. Öte yandan, 0,5 lüks modunda son bit ondalık kısmı temsil eder, yani toplam ölçüme katkıda bulunan değer ikinin katı kadar sağa kaydırılır. 1 lüks veya 4 lüks modunda son bit (LSB) 2 değerindedir0, sondan bir önceki 21, sonraki 22…0,5 lüks modunda son bit (LSB) 2 değerindedir-1, sondan bir önceki 20, sonraki 21...

    Bu veri yapısına göre iki okumanın yapılması gerektiği dikkate alınarak I2C 16 bitlik değeri elde etmek için, baytın en önemli bitlerini, yani ilk okunacak olanlarını yüklemeniz ve bunları 8 lüks çözünürlük modunda ve 1 lüks çözünürlük modunda 4 bit sola döndürmeniz gerekir. 7 lükste yalnızca 0,5 bit. 0,5 lüks modunda okuma yöntemini birleştirmek için, en anlamlı baytı işaretsiz bir tam sayıya yükleyebilir, 8 biti sola döndürebilir, en az anlamlı baytı yükleyebilir ve işaretsiz tam sayının tamamını 1 bit sola döndürebilirsiniz. gösteren ondalık kısmın değeri LSB (en az anlamlı bit) daha sonra uygulamak için.

    Mantıksal olarak 1 lüks veya 4 lüks modları için işaretsiz tam sayıların kullanılması gerekir (unsigned int) ne için Arduino rezerve etmeyin MSB (en önemli bit) işaret için ve negatif bir sayıyla değil, ölçümün gerçek değeriyle doğrudan işlem yapabilme. İçinde Arduino Ödenmesi tamsayılar 32 bit kullandığından gerekli değildir, ancak aynı program kullanıldığında da çalışacaktır. unsigned int.

    Aşağıdaki kod 0,5 lüks modunun nasıl kullanılacağını gösterir

    BH1750 sensör ve Arduino ile ortam ışığını ölçme örnekleri için belgeleri indirin.

    Yorum Ekle

    Kaçırmış Olabilirsiniz