打印
[MM32软件]

【EV Board (MM32L0136C7P)测评】+光照强度检测与显示

[复制链接]
755|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2022-12-2 00:16 编辑

当初申请的目标是一个环境状态检测器,光照强度检测是其中的一项指标,所使用的检测模块是BH1750
使用它与OLED屏相结合,可轻松地完成显示的要求,其效果如图1所示。
1  OLED屏显示效果

整个电路的连接情况为:
OLED:
SCL---B9
SDA---B10

BH1750
SCL---D5
SDA---A8
使引脚输出高低电平的语句定义为:
#define SCL_Set()  GPIO_WriteBit(GPIOD, GPIO_PIN_5, 1u)
#define SCL_Clr()  GPIO_WriteBit(GPIOD, GPIO_PIN_5, 0u);
#define SDA_Set()  GPIO_WriteBit(GPIOA, GPIO_PIN_8, 1u);
#define SDA_Clr()  GPIO_WriteBit(GPIOA, GPIO_PIN_8, 0u);
由于在BH1750的检测中,既有数据的输出,又有数据的输入,故其数据引脚需要在引脚的输入、输出模式间切换。

为此,需要为其配置相应的输入与输出模式的配置函数,其内容如下:
void IIC_INPUT_MODE_SET()
{
    gpio_init.Pins  = GPIO_PIN_8;
    gpio_init.PinMode  = GPIO_PinMode_In_PullUp;
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &gpio_init);
    GPIO_PinAFConf(GPIOA, gpio_init.Pins, GPIO_AF_15);
}

void IIC_OUTPUT_MODE_SET()
{
    gpio_init.Pins  = GPIO_PIN_8;
    gpio_init.PinMode  = GPIO_PinMode_Out_PushPull;
    gpio_init.Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &gpio_init);
    GPIO_PinAFConf(GPIOA, gpio_init.Pins, GPIO_AF_15);
}

此外,在BH1750的检测过程中还相应相应的字节数据发送与接收函数,其内容为:
void BH1750_SendByte(char data)
{
    char i;
    IIC_OUTPUT_MODE_SET();
    SCL_Clr();
    del_t(2);
    for (i=0;i<8;i++)
    {
        if(data&0x80)
        {
                SDA_Set();
        }
        else
        {
                SDA_Clr();
        }
        data <<= 1;
        SCL_Set();
        del_t(2);
        SCL_Clr();
        del_t(2);
    }
}

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

BH1750获取光照强度的函数为:
void Get_Sunlight_Value()
{
    int dis_data=0;
    float temp;
    char i=0;
    unsigned int sd;
    Single_Write_BH1750(0x01);
    Single_Write_BH1750(0x10);
    del_t(4000);
    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;
    OLED_ShowNum(0,6,sd,5,16);
}

实现图1所示效果的主程序为:
int main(void)
{
    BOARD_Init();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(20,0,"EVB-L0136",16);
    OLED_ShowString(20,2,"BH1750",16);
    OLED_ShowString(20,4,"light: (lx)",16);
    BH1750_Init();
    del_t(2000);
    while (1)
    {
            Get_Sunlight_Value();
            del_t(5000);
    }
}

此外,若使用LCD屏来进行显示,其程序为:
int main(void)
{
      uint32_t dat;
      BOARD_Init();
      app_slcd_init();
      BH1750_Init();
      del_t(1000);
      while (1)
      {
           Get_Sunlight_Value();
           del_t(5000);
      }
}

在编译下载后,其效果如图2所示。
2  LCD显示效果


使用特权

评论回复
沙发
1988020566| | 2022-12-6 13:59 | 只看该作者
这个标定好的信号吗?              

使用特权

评论回复
板凳
10299823| | 2022-12-6 14:08 | 只看该作者
可以使用硬件iic驱动BH1750吗?

使用特权

评论回复
地板
beacherblack| | 2022-12-6 16:26 | 只看该作者
BH1750怎么才能检测太阳强度,控制芯片呢。

使用特权

评论回复
5
mollylawrence| | 2022-12-10 08:08 | 只看该作者
BH1750好用很多。              

使用特权

评论回复
6
jinglixixi|  楼主 | 2022-12-10 11:11 | 只看该作者

没错,无需数值标度处理。

使用特权

评论回复
7
jinglixixi|  楼主 | 2022-12-10 11:11 | 只看该作者
10299823 发表于 2022-12-6 14:08
可以使用硬件iic驱动BH1750吗?

应该没问题

使用特权

评论回复
8
jinglixixi|  楼主 | 2022-12-10 11:12 | 只看该作者
beacherblack 发表于 2022-12-6 16:26
BH1750怎么才能检测太阳强度,控制芯片呢。

应该无差别

使用特权

评论回复
9
tpgf| | 2023-1-1 15:29 | 只看该作者
光照强度的检测结果和检测环境有关系吗

使用特权

评论回复
10
nawu| | 2023-1-1 15:40 | 只看该作者
我们一般买回来的这种检测光强度的传感器的通讯方式是什么呢

使用特权

评论回复
11
aoyi| | 2023-1-1 16:07 | 只看该作者
光照强度检测的精度都和什么参数有关系呢

使用特权

评论回复
12
zljiu| | 2023-1-1 16:33 | 只看该作者
这个光照强度的检测的实时性能达到多少啊

使用特权

评论回复
13
gwsan| | 2023-1-1 16:42 | 只看该作者
BH1750这个芯片用的还是非常多的  不过可能芯片比较老了  精度还是有待改善

使用特权

评论回复
14
tfqi| | 2023-1-1 16:51 | 只看该作者
这种检测器件的最大的特点就是非常的小巧  但是不知道应用环境是不是能禁得住考验

使用特权

评论回复
15
jinglixixi|  楼主 | 2023-1-2 00:08 | 只看该作者
tfqi 发表于 2023-1-1 16:51
这种检测器件的最大的特点就是非常的小巧  但是不知道应用环境是不是能禁得住考验 ...

那要看具体情况了,民用一般没问题。

使用特权

评论回复
16
jinglixixi|  楼主 | 2023-1-2 00:09 | 只看该作者
1988020566 发表于 2022-12-6 13:59
这个标定好的信号吗?

没错

使用特权

评论回复
17
jinglixixi|  楼主 | 2023-1-2 00:10 | 只看该作者
10299823 发表于 2022-12-6 14:08
可以使用硬件iic驱动BH1750吗?

应该可以,但不如这样方便。

使用特权

评论回复
18
jinglixixi|  楼主 | 2023-1-2 00:10 | 只看该作者
nawu 发表于 2023-1-1 15:40
我们一般买回来的这种检测光强度的传感器的通讯方式是什么呢

I2C

使用特权

评论回复
19
jinglixixi|  楼主 | 2023-1-2 00:12 | 只看该作者
zljiu 发表于 2023-1-1 16:33
这个光照强度的检测的实时性能达到多少啊

关心的话,查下手册。

使用特权

评论回复
20
Jacquetry| | 2023-1-5 17:16 | 只看该作者
10299823 发表于 2022-12-6 14:08
可以使用硬件iic驱动BH1750吗?

硬件iic有可能会出问题 吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

455

主题

2756

帖子

38

粉丝