P7 – Máy đo độ rọi dùng cảm biến BH1750

Độ 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

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *