Độ rọi là chỉ số độ quang thông trên diện tích bề mặt được chiếu sáng, đơn vị đo là lux (lx). Chỉ số này biểu đạt mức độ ánh sáng trên bề mặt mà con người cảm nhận được mạnh hay yếu. Trong bài này, ta sẽ làm một máy đo độ rọi dùng cảm biến BH1750
1 lux là độ rọi có được của một bề mặt diện tích 1 mét vuông có thông lượng chiếu sáng 1 lumen. Đây là một đơn vị dẫn xuất, được xác định bằng quang thông trên diện tích: 1 lx = 1 lm/m2
Cảm biến BH1750 có dải đo rộng, thời gian đo nhanh và độ chính xác cao. Các thông số này có thể điều chỉnh được.
Dải đo: 1 –> 65535 lux
Độ nhạy: 0,5 –> 4 lux
Thời gian đo: 16 –> 120ms
Cảm biến BH1750 sử dụng điện áp 3,3V và giao tiếp theo chuẩn I2C. Mạch BH1750 có sẵn ổn áp nên ta có thể sử dụng điện áp 5V. Một số mạch có cả phần dịch mức DC cho chân SDA và SCL.
Chân địa chỉ ADD được dùng để đặt lại địa chỉ trên bus I2C nếu cần. Mặc định là 0x23 vì có sẵn trở treo thấp. Nếu gắn chân ADD lên cao, địa chỉ trở thành 0x5C.
Kết nối thêm màn hình LCD để hiển thị thông tin, ta sử dụng mạch đổi I2C cho LCD. Tham khảo bài P5-Đồng hồ để biết cách sử dụng.
Hệ thống hoàn chỉnh
Trong chương trình cần bổ sung thư viện, tải thư viên BH1750 tại đây
Sử dụng thiết bị này ta có thể kiểm tra tình trạng chiếu sáng tại nơi cần quan tâm. Đặc biệt là phòng học, phòng làm việc.
Chương trình:
#include <Wire.h> #include <BH1750.h> #include <LiquidCrystal_I2C.h> BH1750 lightMeter; LiquidCrystal_I2C lcd(0x3F,16,2); void setup() { lcd.init(); lcd.init(); // lcd.backlight(); lcd.setCursor(0,0); lcd.print("Light intensity"); lcd.setCursor(0,1); Serial.begin(9600); Wire.begin(); lightMeter.begin(); Serial.println(F("BH1750 Test")); } void loop() { uint16_t lux = lightMeter.readLightLevel(); Serial.print("Light: "); Serial.print(lux); Serial.println(" lx"); lcd.setCursor(0,1); lcd.print(lux); lcd.println(" LUX "); delay(1000); }
Xem video minh họa