目录

一、模块介绍

(一)基本信息

(二)运行条件

(三)内部介绍

(四)模块工作流程

(五)指令集

(六)模块地址

(七)IIC通信举例

(1)连续读H分辨率模式1 、ADDR=0

(2)单次L分辨率模式1 、ADDR=1

(八)结果计算公式

二、程序设计

(一)bh1750.h文件宏定义

(二)bh1750.c文件

①初始化函数

②读数据函数

(三)主函数

三、演示效果

(一)黑暗处

(二)对着我的台灯

四、补充

(一)硬件连接

(二)模块图

(三)原理图


程序:

51版本:

32版本:

链接:https://pan.baidu.com/s/1SASv3GejlO8cs43fcHTQfw 
提取码:9534

一、模块介绍

(一)基本信息

BH1750FVI 是一款用于 I2C 总线接口的数字环境光传感器 IC。该IC最适合获得环境光,用于调整手机LCD和Keypad背光功率的数据。

  • IIC总线接口
  • 光谱责任近似于人眼反应
  • 照度数字转换器
  • 宽范围和高分辨率。 ( 1 - 65535 lx )
  • 通过断电功能实现低电流
  • 50Hz / 60Hz 光噪声抑制功能
  • 1.8V 逻辑输入接口
  • 无需任何外部零件
  • 光源依赖性小。 (例如白炽灯、荧光灯、卤素灯、白光 LED、太阳灯)
  • 可以选择 2 种 I2C 从地址。
  • 光学窗口影响的可调测量结果(使用此功能可以检测最小 0.11 lx,最大 100000 lx。)
  • 小的测量变化 (+/- 20%)
  • 红外线的影响很小。

(二)运行条件

①VCC 电压 Vcc 最小2.4 最大3.6 V

②IIC参考电压为VCC电压

(三)内部介绍

①PD:具有近似人眼响应的光电二极管。

②AMP:用于将 PD 电流转换为电压的集成运算放大器。

③ADC:用于获得数字 16 位数据的 AD 转换器。

④Logic+I2C Interface:逻辑+ I2C接口

⑤OSC:内部振荡器(典型值 320kHz)。它是内部逻辑的 CLK

(四)模块工作流程

注:实线箭头表示自动执行,虚线箭头表示通过IIC指令执行。

首先是给模块上电,模块会自动进入掉电模式,当需要测量时,通过IIC发送指令使模块进入上电模式,此时模块会等待IIC发送测量命令,当选择单次测量时,模块测量完成会会自动进入掉电模式,若下次测量需要发送上电指令;若选择持续测量,模块不会自动进入掉电模式。

(五)指令集

操作说明 操作码(十六进制) 指令描述
掉电模式 0x00
上电模式 0x01 等待测量命令。
复位 0x07 重置数据寄存器值。复位命令在掉电模式下不可使用。
连续H分辨率模式1 0x10 以 1lx 分辨率开始测量。
测量时间通常为 120 毫秒。
连续H分辨率模式2 0x11 以 0.5lx 分辨率开始测量。
测量时间通常为 120 毫秒。
连续L分辨率模式 0x13 以 4lx 分辨率开始测量。
测量时间通常为 16 毫秒。
单次 H 分辨率模式1 0x20 以 1lx 分辨率开始测量。
测量时间通常为 120 毫秒。
测量后,它会自动设置为掉电模式
单次 H 分辨率模式2 0x21 以 0.5lx 分辨率开始测量。
测量时间通常为 120 毫秒。
测量后,它会自动设置为掉电模式
单次 L 分辨率模式 0x23 以 4lx 分辨率开始测量。
测量时间通常为 16 毫秒。
测量后,它会自动设置为掉电模式
更改测量时间(高3位) 01000_xxx 改变测量时间
更改测量时间(低5位) 011_xxxxx 改变测量时间

官方推荐使用H分辨率模式1,由于H分辨率模式1测量时间长(积分时间长),可以过滤频率在50-60Hz的噪声信号,并且H分辨率模式1的分辨率为1lx,适用于黑夜测量;同样H分辨率模式2也适用于黑夜。

(六)模块地址

当ADDR = ‘L’时,地址为 0x46

当ADDR = ‘H’时,地址为 0xb8

(七)IIC通信举例

(1)连续读H分辨率模式1 、ADDR=0

这就是我们的IIC协议,首先发送一的ST起始信号,然后发送地址信号(0100011)和写方向(0),等待设备应答,在发送指令0001 0000(连续H分辨率模式1),然后进入等待(最长等待时间为180ms),再对模块读取测量结果,测量结果由高字节和低字节组成,分两个字节发送。

