- Pengenalan Modul Sensor Cahaya Digital BH1750
- Arduino
- Memprogram Arduino untuk antara muka BH1750 Light Sensor
Apabila anda mengambil telefon anda di bawah sinar matahari atau pencahayaan tinggi, maka secara automatik ia menyesuaikan kecerahan mengikut keadaan pencahayaan. Sebilangan besar peranti paparan sekarang beberapa hari, sama ada TV atau telefon bimbit, mempunyai Sensor Cahaya Ambient di dalam untuk menyesuaikan kecerahan secara automatik. Hari ini dalam tutorial ini, kami akan menggunakan satu modul Sensor Cahaya BH1750 sensor dan memadankannya dengan Arduino dan menunjukkan nilai Lux melebihi LCD 16x2.
Pengenalan Modul Sensor Cahaya Digital BH1750
BH1750 adalah Sensor Cahaya Ambient Digital atau Sensor Intensiti Cahaya, yang dapat digunakan untuk menyesuaikan kecerahan layar secara automatik pada ponsel, layar LCD, atau untuk menyalakan / mematikan lampu depan pada kereta berdasarkan kondisi pencahayaan luar.
Sensor menggunakan protokol komunikasi bersiri I 2 C yang menjadikannya lebih mudah digunakan dengan mikrokontroler. Untuk komunikasi I2C ia mempunyai pin SDI dan SDA. The pinout daripada BH1750 Ambient Light Sensor adalah seperti berikut:
Keluaran sensor ini adalah dalam LUX (lx), jadi ia tidak memerlukan pengiraan lebih lanjut. Lux adalah unit untuk mengukur intensiti Cahaya. Ini mengukur intensiti mengikut jumlah cahaya yang memukul di kawasan tertentu. Satu lux sama dengan satu lumen per meter persegi.
Sensor beroperasi pada voltan dari 2.4V hingga 3.6V (biasanya 3.0V) dan ia menggunakan arus 0.12mA. Sensor ini mempunyai jarak lebar dan resolusi tinggi (1-65535lx) dan di samping itu, variasi pengukuran juga kecil (sekitar +/- 20%). Ia juga boleh berfungsi secara bebas tanpa komponen luaran.
Walaupun sensor LDR juga dapat digunakan untuk mengendalikan peranti berdasarkan keadaan pencahayaan tetapi tidak begitu tepat. Kami telah menggunakan sensor LDR untuk membina banyak aplikasi terkawal cahaya:
- Litar Sensor Cahaya Arduino menggunakan LDR
- Dark Detector menggunakan LDR dan 555 Timer IC
- Litar LDR Mudah untuk Mengesan Cahaya
- Lampu Pencampuran Warna Arduino menggunakan RGB LED dan LDR
Arduino
Gambarajah litar untuk menyambungkan sensor cahaya BH1750 dengan Arduino ditunjukkan di bawah.
Pin komunikasi I2C SDA dan SCL BH1750 masing-masing dihubungkan ke pin Arduino A4 dan A5 untuk komunikasi I 2 C. Seperti yang kita ketahui voltan operasi untuk sensor adalah 3.3v jadi VCC dan GND BH1750 disambungkan ke 3.3V dan GND dari Arduino. Untuk LCD, pin data (D4-D7) disambungkan ke pin digital D2-D5 dari Arduino dan pin RS dan EN disambungkan ke D6 dan D7 dari Arduino. V0 LCD disambungkan ke periuk dan periuk 10k digunakan untuk mengawal kecerahan LCD.
Memprogram Arduino untuk antara muka BH1750 Light Sensor
Bahagian pengaturcaraan untuk menggunakan sensor LUX ini dengan Arduino sangat mudah. Walaupun ada perpustakaan yang tersedia untuk sensor ini, tetapi kami juga dapat menggunakannya tanpa itu.
Pertama, kami telah memasukkan fail header untuk protokol LCD dan I 2 C.
#sertakan
Dalam fungsi persediaan , kami telah menginisialisasi kedua-dua LCD dan sensor dan mencetak pesan pembukaan pada LCD.
batal persediaan () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Cahaya"); lcd.setCursor (0,1); lcd.print ("Sensor Intensiti"); kelewatan (2000); }
Di sini BH1750_Read dan BH1750_Init fungsi digunakan untuk membaca dan menulis nilai Lux masing-masing. Fungsi Wire.beginTransmission () digunakan untuk memulakan transmisi dan fungsi Wire.requestFrom (address, 2) digunakan untuk membaca register di mana 2 menunjukkan jumlah register.
Selanjutnya Wire.endTransmission () digunakan untuk mengakhiri transmisi dan fungsi Wire.write () digunakan untuk pergi ke daftar yang diinginkan dengan memasukkan alamat daftar tersebut di dalamnya.
int BH1750_Read (alamat int) { int i = 0; Wire.beginTransmission (alamat); Wire.requestFrom (alamat, 2); sementara (Wire.available ()) { buff = Wire.read (); saya ++; } Wire.endTransmission (); pulangan i; } batal BH1750_Init (alamat int) { Wire.beginTransmission (alamat); Wire.write (0x10); Wire.endTransmission (); }
Dalam fungsi gelung , kami mencetak nilai lux masa nyata melalui LCD. Pertama bandingkan nilai pengembalian dari fungsi BH1750_Read dengan 2, dan kemudian mulakan mencetak nilai Lux jika sama dengan 2. Di sini nilainya dibandingkan dengan 2 kerana fungsi BH1750_Read mengembalikan nilai kiraan daftar dan kita hanya membaca 2 daftar. Jadi apabila mencapai 2, program mula mencetak nilai intensiti cahaya LUX.
Kemudian formula digunakan untuk mendapatkan nilai dari kedua register dan membaginya dengan 1.2, iaitu ketepatan pengukuran.
gelung kekosongan () { int i; nilai uint16_t = 0; BH1750_Init (alamat BH1750); kelewatan (200); jika (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensity in LUX"); lcd.setCursor (6,1); lcd.print (nilai); } kelewatan (150); }
Akhirnya aktifkan Arduino dan muat naik program ke Arduino. Sebaik sahaja program dimuat, LCD mula menunjukkan intensiti cahaya dalam unit LUX. Anda juga dapat mengubah nilainya dengan mengubah intensiti cahaya di sekitar sensor seperti yang ditunjukkan dalam Video di bawah.