第七篇、基于Arduino uno,获取bh1750数字光强度传感器的值——结果导向

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传感器在智能化控制中的重要性也越来越高。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值