当您将手机放在阳光下或强光下时,手机会根据光线条件自动调节亮度。如今,无论是电视还是移动电话,如今大多数显示设备都内置有环境光传感器,可以自动调节亮度。今天,在本教程中,我们将使用一个这样的传感器BH1750光传感器模块,并将其与Arduino连接,并在16x2 LCD上显示Lux值。
BH1750数字光传感器模块简介
BH1750是一种数字环境光传感器或光强度传感器,可用于根据室外照明条件自动调节手机,LCD显示屏的亮度,或用于打开/关闭汽车前灯。
该传感器使用I 2 C串行通信协议,这使其更易于与微控制器一起使用。对于I2C通信,它具有SDI和SDA引脚。BH1750环境光传感器的引脚排列如下所示:
该传感器的输出为LUX(lx),因此不需要任何进一步的计算。勒克斯是测量光强度的单位。它根据照射到特定区域的光量来测量强度。一勒克斯等于每平方米一流明。
该传感器的工作电压范围为2.4V至3.6V(通常为3.0V),消耗的电流为0.12mA。该传感器具有宽范围和高分辨率(1-65535lx),此外,测量偏差也很小(约+/- 20%)。它也可以独立工作而无需任何外部组件。
尽管LDR传感器也可以根据照明条件来控制设备,但它的精度不高。我们已经使用LDR传感器构建了许多光控应用程序:
- 使用LDR的Arduino光传感器电路
- 使用LDR和555定时器IC的黑暗探测器
- 简单的LDR电路检测光
- 使用RGB LED和LDR的Arduino混色灯
Arduino的
连接BH1750光传感器和Arduino的电路图如下所示。
BH1750的I2C通信引脚SDA和SCL分别连接到Arduino引脚A4和A5进行I 2 C通信。我们知道传感器的工作电压为3.3v,因此BH1750的VCC和GND连接到Arduino的3.3V和GND。对于LCD,数据引脚(D4-D7)连接到Arduino的数字引脚D2-D5,RS和EN引脚连接到Arduino的D6和D7。LCD的V0连接到电位器,一个10k电位器用于控制LCD的亮度。
编程Arduino以连接BH1750光传感器
将此LUX传感器与Arduino配合使用的编程部分非常简单。尽管此传感器有一个可用的库,但是我们也可以在没有该库的情况下使用它。
首先,我们包含了LCD和I 2 C协议的头文件。
#包括
在 设置 功能中,我们已经初始化了LCD和传感器,并在LCD上打印了打开消息。
void setup() { Wire.begin(); lcd.begin(16,2); lcd.print(“ BH1750 Light”); lcd.setCursor(0,1); lcd.print(“强度传感器”); delay(2000); }
在这里, BH1750_Read 和 BH1750_Init 函数分别用于读取和写入Lux值。所述 Wire.beginTransmission() 函数用于开始传输和 Wire.requestFrom(地址,2) 函数是用来读取寄存器,其中2指示的寄存器的数目。
进一步的 Wire.endTransmission() 用于结束传输,而 Wire.write() 函数用于通过在其中输入该寄存器的地址来转到所需的寄存器。
整数BH1750_Read(整数地址) { 整数i = 0; Wire.beginTransmission(地址); Wire.requestFrom(address,2); while(Wire.available()) { buff = Wire.read(); i ++; } Wire.endTransmission(); 返回我 } void BH1750_Init(int address) { Wire.beginTransmission(address); Wire.write(0x10); Wire.endTransmission(); }
在 循环 功能中,我们正在LCD上打印实时照度值。首先将 BH1750_Read 函数的返回值与2进行比较,然后如果等于2,则开始打印Lux值。此处将这些值与2进行比较,因为 BH1750_Read 函数返回寄存器计数的值,而我们仅读取2个寄存器。因此,当达到2时,程序将开始打印光强度的LUX值。
然后使用公式从两个寄存器中获取值,并将它们除以1.2,这就是测量精度。
void loop() { int i; uint16_t值= 0; BH1750_Init(BH1750address); 延迟(200); if(2 == BH1750_Read(BH1750address)) { value =((buff << 8)-buff)/1.2; lcd.clear(); lcd.print(“ LUX强度”); lcd.setCursor(6,1); lcd.print(value); } delay(150); }
最后打开Arduino的电源,然后将程序上传到Arduino。程序一旦上传,LCD便开始以LUX单位显示光强度。您还可以通过更改传感器周围的光强度来更改值,如以下视频所示。