BH1750. Sensor cahaya sekitar dengan bus I2C.

BH1750. Sensor cahaya sekitar dengan bus I2C.

BH1750. Sensor cahaya sekitar dengan bus I2C.

BH1750 adalah sensor pencahayaan sekitar dengan resolusi dan sensitivitas yang cukup tinggi. Ia berperilaku di hadapan cahaya tampak dengan cara yang sebanding dengan mata manusia dan tidak terpengaruh oleh radiasi infra merah dan juga tidak bergantung pada suhu warna dari jenis pencahayaan, yaitu, ia bekerja dengan baik dengan cahaya alami dan dengan berbagai jenis pencahayaan buatan. Ini berkomunikasi secara digital dengan mikrokontroler, dengan Bus I2C, sehingga tahan terhadap gangguan jika ditempatkan pada jarak tertentu dari rangkaian yang membacanya. Waktu responsnya cukup rendah, kurang dari 200 ms dalam kondisi yang paling tidak menguntungkan.

Daftar Isi

    BH1750 Sensor cahaya sekitar

    Dari segi elektronik, implementasinya sangat sederhana. Cukup sambungkan daya (antara 2,4V dan 3,6V) dan Bus I2C. Secara opsional, alamat bus dapat diubah untuk menghubungkan dua perangkat (dengan ADDR pada level rendah adalah 0B0100011 atau 0x23 dan dengan ADDR pada level tinggi adalah 0B1011100 atau 0x5C) dan saluran VDI dapat digunakan untuk fungsi reset dengan mikrokontroler.

    Untuk menghubungkan BH1750 ke Arduino, selain ditenagai oleh output 3,3 V, yang paling tepat adalah menggunakan konverter level selain resistor penarik untuk Bus I2C. Meskipun komponen tersebut akan mendukung koneksi langsung ke bus Bus I2C Tidak disarankan untuk mengukur suatu rangkaian tanpa mempertimbangkan konversi levelnya.

    Sensor pencahayaan sekitar BH1750. Sirkuit aplikasi

    Karena popularitasnya, dan karena presisinya yang sangat murah, maka ada beberapa modul, seperti GY-30 yang terkenal, yang dapat dilihat pada foto di awal. Untuk menghubungkannya dengan lebih nyaman saat membuat prototipe dengan mikrokontroler, mereka biasanya menyertakan konverter level untuknya Bus I2C dan pengatur tegangan untuk memberi daya pada tegangan yang lebih tinggi (hingga 5V) daripada keluaran 3,3V Arduino.

    BH1750 memiliki dua mode membaca, berkelanjutan dan individual, yang sesuai dengan dua kondisi, aktif dan daya rendah atau tidur. Sedangkan jika digunakan mode baca terus menerus, BH1750 tetap aktif setelah pengambilan sampel, setelah melakukan pengukuran individual secara otomatis masuk ke mode tidur dan daya rendah. Pembacaan pertama dalam mode berkelanjutan memerlukan waktu maksimum 180 mdtk dan pembacaan berikutnya antara 16 mdtk dan 120 mdtk, bergantung pada resolusi.

    Sensor mampu melakukan pengukuran pada interval (resolusi) 4 lux, 1 lux dan 0,5 lux. BH1750 merekomendasikan dalam lembar datanya untuk menggunakan resolusi 1 lux, yang memungkinkan Anda membedakan pencahayaan di bawah 10 lux (yang berhubungan dengan senja) dan yang lebih kebal terhadap kebisingan yang dapat memengaruhi pengukuran.

    Resolusi 1 lux dan 4 lux menggunakan 16 bit data untuk mewakili bagian bilangan bulat sehingga pengukuran maksimum 65535 lux dapat dicapai (hari cerah tanpa cahaya langsung). Mode 0,5 lux menggunakan bit paling signifikan untuk bagian desimal (berukuran dari 0,5 lux hingga 0,5 lux) sehingga dengan 15 bit sisanya dimungkinkan untuk mewakili nilai maksimum 32767 lux (bagian luar tanpa cahaya langsung)

    Penerangan matahari teoretis versus kapasitas rata-rata BH1750
    Penerangan matahari teoritis pada tempat dan hari penulisan artikel (waktu resmi, bukan matahari) versus kapasitas rata-rata BH1750 pada 1 lux

    Biasanya, jendela optik yang digunakan untuk mengukur cahaya sekitar sesuai dengan seluruh spektrum tampak dan tujuannya adalah untuk mencapai distribusi sensitivitas di dalamnya yang sebanding dengan manusia. Jika jendela optik dikurangi (cahaya diukur pada rentang panjang gelombang yang lebih rendah) sensitivitas BH1750 dapat ditingkatkan (hingga 0,11 lux) dengan mode pembatalan penyesuaian pengaruh jendela optik dengan meningkatkan waktu pembacaan dalam proporsi. Karena dalam mode khusus (ukuran besar) ini pembacaan terpisah dilakukan, konteksnya harus memungkinkan hal ini tanpa mengubah kondisi pengukuran secara khusus (misalnya, sensor harus tetap sangat stabil, tidak boleh berpindah ke area dengan kondisi pencahayaan berbeda)

    Kode Operasi BH1750

    Estado
    5>

    • 0B00000000 (0x00) Daya rendah atau mode siaga.

    • 0B00000001 (0x01) Diaktifkan.

    • 0B00000111 (0x07) Mengatur ulang. Menghapus log data BH1750.

    Resolusi
    5>

    • 0B00010011 (0x13) Pengukuran berkelanjutan pada resolusi 4 lux (antara 16 ms dan waktu membaca)

    • 0B00010000 (0x10) Pengukuran berkelanjutan pada resolusi 1 lux (waktu membaca 120 ms)

    • 0B00010001 (0x11) Pengukuran berkelanjutan pada resolusi 0,5 lux (waktu membaca 120 ms)

    • 0B00100011 (0x23) Pengukuran pada resolusi 4 lux (waktu membaca 16 ms)

    • 0B00100000 (0x20) Pengukuran pada resolusi 1 lux (waktu membaca 120 ms)

    • 0B00100001 (0x21) Pengukuran pada resolusi 0,5 lux (waktu membaca 120 ms)

    Penyesuaian untuk perubahan jendela optik
    5>

    • 0B011MT [0,1,2,3,4] Bit rendah dari register MTREG (Measurement Time REGister).

    • 0B01000MT [5,6,7] MTREG mendaftarkan bit tinggi.

    Baca BH1750 dari Arduino

    Untuk mengukur pencahayaan sekitar dengan BH1750 dari Arduino perpustakaan digunakan Kawat yang mengelola komunikasi dengan Bus I2C. Prosesnya seperti biasa pada jenis komunikasi ini, pertama kali diaktifkan (sekali dalam program) dengan Wire.begin(), komunikasi dengan BH1750 dimulai dengan Wire.beginTransmission() dan alamat Anda I2C (0x5C atau 0x23 tergantung pada apakah ADDR tinggi atau rendah), dikonfigurasi dengan mengirimkan kode yang sesuai dengan Wire.write() dan bus dilepaskan dengan Wire.endTransmission()

    Jika salah satu mode membaca berkelanjutan digunakan, Wire.beginTransmission() digunakan untuk mendapatkan data dengan alamatnya I2C sesuai untuk mengakses BH1750, Anda diminta untuk dua byte (resolusi 16 bit) dengan Wire.requestFrom() yang dibaca, menggunakan Wire.read(), dan dimuat ke dalam bilangan bulat tak bertanda, memutar byte pertama sebanyak 8 bit. Bus kemudian dilepaskan dengan Wire.endTransmission(). Hasil akhir diperoleh dengan membagi nilai yang dikembalikan dengan faktor presisi (1,2 jika jendela optik tidak diubah)

    Jika mode pembacaan individual digunakan, BH1750 memasuki mode tidur. Untuk kembali ke mode aktif, konfigurasi (mode membaca yang sama atau baru) atau kode pengaktifan (0x01) dapat dikirim. Kode shutdown (1750x0) dapat digunakan untuk memaksa BH00 ke mode tidur.

    Penting untuk memperhatikan waktu pembacaan sensor, yang bergantung pada resolusi. Jika menunggu tidak kritis, maka dapat disatukan menjadi nilai untuk semua kasus yang bisa sedikit lebih besar dari nilai maksimum yang diharapkan untuk memastikan bahwa pembacaan selesai.

    Untuk membuat penulisan kode BH1750 lebih nyaman Arduino, kode operasi yang paling relevan dapat ditemukan di dokumen header berikut.

    Contoh kode berikut menunjukkan mode membaca paling umum pada sensor cahaya I2C BH1750. Resolusinya 1 lux dan mode membaca terus menerus. Contohnya menunjukkan, menggunakan konsol serial Arduino, setiap hasil diperoleh dari nilai yang diukur.

    Seperti yang saya katakan di atas, mode resolusi 1 lux dan 4 lux menggunakan 16 bit data untuk menyatakan pengukuran sebagai bilangan bulat. Sebaliknya, dalam mode 0,5 lux, bit terakhir mewakili bagian desimal, yaitu nilai yang berkontribusi terhadap pengukuran total digeser dua pangkat ke kanan. Dalam mode 1 lux atau 4 lux bit terakhir (LSB) bernilai 20, yang kedua dari belakang 21, 2 berikutnya2…dalam mode 0,5 lux bit terakhir (LSB) bernilai 2-1, yang kedua dari belakang 20, 2 berikutnya1...

    Menurut struktur data ini, dan mengingat dua pembacaan harus dilakukan I2C satu byte, untuk mendapatkan nilai 16-bit Anda harus memuat bit paling signifikan dari byte tersebut, yang pertama dibaca, dan memutarnya 8 bit ke kiri dalam mode resolusi 1 lux dan dalam mode resolusi 4 lux dan hanya 7 bit dalam 0,5 lux. Untuk menyatukan cara membaca dalam mode 0,5 lux Anda dapat memuat byte paling signifikan ke dalam bilangan bulat tak bertanda, memutar 8 bit ke kiri, memuat byte paling tidak signifikan dan memutar seluruh bilangan bulat tak bertanda 1 bit ke kiri. nilai bagian desimal yang menunjukkan LSB (bit paling tidak signifikan) untuk menerapkannya nanti.

    Logikanya, untuk mode 1 lux atau 4 lux perlu menggunakan bilangan bulat tak bertanda (unsigned int) untuk apa Arduino jangan memesannya MSB (bit paling signifikan) untuk tanda dan dapat beroperasi secara langsung dengan nilai pengukuran sebenarnya, bukan dengan bilangan negatif. Di dalam Arduino karena tidak perlu karena bilangan bulat menggunakan 32 bit, tetapi program yang sama juga akan berfungsi jika digunakan juga unsigned int.

    Kode berikut menunjukkan bagaimana mode 0,5 lux akan digunakan

    Download dokumen contoh pengukuran cahaya sekitar dengan sensor BH1750 dan Arduino.

    Anda mungkin melewatkannya