这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » AG32VH407下光照强度传感器BH1750及其检测

共7条 1/1 1 跳转至

AG32VH407下光照强度传感器BH1750及其检测 22

助工
2026-04-14 11:55:00     打赏

BH1750是用于I2C总线接口的数字环境光传感器IC。该集成电路适合于获取环境光数据,用于调整手机液晶屏和键盘背光功率在高分辨率下检测范围可达1-655351x

其之所以具有如此的精度,是因为它内置16 bitA/D转换器此外,它采用直接数字输出,省取了略复杂的计算标定处理。其分辨精度可达1勒克斯

勒克斯是光照度单位是指被光均匀照射的物体,在1平方米面积上得到的光通量是1流明时,照度1勒克斯。

image.png

1 块外观

该模块的基本参数见图2所示,其引脚作用如图3所示。

image.png

2 基本参数

image.png

3 引脚作用

在检测时,它与开发板的连接关系为:

SCL---PIN_62

SDA---PIN_61 

为此在 VE文件中所建立的映射关系如下:

GPIO5_0 PIN_62  #CLK

GPIO5_1 PIN_61  #SDA 

为便于提供高低电平的输出,定义的语句为:

#define SCL_Set()       GPIO_SetHigh(GPIO5,GPIO_BIT0)

#define SCL_Clr()       GPIO_SetLow(GPIO5,GPIO_BIT0) 

#define SDA_Set()       GPIO_SetHigh(GPIO5,GPIO_BIT1)

#define SDA_Clr()       GPIO_SetLow(GPIO5,GPIO_BIT1) 

#define IIC_SDA_IN      GPIO_GetValue(GPIO5,GPIO_BIT1)

#define IIC_WRITE      0    

#define IIC_READ       1    

#define SlaveAddress   0x46


BH1750启动与停止的函数内容为:

void BH1750_Start()
{   
    IIC_OUTPUT_MODE_SET();
    SDA_Set();         
    SCL_Set();          
    UTIL_IdleUs(5); 
    SDA_Clr();        
    UTIL_IdleUs(5);                
    SCL_Clr();  
}
 
void BH1750_Stop()
{
    IIC_OUTPUT_MODE_SET();
    SDA_Clr();
    SCL_Set();
    UTIL_IdleUs(5);   
    SDA_Set();
    UTIL_IdleUs(5);  
}

BH1750的回答函数为:

void BH1750_SendACK(char ack)
{
    IIC_OUTPUT_MODE_SET();    
    SCL_Clr();              
    if(ack) 
    {   
       SDA_Set();
    }
    else 
    {   
       SDA_Clr();
    }
    UTIL_IdleUs(2);                 
    SCL_Set();           
    UTIL_IdleUs(2);               
    SCL_Clr();  
}

BH1750发送字节数据的函数为:

void BH1750_SendByte(char data)
{
    char i;
    IIC_OUTPUT_MODE_SET();
    SCL_Clr();
    UTIL_IdleUs(2);  
    for (i=0;i<8;i++)
    {
        if(data&0x80)
        {   
            SDA_Set();
        }
        else 
        {
           SDA_Clr();
        }
        data <<= 1;
        SCL_Set();  
        UTIL_IdleUs(2);  
        SCL_Clr();
        UTIL_IdleUs(2);  
    }
}

BH1750接收字节数据的函数为:

char BH1750_RecvByte()
{
    char i;
    char data = 0;
    IIC_INPUT_MODE_SET();
    for (i=0;i<8;i++)
    {
        SCL_Clr();
        UTIL_IdleUs(2);  
        SCL_Set(); 
        data <<= 1;
        SCL_Set(); 
        if(IIC_SDA_IN) data|=0x01;               
        UTIL_IdleUs(2);  
    }
    SCL_Clr();
    return data;
}

BH1750向指定寄存器发送数据的函数为:

void Single_Write_BH1750(char REG_Address)
{
    BH1750_Start();
    BH1750_SendByte(SlaveAddress);
    BH1750_RecvACK();
    BH1750_SendByte(REG_Address);
    BH1750_RecvACK();
    BH1750_Stop();
}

BH1750读取数据的函数为:

void Multiple_Read_BH1750()
{ 
    BH1750_Start();
    BH1750_SendByte(SlaveAddress+1);
    BH1750_RecvACK();
    BUF[0] = BH1750_RecvByte();
    BH1750_SendACK(0);
    BUF[1] = BH1750_RecvByte();
    BH1750_SendACK(1);
    BH1750_Stop();
    UTIL_IdleUs(5e3);
    BACK_COLOR=WHITE;
    POINT_COLOR=RED;
}

获取传感器检测数据的函数为:

void Get_Sunlight_Value()
{
    int dis_data=0;
    float temp;
    char i=0;
    unsigned int sd;
    BACK_COLOR=WHITE;
    POINT_COLOR=RED;
    Single_Write_BH1750(0x01); 
    Single_Write_BH1750(0x10); 
    UTIL_IdleUs(180e3);
    Multiple_Read_BH1750(); 
    for(i=0;i<3;i++)    dis_data=BUF[0];
    dis_data=(dis_data<<8)+BUF[1];
    temp=(float)dis_data/1.2;
    sd=temp;
    printf("light: %d \r\n",sd); 
}

在以上函数的配合下,实现光照强度检测的主程序为:

int main(void)
{
    board_init();
    BH1750_Init();
    while (1)
    {
       Get_Sunlight_Value();    
       UTIL_IdleUs(500e3);
      } 
}

经程序的编译和下载,在图4所示的器件连接情况下,其检测效果如图5至8所示。

image.png

4 器件连接

image.png

5  检测效果1(夜晚灯光下)

image.png

6  检测效果2(手机_手电筒直射)

image.png

7  检测效果3(早晨室内)

image.png

8  检测效果4(朝向窗外)

若配上OLED显示屏,就可以直接显示检测到的光照强度值。






关键词: AG32VH407    

高工
2026-04-19 12:33:38     打赏
2楼

这是在什么环境下测到的照度数据?总感觉这个值低的有些离谱


专家
2026-04-20 13:59:38     打赏
3楼

确实,测试得到的数据挺低的。


助工
2026-04-20 16:10:40     打赏
4楼

有时间再写入程序测一下白天的情况


专家
2026-04-22 07:23:05     打赏
5楼

这个应该需要一个标准设备类做对比。


高工
2026-04-22 17:33:47     打赏
6楼

前一段时间咱们论坛做的那个测光DIY蛮好玩的,你这个可以研究研究也做个那个就有应用场景了


助工
2026-04-23 01:18:14     打赏
7楼

测光DIY活动没注意,漏过了。以前还看人做过变色龙,通过色彩传感器感知周围色彩,然后以RGB_LED进行色彩模拟。


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]