(2)单次L分辨率模式1 、ADDR=1

我就不解释啦,和上面是一样的。

(八)结果计算公式

若接收到的高字节为:0000 0011,低字节为0000 0001,则结果为:

二、程序设计

这里演示的是 连续读H分辨率模式1 ADDR=0 的程序,这里不涉及IIC的具体时序,只介绍关于模块如何读写数据。

(一)bh1750.h文件宏定义

ADDR=0,模块地址为0x46;

共读取5次数据(每个数据包含高位字节数据和低位字节数据);

#define BH1750_ADDRESS    0x46   //模块地址
#define BH1750_DATA_NUM   5     //从模块中读取数据个数

(二)bh1750.c文件

①初始化函数

/*
*********************************************************************************************************
*   函 数 名: BH1750_Config
*   功能说明: 初始化BH1750模块
*   形    参:无
*   返 回 值: 无
*********************************************************************************************************
*/
void BH1750_Config(void)
{BH1750_WriteByte(0x01);//设置为上电模式,等待读取数据指令BH1750_WriteByte(0x10);   // H- resolution modedelay_ms(180);//延时,180ms
}

②读数据函数

uint8_t  BH1750_Source_Data[2*BH1750_DATA_NUM]={0};//用于存放原始数据
float BH1750_Convert_Data[BH1750_DATA_NUM]={0};//存放转换后的数据
float BH1750_Average_Data = 0;//平均值=取样值之和/取样次数
/*
*********************************************************************************************************
*   函 数 名: BH1750_ReadByte
*   功能说明:   单字节读取BH1750数据
*   形    参:无
*   返 回 值: 无
*********************************************************************************************************
*/void BH1750_ReadByte(void)
{uint8_t i=0;uint16_t temp=0;float data_sum=0;for(i=0;i<BH1750_DATA_NUM;i++){BH1750_IIC_Start();   //主机打开IIC通讯BH1750_IIC_SendByte(BH1750_ADDRESS|0x01);    //发送BH1750地址+读信号BH1750_IIC_WaitAck();  //等待从机应答BH1750_Source_Data[2*i]     =      BH1750_IIC_ReadByte();//存储高字节数据BH1750_IIC_Ack();                //回应ACKBH1750_Source_Data[2*i+1]   =      BH1750_IIC_ReadByte();//存储低字节数据BH1750_IIC_NAck();  BH1750_IIC_Stop();   //发送停止信号,释放总线}printf("BH1750共读取 %d 次数据\r\n",BH1750_DATA_NUM);for(i=0;i<BH1750_DATA_NUM;i++){temp =  (BH1750_Source_Data[2*i]<<8)| BH1750_Source_Data[2*i+1];//将高字节数据                和低字节数据合并成16位数据BH1750_Convert_Data[i] = (float)temp / 1.2;//转换成最终数据data_sum +=  BH1750_Convert_Data[i];printf("BH1750第%d次的数据: %.2f lx \r\n",i,BH1750_Convert_Data[i]);}BH1750_Average_Data = data_sum/BH1750_DATA_NUM;printf("BH1750平均数据: %.2f lx \r\n",BH1750_Average_Data);
}

(三)主函数

void Init(void)
{USART_Config();//串口初始化BH1750_Config();//BH1750初始化
}int main(void)
{Init();BH1750_ReadByte();while(1){}
}

三、演示效果

(一)黑暗处

(二)对着我的台灯

四、补充

(一)硬件连接

①SCL-------PB5

②SDA-------PB6

③ADDR----GND(或者3.3V)

④VCC-------VCC(5V或3.3V,模块上有3.3V稳压芯片)

⑤GND------GND

(二)模块图

(三)原理图

以上就是光敏传感器的全部内容了,有理解不对的地方麻烦大家指出,万分感谢!程序和资料熊同学以后会更新在文章的开始......程序有51版本和32版本。

IIC总线设计③——光敏传感器(BH1750)相关推荐

  1. 基于IIC总线的温湿度传感器,你用过吗

    大家好,我是程序员小哈. 又到了知识分享时间,今天我给大家分享一个温湿度传感器模块,我们之前分享过DHT11和DHT21两款温湿度传感器,它俩是基于单总线输出信号的传感器模块,只需要一个GPIO即可实 ...

  2. ESP32-C3学习笔记(3):ESP32 C3 IIC总线驱动光照强度传感器(基于ESP-IDF Eclipse)

    一.硬件简介 光照强度传感器使用的是物联网俱乐部的智慧路灯案例扩展板E53_SC1,购买连接 https://item.taobao.com/item.htm?spm=2013.1.w4004-222 ...

  3. IIC总线设计④——MPU6050

    注:文章参考了野火.正点原子资料(书籍.程序),图片部分来自网上,若有侵权,请联系删除. 目录 一.姿态检测 (一)欧拉角 (二)陀螺仪 (三)加速度传感器 (四)磁场检测器 二.MPU6050 (一 ...

  4. STM32+BH1750光敏传感器获取光照强度

    一.环境介绍 MCU:  STM32F103ZET6 光敏传感器: BH1750数字传感器(IIC接口) 开发软件: Keil5 代码说明:使用IIC模拟时序驱动,方便移植到其他平台,采集的光照度比较 ...

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

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

  6. 基于STM32的光敏传感器数据采集系统-嵌入式系统与设计课程设计

    目录 1 项目概述 1.1 项目介绍 1.2 项目开发环境 1.3 小组人员及分工 2 需求分析 2.1 系统需求分析 2.2 可行性分析 2.3 项目实施安排 3 系统硬件设计 3.1 系统整体硬件 ...

  7. STM32 使用HTU21D温湿度传感器(结合逻辑分析仪深入分析IIC总线)

    目录 1.介绍: 2.信号: 3.使用的平台: 4.实物接线 5.实验 5.1.读写地址 5.2.软件复位 6.主程序读取温湿度 1.介绍: 1.IIC总线为半双工通讯,有两条线,时钟信号线SCL和数 ...

  8. 光照强度传感器BH1750

    一.芯片介绍 BH1750FVI是一款数字型光强度传感器集成芯片.BH1750的内部由光敏二极管.运算放大器.ADC采集.晶振等组成. 结构图 PD二极管通过光生伏特效应将输入光信号转换成电信号,经运 ...

  9. IIC总线上挂载多个从机的程序实现

    文章目录 IIC总线上挂载多个从机的程序实现 IIC简介: 1.项目的硬件参考电路: 2.程序实现: 2.1.程序框架设计: 2.2 IIC 总线接口程序实现: 2.3 加速度传感器的配置: 2.4 ...

  10. IIC总线的原理与Verilog实现

    IIC总线的原理与Verilog实现 1. 软件平台与硬件平台 2. 原理介绍 2.1 IIC总线的特点: 2.2 IIC总线协议详解: 2.2.1 IIC主机往从机里面写入数据的步骤 2.2.2 I ...

最新文章

  1. CXF的webservice接口中字符串参数中文问题
  2. 使用.Net平台构建企业应用系统场(下)
  3. Oracle NVL()和NVL2()函数
  4. ecshop $user
  5. Find consecutive elements in an array
  6. php实现网站插件机制的方法
  7. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
  8. Java并发编程:线程的同步
  9. 【语音去噪】基于matlab谱减法语音去噪【含Matlab源码 571期】
  10. HP 瘦客户机 - 使用 ie4uinit.exe 应用时,Citrix HDX Flash 出现故障和错误
  11. java视频播放器vlcj_vlcj--java-制作视频播放器
  12. Unity 面试经验汇总
  13. 夏普打印机提示需要维护请联系服务器,夏普打印机错误代码fk3的解决办法
  14. WPS简历模板的图标怎么修改_指导|让疫情之下的应届生,求职简历脱颖而出
  15. ASO优化的盲点:Apple ID权重必须考量
  16. excel多表格整合去重与空格去除
  17. 历年(2015-2018)英语六级翻译真题及参考答案
  18. 我的世界java版地狱_我的世界怎么去地狱_Minecraft地狱门建造教程 - 我的世界中文站...
  19. windows 10 ltsc 安装微软商店
  20. Whiten process——数据的白化处理

热门文章

  1. Maven下载sources时报错java.lang.RuntimeException: Cannot reconnect
  2. 51系列单片机IO模试设置
  3. win10电脑插耳机没反应(win10插上耳机还外放)
  4. 图机器学习——2.1 节点嵌入:基于随机游走
  5. BeagleBone Black 移植U-Boot (2 MLO、U-Boot)
  6. MATLAB绘制B样条曲线
  7. 使用es6模块化出现Access to script at 'file:///... ..from origin 'null' has been blocked。。。错误
  8. 查看SqlServer数据库上面脚本修改信息以及修改日志
  9. S3C2440的裸奔--内存篇(非MMU)--------转的网友 泠瑛 的博客文章在此谢过!
  10. 氢键H-H的博客目录