0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样在Arduino上使用BH1750环境光传感器

454398 来源:网络整理 作者:网络整理 2019-12-05 17:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

何时您将手机放在阳光下或强光下,然后会根据照明条件自动调节亮度。如今,无论是电视还是移动电话,如今大多数显示设备都内置有环境光传感器,可以自动调节亮度。今天,在本教程中,我们将使用一个这样的传感器 BH1750光传感器模块并将其与Arduino 连接,并在16x2 LCD上显示Lux值。

BH1750数字光传感器模块的介绍

BH1750 是数字环境光传感器或光强度传感器,可用于根据室外照明条件自动调整手机,LCD显示屏的亮度,或打开/关闭汽车前灯。

该传感器使用I 2 C串行通信协议,这使得它更易于与微控制器一起使用。对于I2C通信,它具有SDISDA引脚。 BH1750环境光传感器的引脚排列如下所示:

怎样在Arduino上使用BH1750环境光传感器

此传感器的输出位于 LUX (lx)中,因此不需要任何进一步的计算。勒克斯是测量光强度的单位。它根据照射到特定区域的光量来测量强度。 1 lux等于每平方米1流明。

传感器的工作电压范围为 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环境光传感器电路图

将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协议。

#include

#include

在设置功能中,我们已经初始化了LCD和传感器,并在屏幕上打印了打开消息LCD。

void setup()

{

Wire.begin();

lcd.begin(16,2);

lcd.print(“ BH1750 Light ”);

lcd.setCursor(0,1);

lcd.print(“Intensity Sensor”);

delay(2000);

}

此处 BH1750_Read 和 BH1750_Init 功能用于分别读取和写入Lux值。 Wire.beginTransmission()函数用于开始传输,而 Wire.requestFrom(address,2)函数用于读取寄存器,其中2表示寄存器数。

进一步的 Wire.endTransmission()用于结束传输,并且 Wire.write()函数用于通过输入以下内容转到所需的寄存器

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();

}

在 loop 函数中,我们是通过LCD打印实时照度值。首先将 BH1750_Read 函数的返回值与2进行比较,然后如果等于2,则开始打印Lux值。此处将这些值与2进行比较,因为 BH1750_Read 函数返回寄存器计数的值,我们只读取2个寄存器。因此,当达到2时,程序开始打印光强度的LUX值。

然后使用公式从两个寄存器获取值并将它们除以1.2

void loop()

{

int i;

uint16_t value=0;

BH1750_Init(BH1750address);

delay(200);

if(2==BH1750_Read(BH1750address))

{

value=((buff[0]《《8)|buff[1])/1.2;

lcd.clear();

lcd.print(“Intensity in LUX”);

lcd.setCursor(6,1);

lcd.print(value);

}

delay(150);

}

最后打开Arduino的电源,然后将程序上传到Arduino。程序一旦上传,LCD便开始以LUX单位显示光强度。您还可以通过更改传感器周围的光强度来更改值,如下面的视频所示。

代码

#include

#include

int BH1750address = 0x23;

byte buff [2];

LiquidCrystal LCD(7,6,5,4,3,2);//RS,E,D4,D5,D6,D7

void setup()

{

Wire.begin();

//Serial.begin(9600);

lcd.begin(16,2);

lcd.print(“ BH1750 Light”);

lcd.setCursor(0,1);

lcd.print(“ Intensity Sensor”);

delay(2000);

}

void loop()

{

int i;

uint16_t value = 0;

BH1750_Init(BH1750address);

delay(200);

if(2 == BH1750_Read(BH1750address))

{

value =((buff [0] 《《8)| buff [1])/1.2;

lcd.clear();

lcd.print(“强度(LUX)”);

lcd.setCursor(6,1);

lcd.print(value);

//Serial.print(val);

//Serial.println(“[lux]“);

}

delay(150);

}

int BH1750_Read(int address)

{

int i = 0;

Wire.beginTransmission(地址);

Wire.requestFrom(地址,2);

while(Wire.available())

{

buff [i] = Wire.read();

i ++;

}

Wire.endTransmission();

返回i;

}

void BH1750_Init(int address)

{

Wire.beginTransmission(地址);

Wire.write(0x10);

Wire.endTransmission();

}

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2573

    文章

    54371

    浏览量

    786074
  • Arduino
    +关注

    关注

    190

    文章

    6515

    浏览量

    195969
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    低成本开源!我用乐鑫科技ESP32-S3开发板打造了一个会自己补的智能鱼缸!启明云端乐鑫代理

    还记得上期我们让鱼缸学会了"感知光线"吗?通过BH1750传感器,它能实时监测环境光强:我家鱼缸能感知!一块乐鑫科技ESP32-S3开发板就能实现
    的头像 发表于 11-27 18:04 135次阅读
    低成本开源!我用乐鑫科技ESP32-S3开发板打造了一个会自己补<b class='flag-5'>光</b>的智能鱼缸!启明云端乐鑫代理

    Vishay VEML3235环境传感器技术解析与应用指南

    Vishay VEML3235环境传感器是先进的低功耗、高灵敏度传感器,具有I²C协议接口,采用CMOS工艺设计。这些传感器
    的头像 发表于 11-17 10:41 284次阅读
    Vishay VEML3235<b class='flag-5'>环境</b><b class='flag-5'>光</b><b class='flag-5'>传感器</b>技术解析与应用指南

    Vishay VEMD4210FX02环境传感器技术解析与应用指南

    Vishay Semiconductors VEMD4210FX02 环境传感器是一款高速、高灵敏度的 PIN 光电二极管。它是一款微型表面贴装器件 (SMD),敏感区域为0.42mm^2
    的头像 发表于 11-09 16:31 429次阅读
    Vishay VEMD4210FX02<b class='flag-5'>环境</b><b class='flag-5'>光</b><b class='flag-5'>传感器</b>技术解析与应用指南

    Vishay高灵敏度接近与环境传感器—VCNL4200

    VishayVCNL4200接近与环境传感器将940nm红外发射(IRED)、环境
    的头像 发表于 10-31 13:54 441次阅读
    Vishay高灵敏度接近与<b class='flag-5'>环境</b><b class='flag-5'>光</b><b class='flag-5'>传感器</b>—VCNL4200

    德州仪器OPT3005环境传感器技术解析

    Texas Instruments OPT3005环境传感器 (ALS) 是一款单芯片照度计,可测量人眼可见光的强度。OPT3005具有强大的红外抑制和精确的光谱响应特性,无论什么光源,还是
    的头像 发表于 08-29 10:54 556次阅读
    德州仪器OPT3005<b class='flag-5'>环境</b><b class='flag-5'>光</b><b class='flag-5'>传感器</b>技术解析

    数字16位串行输出型环境传感器IC BH1750FVI数据手册

    BH1750FVI数据手册
    发表于 08-09 16:04 0次下载

    德州仪器环境传感器的应用

    我们的眼睛不断地观察和解读周围的世界,感知光谱的颜色并适应各种情况。与眼睛向大脑提供信号的方式相同,环境传感器也能精确地测量环境中的光照条件并向系统提供照度读数。
    的头像 发表于 08-07 14:33 3102次阅读
    德州仪器<b class='flag-5'>环境</b><b class='flag-5'>光</b><b class='flag-5'>传感器</b>的应用

    【沁恒CH585开发板免费试用体验】+光照传感器及其检测

    光照传感器在对环境的光线情况的检测中起着重要的作用,这里所采用的是数字式光照传感器BH1750,它具有集成度高和检测精度高的特点。 该传感器
    发表于 07-06 00:08

    迅为RK3576开发板NPUrknn-toolkit2环境搭建和使用docker环境安装

    迅为RK3576开发板NPUrknn-toolkit2环境搭建和使用docker环境安装
    的头像 发表于 06-18 15:22 963次阅读
    迅为RK3576开发板NPUrknn-toolkit2<b class='flag-5'>环境</b>搭建和使用docker<b class='flag-5'>环境</b>安装

    如何为您的应用选择传感器

    ,到向安全系统发送可能的入侵警报。 本文讨论了常见用例中选择传感器所需的功能,例如篡改检测、昼夜检测、LED 亮度调节、显示屏亮度调节和颜色调节。 篡改检测 篡改检测应用中的
    的头像 发表于 06-11 10:14 445次阅读
    如何为您的应用选择<b class='flag-5'>光</b><b class='flag-5'>传感器</b>

    急急急在线等

    求一张stm32物联网智能家居环境监测系统总电路图,含DHT11,BH1750,MQ-2烟雾传感器,OLED显示屏,声光报警,ESP8266等
    发表于 04-28 23:20

    如何使用cubeide配置stm32H750环境

    如何使用cubeide配置stm32H750环境,但是SYS中没有debug选项,也就选不了serial wire
    发表于 04-23 07:55

    Vishay Opto VEML6031X00汽车级环境传感器

    VishayOptoVEML6031X00汽车级环境传感器(ALS)是一款高精度传感器,设有I2C接口。该传感器是一款
    的头像 发表于 04-03 10:31 976次阅读
    Vishay Opto VEML6031X00汽车级<b class='flag-5'>环境</b><b class='flag-5'>光</b><b class='flag-5'>传感器</b>

    【CW32模块使用】BH1750光照强度传感器

    采用ROHM原装BH1750FVI芯片供电电源:3-5V,光照度范围:0-65535lx传感器内置16bitAD转换,直接数字输出,省略复杂的计算,省略标定,不区分环境光源接近于视觉
    的头像 发表于 12-30 11:17 1386次阅读
    【CW32模块使用】<b class='flag-5'>BH1750</b>光照强度<b class='flag-5'>传感器</b>

    【RA-Eco-RA4E2-64PIN-V1.0开发板试用】04、I2C驱动BH1750光照传感器并在串口打印输出

    0 前言 本次实验将使用板子的I2C功能。瑞萨R7FA4E2B93CFM支持I3C和I2C,手头没有I3C的设备,但正好有一个I2C协议的光照传感器模块,型号为BH1750。 1 硬件部分 从
    发表于 12-16 16:17