0、结果
说明:先来看看串口调试助手显示的结果,单位是勒克斯。
1、外观
说明:下面是传感器的外形。
2、连线
说明:只需要连接四根线。
- uno————bh1750传感器
- 5V--------------VCC
- GND--------------GND
- SCL--------------SCL
- SDA--------------SDA
3、源程序
说明:采用非阻塞方式编写,并将对应功能进行函数化,方便移植。
/****************************************bh1750 part****************************************/
/*
接线:
3.3------VCC
GND------GND
SCL------SCL
SDA------SDA
*/
#include <Wire.h> //调用库文件
#include <math.h> //调用库文件
int bh1750address = 0x23; //设备IIC地址
byte buff[2]; //定义数组
int bh1750Val = 0;
#define bh1750TimeInterval 1000 //检测一次的时间间隔
unsigned long bh1750Times = 0; //记录设备运行时间
void setup() {
Serial.begin(9600); //设置串口波特率为9600
Wire.begin(); //IIC通讯初始化
BH1750_Init(bh1750address); //初始化bh1750
Serial.println("设备上线!");
}
void loop() {
getBh1750Data(); //获取数据
}
/*读取数据*/
int BH1750_Read(int address) {
int i = 0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while (Wire.available()) {
buff[i] = Wire.read(); //接收一个字节
i++;
}
Wire.endTransmission();
return i;
}
/*初始化地址*/
void BH1750_Init(int address) {
Wire.beginTransmission(address);
Wire.write(0x10);
Wire.endTransmission();
}
/*获取数据*/
void getBh1750Data() {
if (millis() - bh1750Times >= bh1750TimeInterval) { //一定时间执行一次
bh1750Times = millis();
if (2 == BH1750_Read(bh1750address)) {
bh1750Val = ((buff[0] << 8) | buff[1]) / 1.2;
Serial.print(bh1750Val); //串口打印对应的值
Serial.println("[lx]"); //串口打印对应的值
}
}
}
4、注意事项
说明:可以拿手电筒的光来照射,当光太强的时候,会出现负数。
5、基本原理
BH1750传感器是一种数字式环境光线传感器,可测量环境光照度,并将测量结果输出为数字信号。其原理是基于半导体器件中的光电转换原理。
BH1750传感器内部包含一个光敏硅芯片、放大器、模拟到数字转换器、控制逻辑电路等多个模块。当环境光线照射到光敏芯片上时,硅芯片中的光电二极管会产生电流,电流大小与光强度成正比。放大器将电流信号放大后,传递给模拟到数字转换器进行AD转换,将光强度转换为数字信号输出。控制逻辑电路负责控制传感器的工作状态以及通信协议。
BH1750传感器具有广泛的应用场景,例如自动调节室内灯光、光线强度监测、能源节约控制等方面。随着物联网和智能家居的发展,BH1750传感器在智能化控制中的重要性也越来越高。