目录

一、模块介绍

(一)基本信息

(二)运行条件

(三)内部介绍

(四)模块工作流程

(五)指令集

(六)模块地址

(七)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电压

(三)内部介绍

光敏传感器实验串口python 光敏传感器模块程序_stm32

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

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

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

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

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

(四)模块工作流程

光敏传感器实验串口python 光敏传感器模块程序_stm32_02

 注:实线箭头表示自动执行,虚线箭头表示通过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

光敏传感器实验串口python 光敏传感器模块程序_字节数_03

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

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

光敏传感器实验串口python 光敏传感器模块程序_stm32_04

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

(八)结果计算公式

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

光敏传感器实验串口python 光敏传感器模块程序_51单片机_05

二、程序设计

这里演示的是 连续读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 mode
	delay_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();                //回应ACK
		BH1750_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)
	{
		
	}	
}

三、演示效果

(一)黑暗处

光敏传感器实验串口python 光敏传感器模块程序_stm32_06

(二)对着我的台灯

光敏传感器实验串口python 光敏传感器模块程序_字节数_07

 四、补充

(一)硬件连接

①SCL-------PB5

②SDA-------PB6

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

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

⑤GND------GND

(二)模块图

 

光敏传感器实验串口python 光敏传感器模块程序_字节数_08

(三)原理图

光敏传感器实验串口python 光敏传感器模块程序_字节数_09

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