[活动专区] 【AutoChips MCU评测报告】+BH1750光强检测

[复制链接]
1631|9
 楼主| jinglixixi 发表于 2020-6-11 13:01 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2020-6-12 07:51 编辑

BH1750是一款可测量光强的I2C器件,它具有体积小,并于使用的特点。

BH1750与MCU的连接关系为:
SCL——PA7
SDA——PA8

为了使 BH1750工作,它的SDA接 PB8,SCLA接 PB7,所作的相关定义语句如下:
#define IIC_SDA_IN                 GPIO_GetPinValue(GPIO_PA8)

#define IIC_INPUT_MODE_SET()       GPIO_SetDir(GPIO_PA8, 0)
#define IIC_OUTPUT_MODE_SET()   GPIO_SetDir(GPIO_PA8, 1)

#define SCL_Set()        GPIO_SetPinBits(GPIO_PA7)      // PA7
#define SCL_Clr()        GPIO_ResetPinBits(GPIO_PA7)        

#define SDA_Set()       GPIO_SetPinBits(GPIO_PA8)      // PA8
#define SDA_Clr()       GPIO_ResetPinBits(GPIO_PA8)

#define IIC_WRITE      0     
#define IIC_READ       1     
#define        SlaveAddress   0x46

相关辅助函数有:
  1. void BH1750_Start()
  2. {
  3. IIC_OUTPUT_MODE_SET();
  4. SDA_Set();         
  5. SCL_Set();         
  6. udelay(5);            
  7. SDA_Clr();        
  8. udelay(5);            
  9. SCL_Clr();           
  10. }

  11. void BH1750_Stop()
  12. {
  13. IIC_OUTPUT_MODE_SET();
  14. SDA_Clr();
  15. SCL_Set();
  16. udelay(5);
  17. SDA_Set();
  18. udelay(5);
  19. }

  20. void BH1750_SendACK(char ack)
  21. {
  22. IIC_OUTPUT_MODE_SET();  
  23. SCL_Clr();
  24. if(ack) SDA_Set();
  25. else SDA_Clr();
  26. udelay(2);           
  27. SCL_Set();           
  28. udelay(5);           
  29. SCL_Clr();           
  30. }

BH1750初始化函数:
  1. void BH1750_Init(void)
  2. {
  3. GPIO_SetDir(GPIO_PA7, 1);
  4. GPIO_SetDir(GPIO_PA8, 1);
  5. }

读取光强的函数为:
  1. void Get_Sunlight_Value()
  2. {
  3. int dis_data=0;
  4. float temp;
  5. char i=0;
  6. unsigned int sd;
  7. Single_Write_BH1750(0x01);
  8. Single_Write_BH1750(0x10);
  9. mdelay(180);
  10. Multiple_Read_BH1750();
  11. for(i=0;i<3;i++)
  12. dis_data=BUF[0];
  13. dis_data=(dis_data<<8)+BUF[1];
  14. temp=(float)dis_data/1.2;
  15. sd=temp;
  16. OLED_ShowNum(0,4,sd,5,16);
  17. }

实现图示效果的主程序为:
  1. int main(void)
  2. {
  3. InitDelay();
  4. OLED_Init();
  5. OLED_Clear();
  6. OLED_ShowString(0,0,"AC8711 TEST",16);
  7. OLED_ShowString(0,2,"BH1750:",16);
  8. OLED_ShowString(48,4,"lx",16);
  9. BH1750_Init();
  10. while (1)
  11. {
  12. Get_Sunlight_Value();
  13. mdelay(1000);
  14. }

  15. }

图片1.png
光强显示效果图

Cjy_JDxy 发表于 2020-6-11 14:46 | 显示全部楼层
小模块真多,感觉你可以获奖
 楼主| jinglixixi 发表于 2020-6-11 15:20 | 显示全部楼层
本帖最后由 jinglixixi 于 2020-6-11 15:22 编辑
Cjy_JDxy 发表于 2020-6-11 14:46
小模块真多,感觉你可以获奖

哈哈,但愿吧那就又可以增添些小模块了,如测PM2.5的模块、6轴检测模块、激光测距模块等,会更有意思的!也能够与大家分享更多的内容,以拓展设计的思路和实现方式。
wowu 发表于 2020-7-7 14:31 | 显示全部楼层
非常感谢楼主分享
xiaoqizi 发表于 2020-7-7 14:34 | 显示全部楼层
如何验证数值的正确性呢
木木guainv 发表于 2020-7-7 14:34 | 显示全部楼层
恶劣环境下可以使用吗
磨砂 发表于 2020-7-7 14:34 | 显示全部楼层
代码非常详细
晓伍 发表于 2020-7-7 14:35 | 显示全部楼层
楼主辛苦了
 楼主| jinglixixi 发表于 2020-7-8 00:18 | 显示全部楼层
xiaoqizi 发表于 2020-7-7 14:34
如何验证数值的正确性呢

它是数字化产品,采用的是出产标称值,是个人难达到的。
 楼主| jinglixixi 发表于 2020-7-8 00:21 | 显示全部楼层
木木guainv 发表于 2020-7-7 14:34
恶劣环境下可以使用吗

只要保证没有强的电、磁场,应该问题不大,当然也不能对器件有直接腐蚀、浸泡等的损伤了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

525

主题

2963

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部