- Pengantar Modul Sensor Cahaya Digital BH1750
- Arduino
- Pemrograman Arduino untuk menghubungkan Sensor Cahaya BH1750
Ketika Anda membawa ponsel Anda di bawah sinar matahari atau dalam pencahayaan tinggi, maka secara otomatis menyesuaikan kecerahan sesuai dengan kondisi pencahayaan. Sebagian besar perangkat tampilan sekarang menjadi hari, apakah itu TV atau ponsel, memiliki Sensor Cahaya Sekitar di dalam untuk menyesuaikan kecerahan secara otomatis. Hari ini dalam tutorial ini, kita akan menggunakan salah satu sensor Modul Sensor Cahaya BH1750 dan menghubungkannya dengan Arduino dan menunjukkan nilai Lux di atas LCD 16x2.
Pengantar Modul Sensor Cahaya Digital BH1750
BH1750 adalah Sensor Cahaya Sekitar Digital atau Sensor Intensitas Cahaya, yang dapat digunakan untuk menyesuaikan kecerahan layar secara otomatis di ponsel, layar LCD, atau untuk menghidupkan / mematikan lampu depan mobil berdasarkan kondisi pencahayaan luar ruangan.
Sensor menggunakan protokol komunikasi serial I 2 C yang membuatnya lebih mudah digunakan dengan mikrokontroler. Untuk komunikasi I2C memiliki pin SDI dan SDA. The pinout dari BH1750 Ambient Light Sensor ditunjukkan di bawah ini:
Output dari sensor ini adalah dalam bentuk LUX (lx), sehingga tidak memerlukan perhitungan lebih lanjut. Lux adalah satuan untuk mengukur intensitas Cahaya. Ini mengukur intensitas sesuai dengan jumlah cahaya yang mengenai area tertentu. Satu lux sama dengan satu lumen per meter persegi.
Sensor beroperasi pada tegangan dari 2.4V ke 3.6V (biasanya 3.0V) dan mengkonsumsi arus 0.12mA. Sensor ini memiliki jangkauan yang luas dan resolusi tinggi (1-65535lx) dan selain itu variasi pengukurannya juga kecil (sekitar +/- 20%). Itu juga dapat bekerja secara independen tanpa komponen eksternal.
Meskipun sensor LDR juga dapat digunakan untuk mengontrol perangkat berdasarkan kondisi pencahayaan namun tidak terlalu akurat. Kami telah menggunakan sensor LDR untuk membangun banyak aplikasi yang dikendalikan cahaya:
- Rangkaian Sensor Cahaya Arduino menggunakan LDR
- Detektor Gelap menggunakan LDR dan IC Timer 555
- Sirkuit LDR Sederhana untuk Mendeteksi Cahaya
- Lampu Mixing Warna Arduino menggunakan LED RGB dan LDR
Arduino
Diagram rangkaian untuk menghubungkan sensor Cahaya BH1750 dengan Arduino ditunjukkan di bawah ini.
Pin komunikasi I2C SDA dan SCL dari BH1750 terhubung ke Arduino pin A4 dan A5 masing-masing untuk komunikasi I 2 C. Seperti yang kita ketahui tegangan operasi untuk sensor adalah 3.3v sehingga VCC dan GND dari BH1750 terhubung ke 3.3V dan GND dari Arduino. Untuk LCD, pin data (D4-D7) dihubungkan ke pin digital D2-D5 Arduino dan pin RS dan EN terhubung ke D6 dan D7 Arduino. V0 LCD dihubungkan ke pot dan pot 10k digunakan untuk mengontrol kecerahan LCD.
Pemrograman Arduino untuk menghubungkan Sensor Cahaya BH1750
Porsi pemrograman untuk menggunakan sensor LUX ini dengan Arduino sangat mudah. Meskipun ada pustaka yang tersedia untuk sensor ini, tetapi kita juga dapat menggunakannya tanpa itu.
Pertama, kita sudah termasuk file header untuk LCD dan saya 2 C protokol.
#include
Dalam fungsi pengaturan , kami telah menginisialisasi LCD dan sensor dan mencetak pesan pembuka pada LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Sensor Intensitas"); penundaan (2000); }
Berikut BH1750_Read dan BH1750_Init fungsi yang digunakan untuk membaca dan menulis nilai-nilai Lux masing-masing. Fungsi Wire.beginTransmission () digunakan untuk memulai transmisi dan fungsi Wire.requestFrom (alamat, 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 register yang diinginkan dengan memasukkan alamat register itu di dalamnya.
int BH1750_Read (alamat int) { int i = 0; Wire.beginTransmission (alamat); Wire.requestFrom (alamat, 2); sementara (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); kembali i; } void BH1750_Init (alamat int) { Wire.beginTransmission (alamat); Wire.write (0x10); Wire.endTransmission (); }
Dalam fungsi loop , kami mencetak nilai lux waktu nyata melalui LCD. Pertama bandingkan nilai yang dikembalikan dari fungsi BH1750_Read dengan 2, lalu mulai mencetak nilai Lux jika sama dengan 2. Di sini nilainya dibandingkan dengan 2 karena fungsi BH1750_Read mengembalikan nilai hitungan register dan kita hanya membaca 2 register. Jadi ketika mencapai 2, program mulai mencetak nilai intensitas cahaya LUX.
Kemudian rumus digunakan untuk mendapatkan nilai dari kedua register dan membaginya dengan 1.2, yang merupakan akurasi pengukuran.
void loop () { int i; nilai uint16_t = 0; BH1750_Init (alamat BH1750); penundaan (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Intensitas di LUX"); lcd.setCursor (6,1); lcd.print (nilai); } penundaan (150); }
Terakhir nyalakan Arduino dan unggah program ke Arduino. Segera setelah program diunggah, LCD mulai menunjukkan intensitas cahaya di unit LUX. Anda juga dapat memvariasikan nilai dengan mengubah intensitas cahaya di sekitar sensor seperti yang ditunjukkan dalam Video di bawah ini.