目录

  • BH1750光照传感器篇
  • 1、产品介绍
    • (1)概述:
    • (2)特点:
    • (3)引脚定义:
  • 2、测量程序流程
    • (1)发送断电指令
    • (2)发送通电指令
    • (3)发送测量指令
    • (4)读取测量结果

BH1750光照传感器篇

这里推荐一位博主写的这个传感器的文章,可以看下

文章链接

1、产品介绍

(1)概述:

BH1750FVI 是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围的光强度变化( 1lx-65535lx)。这个模块可以接入3.3~5v的电压

它常常应用在移动电话,液晶电视,笔记本电脑,便携式游戏机,数码相机,数码摄像机,汽车定位系统,液晶显示器等上面。

(2)特点:

这里只列举一些特点,详细说明请参考芯片手册:

【BH1750芯片手册】

 1. 支持 I2C BUS 接口(f/s Mode Support)。2. 输出对应亮度的数字值。(范围: 1-65535lx)3. 有两种可选的 I2C 从设备 地址(即一根IIC上可以最多接入两个这种传感器)。4. 最小误差变动在± 20%。5. 受红外线影响很小。

(3)引脚定义:


我们对这个芯片有了简单的了解后,接下来我们该考虑如何控制这个模块,从而获取出光照值了。从芯片手册中我们可以知道它支持IIC总线接口,即我们可以通过IIC总线使MCU和传感器之间进行收发数据。至于IIC的知识可以看下博主的这篇文章 【IIC总线篇】,这里就不在进行过多的叙述。

2、测量程序流程


从芯片手册中的图可知,要想测量出关照值,只用按照上面的步骤执行就行。
前提:芯片先供电,然后依次发送【断电—>通电—>测量指令—>进行测量】的指令即可即可。那我怎么去找这些指令呢?其实万能的芯片手册就告诉我们了,请看相关指令部分截图:

这些指令该如何通过单片机发送给这个芯片呢?芯片手册中也说过是通过IIC总线进行数据收发的。所以我们只用严格按照IIC总线协议格式,按照上面步骤依次发送相关指令就可以了。

注意上面流程图中的测量指令指的是分辨率模式,简单区别如下:

至于其它详细的区别,请看数据手册。

(1)发送断电指令

芯片手册中有说明芯片的地址

指令发送格式:

软件代码如下:

//函数功能:用于向芯片发送数据
//函数参数:具体的指令数据
void Bh1750Write(unsigned char dat)
{I2cStart();            //发送开始信号I2cSendByte(0x46);  //发送器件地址和写方向I2cSendByte(dat);   //发送要写入的数据(各种指令,包括通电、分辨率模式的等),具体参考芯片手册I2cStop();           //停止本次通信
}

所以要发送断电指令只需要调用上面的函数即可:

Bh1750Write(0x00);

(2)发送通电指令

同上,同理可得发送通电指令只需要调用上面的函数即可:

Bh1750Write(0x01);

(3)发送测量指令

测量指令,我这里选择的芯片手册推荐的连续高分辨率模式。

同上,同理可得发送通电指令只需要调用上面的函数即可:

Bh1750Write(0x10);

!!!注意,发送测量指令后不能马上去读数据,因为要等待一定的时间让芯片测量数据,这个时间在芯片手册中也有说明,测量时间最大为180us.所以我们在发送测量指令后,最好必须严格等待180us以上的时间,以保证数据正确和稳定
**

(4)读取测量结果


注意:取得16位数据后,需要对数据进行合并,然后根据官方的公式得到最终的数据——即为实际的光照值。

软件代码如下:

void Bh1750Read(unsigned char *str)
{unsigned int dat,i;float num;unsigned char sbuf[2];I2cStart();         //发送开始信号I2cSendByte(0x47);  //发送器件地址和读方向    for(i=0;i<2;i++)      //开始读取数据,bh1750一次会发送16位数据,所以要接收两次{sbuf[i]=I2cReadByte();}I2cStop();          //停止本次通信dat=sbuf[0];dat=(dat<<8)+sbuf[1];  //合成16位数据num=(float)dat/1.2;       //根据芯片手册的具体公式得到最终值dat=num;//下面将数字分离每位后保存到数组str[0]=dat/10000+0x30;dat=dat%10000;str[1]=dat/1000+0x30;dat=dat%1000;    str[2]=dat/100+0x30;dat=dat%100;    str[3]=dat/10+0x30;dat=dat%10;      str[4]=dat+0x30; }

最后附上最简单的工程代码(就串口打印光照值),里边有两份,一份是网上的,一份是我自己写的。代码简洁、注释详细、便于学习:

【BH1750源代码】

单片机——BH1750光照传感器篇相关推荐

  1. BH1750 光照传感器文档详解 及 驱动设计

    前言 最近接触到一个应用,需要在低功耗的产品上加上光照度采集,正好最近有接触到一款光照传感器 BH1750 ,性能价格都合适,那么今天就抽空来好好测试一下. 那么要写一篇测试文章,我会尽量以新手的角度 ...

  2. BH1750( GY-302 )光照传感器

    文章目录 一.产品简介 二.IIC通信 三.BH1750的使用 四.程序源码 这里我先简单的介绍一下BH1750光照传感器模块的基本信息(不多废话),我将着重讲解它的使用部分,相信对于屏幕前的你也是更 ...

  3. STM32 驱动 GY-302 光照传感器 BH1750 模块(软件IIC与硬件IIC驱动)

    1.特别说明 ​ 要是不想看原理和过程,直接下拉找代码吧,都是测试过的,很稳定,有硬件I2C驱动的,也有软件模拟I2C驱动的,基于STM32F103系列和STM32F4系列实现,基于标准库实现,条理清 ...

  4. CC2530下ZigBee协议栈中添加BH1750数字光照传感器

    项目里需要获得光照强度,之前用的是光敏电阻,但是光敏电阻实在不精确,换用BH1750数字光照传感器.网上购买后,送的资料都是单片机的,移植到ZigBee协议栈里面,时序有些问题,在网上找的一些资料,很 ...

  5. 51lcd显示光传感器c语言程序,基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例...

    基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例,系统由GY-30数字光照传感器.51单片机最小系统.1602液晶显示屏组成,电路简单,附件中的程序是实物验证过了的.1 ...

  6. 利用BH1750光度传感器测量一些发光体

    简 介: 初步测试了BH1750测量一些光源的数据.特别是对于LED发光特性与电流之间的关系. 通过BH1750的数据收获册上的感光特性,它基本上覆盖了可见光的的范围. 关键词: BH1750,ESP ...

  7. 使用ESP32 MicroPython I2C功能读取 BH1750光度传感器模块数据

    简 介: 使用ESP32读取BH1750的光度传感器的数据.但是最终不知道甚么原因,所读取的数据都是0 ? 后面通过证明,说明在原来进行I2C写的时候出现了语法错误. 关键词: BH1750,ESP3 ...

  8. 如何基于Arduino开发板使用BH1750环境光传感器

    当您将手机放在阳光下或强光照条件下时,它会根据光线条件自动调节亮度.现在大多数显示设备,无论是电视还是手机,都内置环境光传感器来自动调节亮度.今天在本篇文章中,我们将使用一个这样的传感器BH1750光 ...

  9. 高精度光照传感器基本介绍

    高精度光照传感器基本介绍 光照传感器内部采用了目前光照采集方面灵敏度较高的光敏采集器件,该器件拥有灵敏度高,响应迅速等诸多优点.内部还配有滤光片,余弦修正器,配合高精度的模拟电路,以及程序处理,对光照 ...

  10. 利用arduino nano开发板配合oled、温度传感器、光照传感器、湿度传感器设计一个花盆

    利用arduino nano开发板配合oled.温度传感器.光照传感器.湿度传感器设计一个花盆 完整项目地址: https://github.com/linxinloningg/arduino_chi ...

最新文章

  1. 阿里云ESC搭建SVN服务端
  2. 第二课时之python认识
  3. 去年领了163亿薪资的马斯克,刚推出智能召唤功能就被吐槽:遇到人开的车就蒙圈...
  4. 重识设计模式-建造者模式(Builder Pattern)
  5. STM32使用非8M晶振时如何修改代码
  6. MATLAB中line函数的用法
  7. HDU - Reversi(dfs+水题)
  8. 是否使用wraps的區別
  9. .NET Core UI框架Avalonia
  10. python virtualenv_python开发之virtualenv与virtualenvwrapper讲解
  11. [BZOJ 1012] [JSOI 2008] 最大数maxnumber
  12. python 片段_python片段程序
  13. adb-常用命令记录
  14. request-爬取一张图片的练习-答案-私
  15. Unity3D命令行Build
  16. CVS文件的常见操作
  17. xp 计算机配置,xp怎么查看电脑配置
  18. 请假时间计算(支持任何时间段)
  19. 西部狂徒自建服务器,在《西部狂徒》中如何快速建立自己根据地?杀人放火是上策...
  20. c++中数字与字符,字符与其ASCII转换

热门文章

  1. OpenGL ES FBO
  2. 用java编写斗兽棋
  3. 2019不是闰年php代码,2019年是闰年吗,2019年有闰月吗?
  4. 快速实现M5311NBIOT MQTT通信
  5. FinalShell Mac OS版安装
  6. 试验数据的筛选和质量可视化
  7. 文件 或者 图片 与 base64 之间的转换
  8. 189邮箱smpt服务器,客户端软件配置-帮助中心-中国电信189邮箱
  9. 360无线网怎么没有网络连接到服务器,360路由器设置成二级路由器教程 | 192路由网...
  10. android市场低迷,销量低迷 安卓厂商mini产品或面临策略调整