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

共1条 1/1 1 跳转至

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

助工
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所示。

image.png

4 器件连接

image.png

5  检测效果

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






关键词: AG32VH407    

共1条 1/1 1 跳转至

回复

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