- Giới thiệu về Mô-đun cảm biến ánh sáng kỹ thuật số BH1750
- Arduino
- Lập trình Arduino để giao tiếp cảm biến ánh sáng BH1750
Khi bạn cầm điện thoại dưới ánh nắng mặt trời hoặc nơi có ánh sáng cao, điện thoại sẽ tự động điều chỉnh độ sáng tùy theo điều kiện ánh sáng. Hầu hết các thiết bị hiển thị ngày nay, cho dù đó là TV hay điện thoại di động, đều có Cảm biến ánh sáng xung quanh bên trong để điều chỉnh độ sáng tự động. Hôm nay trong hướng dẫn này, chúng tôi sẽ sử dụng một Mô-đun cảm biến ánh sáng BH1750 cảm biến như vậy và giao diện nó với Arduino và hiển thị giá trị Lux trên màn hình LCD 16x2.
Giới thiệu về Mô-đun cảm biến ánh sáng kỹ thuật số BH1750
BH1750 là Cảm biến ánh sáng xung quanh kỹ thuật số hoặc Cảm biến cường độ ánh sáng, có thể được sử dụng để tự động điều chỉnh độ sáng của màn hình trong điện thoại di động, màn hình LCD hoặc để bật / tắt đèn pha trong ô tô dựa trên điều kiện ánh sáng ngoài trời.
Cảm biến sử dụng giao thức truyền thông nối tiếp I 2 C giúp sử dụng dễ dàng hơn với vi điều khiển. Đối với giao tiếp I2C nó có các chân SDI và SDA. Các pinout của BH1750 Ambient Light Sensor được hiển thị dưới đây:
Đầu ra của cảm biến này là LUX (lx), vì vậy nó không yêu cầu bất kỳ tính toán nào thêm. Lux là đơn vị đo cường độ ánh sáng. Nó đo cường độ theo lượng ánh sáng chiếu vào một khu vực cụ thể. Một lux tương đương với một lumen trên mét vuông.
Cảm biến hoạt động trên điện áp từ 2.4V đến 3.6V (thường là 3.0V) và nó tiêu thụ hiện tại của 0.12mA. Cảm biến này có phạm vi rộng và độ phân giải cao (1-65535lx) và ngoài ra, sự thay đổi đo lường cũng nhỏ (khoảng +/- 20%). Nó cũng có thể hoạt động độc lập mà không cần bất kỳ thành phần bên ngoài nào.
Mặc dù cảm biến LDR cũng có thể được sử dụng để điều khiển các thiết bị dựa trên điều kiện ánh sáng nhưng nó không chính xác lắm. Chúng tôi đã sử dụng cảm biến LDR để xây dựng nhiều ứng dụng điều khiển ánh sáng:
- Mạch cảm biến ánh sáng Arduino sử dụng LDR
- Bộ phát hiện bóng tối sử dụng LDR và IC hẹn giờ 555
- Mạch LDR đơn giản để phát hiện ánh sáng
- Đèn trộn màu Arduino sử dụng đèn LED RGB và LDR
Arduino
Sơ đồ mạch kết nối cảm biến ánh sáng BH1750 với Arduino được hiển thị bên dưới.
Các chân giao tiếp I2C SDA và SCL của BH1750 được kết nối với chân Arduino A4 và A5 tương ứng cho giao tiếp I 2 C. Như chúng ta đã biết điện áp hoạt động cho cảm biến là 3.3v nên VCC và GND của BH1750 được kết nối với 3.3V và GND của Arduino. Đối với LCD, chân dữ liệu (D4-D7) được kết nối với chân kỹ thuật số D2-D5 của Arduino và chân RS và EN được kết nối với D6 và D7 của Arduino. V0 của LCD được kết nối với nồi và nồi 10k được sử dụng để điều khiển độ sáng của LCD.
Lập trình Arduino để giao tiếp cảm biến ánh sáng BH1750
Phần lập trình để sử dụng cảm biến LUX này với Arduino rất dễ dàng. Mặc dù có một thư viện có sẵn cho cảm biến này, nhưng chúng ta cũng có thể sử dụng nó mà không cần điều đó.
Đầu tiên, chúng tôi đã bao gồm các tệp tiêu đề cho LCD và giao thức I 2 C.
#include
Trong chức năng thiết lập , chúng tôi đã khởi tạo cả LCD và cảm biến và in thông báo mở trên LCD.
void setup () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Cảm biến Cường độ"); chậm trễ (2000); }
Dưới đây BH1750_Read và BH1750_Init chức năng được sử dụng để đọc và ghi các giá trị tương ứng Lux. Hàm Wire.beginTransmission () được sử dụng để bắt đầu truyền và hàm Wire.requestFrom (address, 2) được sử dụng để đọc các thanh ghi trong đó 2 chỉ ra số lượng thanh ghi.
Hơn nữa Wire.endTransmission () được sử dụng để kết thúc quá trình truyền và hàm Wire.write () được sử dụng để đi đến thanh ghi mong muốn bằng cách nhập địa chỉ của thanh ghi đó vào đó.
int BH1750_Read (int address) { int i = 0; Wire.beginTransmission (địa chỉ); Wire.requestFrom (địa chỉ, 2); while (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); trả lại tôi; } void BH1750_Init (int address) { Wire.beginTransmission (address); Wire.write (0x10); Wire.endTransmission (); }
Trong chức năng vòng lặp , chúng tôi đang in các giá trị lux thời gian thực trên màn hình LCD. Đầu tiên so sánh giá trị trả về từ hàm BH1750_Read với 2, sau đó bắt đầu in các giá trị Lux nếu nó bằng 2. Ở đây các giá trị được so sánh với 2 vì hàm BH1750_Read trả về giá trị của số thanh ghi và chúng ta chỉ đọc 2 thanh ghi. Vì vậy, khi nó đạt đến 2, chương trình bắt đầu in các giá trị LUX của cường độ ánh sáng.
Sau đó, một công thức được sử dụng để lấy các giá trị từ cả hai thanh ghi và chia chúng cho 1,2, đó là độ chính xác của phép đo.
void loop () { int i; uint16_t giá trị = 0; BH1750_Init (BH1750address); chậm trễ (200); if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Cường độ tính bằng LUX"); lcd.setCursor (6,1); lcd.print (giá trị); } delay (150); }
Cuối cùng, cấp nguồn cho Arduino và tải chương trình lên Arduino. Ngay sau khi chương trình được tải lên, màn hình LCD bắt đầu hiển thị cường độ ánh sáng theo đơn vị LUX. Bạn cũng có thể thay đổi các giá trị bằng cách thay đổi cường độ ánh sáng xung quanh cảm biến như được minh họa trong Video bên dưới.