基于BH1750FVI环境光传感器的迷你照度计制作【开源】
成松秦
青海湟川中学,青海省西宁市
TonyCheng2022/02/18原创 电子杂谈
中文摘要
基于BH1750FVI环境光传感器以及STM32G030F6P6微控制器的照度计制作。
Abstract
DIY a luxmeter using BH1750FVI ambient light sensor & STM32G030F6P6 microcontroller.

一、概述

去年读到虎哥文章《关于大幅提高室内照明亮度的设想》(https://www.kechuang.org/t/86169),并阅读一些相关文献后,我开始重视室内照明亮度。原先家中客厅使用72W的LED吊顶灯,主观感觉并不亮,于是更换为180W的LED灯,卧室、书房照明灯功率均加大到原先一倍以上,个人感觉可以较好满足日常需求。但升入高中后,感觉教室及宿舍照明亮度均较暗,加上同学们喜欢拉窗帘上课,于是有了购买/制作一个照度计的想法。但逛了一圈淘宝后,发现稍微像样的照度计都要100+,于是决定自己制作。年后有了一些空闲时间,遂自制了此照度计。

主要特性:

-量程0~65535lux;

-光谱响应与人眼近似(光谱响应曲线见附图1);

-0.96寸160*80 LCD显示屏,根据环境光亮度自动调节背光亮度;

-尺寸小(30*50*12mm),便于携带;

-250mAh锂聚合物电池,续航时间可达25h(最低背光亮度下),USB充电。


二、元器件介绍

此照度计核心元件为BH1750FVI环境光传感器,ADC有效位数16bit,对应0~65535lux照度值,光谱响应限于可见光波段,且与人眼近似。与微控制器采用I2C总线进行通信,驱动十分简单,且无需校准等操作,可直接读出照度值。

微控制器使用STM32G030F6P6。数据显示使用一块0.96" LCD屏幕,驱动IC为ST7735S,使用SPI总线与微控制器通信。

电源部分使用TP4054、SPX3819MX-3.3和锂聚合物电池,USB-Micro接口充电。


三、硬件设计

  1. 原理图

    Schematic_照度计_2022-02-17.png

    (R1实际使用10kΩ,R7、R8实际使用100kΩ,R10实际使用30kΩ)

    使用SWD接口进行程序烧录与调试。

  2. PCB Layout图、3D图、实物图

    1645105513917.jpg

    1645105553344.jpg

    IMG20220218085950.jpg

    (Layout图中铺铜隐去)

    PCB Gerber文件见附件一。

  3. 遇到的一些硬件问题

    (1)BH1750FVI封装十分诡异,仅能通过封装上极微小的丝印字体辨别安装方向,焊接时需格外注意。

    (2)由于忘记购买液晶屏背胶,屏幕临时采用AB胶固定,可靠性较低,以后使用类似设计时应加以注意。

    (3)使用的直插式开关引脚对PCB底面有遮挡,被迫选择了更小的电池。


四、程序设计

使用STM32CubeMX生成初始化代码,KEIL μV5编写主要源码,基于STM32 HAL库开发。

大致思路:上电→MCU片上外设初始化→LCD及BH1750FVI初始化、校准ADC→以约8Hz速率循环读取照度值与电池电量值并显示在LCD上,并根据照度值调整背光亮度。

使用BH1750时有一点需要注意:BH1750FVI在默认情况下,输出值/实际照度值 = 1.2,此时量程为0~54612lux。若想要使量程达到0~65535lux,需将传感器MTreg寄存器的值改为0x3A。

LCD背光亮度值(Y,最大值499)与照度(E)的关系函数为$Y=20+2E$。

LCD驱动库文件参考厂商源码移植编写,BH1750FVI驱动库文件参考Datasheet自主编写。

全部源码见附件二。

部分诡异bug与修复措施:

(1)LCD实际显示的颜色与代码相反,修改RGB/BGR控制寄存器无法解决,使用另一块ST7735S驱动的1.8寸屏幕时无此问题。目前暂未修复,恳请了解此问题的大佬不吝赐教,谢谢!

(2)STM32G030硬件SPI在时钟频率高于16MHz时无法正常通信,且本人制作的其他STM32G030作为MCU的项目均如此。修复措施:排查发现GPIO口输出速率设置为“LOW”,改为"VERY HIGH"后可在32MHz下正常通信。


五、实际使用测试

完成制作后,本人用其测量了不同环境下的照度值:

(1)家中客厅桌面照度:约675lux(清晨,吊顶灯(180W LED)打开,自然采光照度约75lux,灯具正下方)。

IMG_20220219_165440.jpg

(2)家中书桌面照度:约1500lux(清晨,吊顶灯关闭,台灯(6W LED)开最高亮度档,自然采光照度约115lux,灯具正下方)。

IMG_20220219_165840.jpg

(3)家中卧室地面照度:约25klux~28klux(正午,灯具关闭,多云)或约47klux~52klux(正午,灯具关闭,晴天)。

和手机照度计APP测量结果基本一致。

开学后会把它拿到学校去测量教室、宿舍等处的照明亮度,并根据测量结果采取相应补充照明措施。(个人估计宿舍地面照明亮度在70~100lux左右,可能低于国家标准)


六、总结

这是我学习STM32后开发的第四个😂(我的上一篇帖子介绍了第一个,另外两个是参加省科技创新大赛的项目,比赛结束后将开源并详细发布在科创),总的来说此玩具复杂度低,开发顺利且耗时短。开发过程中主要学习了STM32定时器PWM用法、BH1750FVI驱动方法TP4054使用方法以及一些PCB布线技巧。个人感觉有一定收获,虽然大佬们看来应该不算什么😂


附件:

attachment icon 附件一.zip 47.22KB ZIP 11次下载

attachment icon 附件二.zip 9.27MB ZIP 9次下载


附图:

  1. BH1750FVI光谱响应曲线

    1645190467788.jpg



-欢迎拍砖、讨论-

-THE END-

[修改于 5个月25天前 - 2022/02/19 17:15:29]

+1  学术分    1211    2022/02/19 完整的电子工程设计、制作、验证过程。
来自:电子信息 / 电子技术综合交流区 / 科创茶话动手实践:实验报导
8
7
全桥整流
5个月26天前 修改于 5个月26天前
1楼

这个芯片还是挺好用的,我当时学iic通信,就是用这个芯片,亮度递增时,唯一奇怪的地方就是返回值从0lux增加到211lux左右就会归零,再开始从0lux开始递增,后来发现应该是和iic的函数有关,

不同人写的iic函数实现效果可能会有不同,用普中的iic函数可能会出现读取不了bh1750的问题(读字节函数那个地方电平没有拉低,我也找过其他人写的iic函数,有些也是有拉低,有些也是没有拉低的,这对于Bh1750是致命的,但对于eeprom的使用却似乎没有问题)。

引用
评论
4
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
5个月26天前 修改于 5个月26天前
2楼

楼主家真亮。我给饭厅换了6只飞利普14W面板灯,才把正下方的饭桌的亮度提高到600Lx。原来使用2只国产面板灯,亮度只有100多Lx,且随着时间的推移越来越暗。而房屋最早原装的是2只国产环形荧光面板灯,估计照度不超过80Lx

但600Lx让所有人开始很不适应,纷纷抱怨亮得刺眼。特别是老年人,还严肃的教育我该亮度有害健康。经过大概一个星期,大家纷纷觉得就是这个亮度好,饭桌变成了读书写字桌。

其它房间由于改造施工太麻烦,只是把原有灯具内的灯泡换成能装进去的最大功率,照度普遍只有50-150Lx(只有一处位于灯下方的桌面接近300Lx)。这个房子是二十年前按照主流标准装修的,不难想象,那个时代的家庭装修,能暗到什么程度。说句缺乏科学依据的话,这代人的眼睛,就是省电省亮度搞坏的,可惜悔之晚矣。

需要注意的是,某宝上买到的国产大功率LED灯具,光谱大多很不好,而且衰减快。经过多次失败教训,现在只好买飞利浦,还得注意买他相对高端的系列,缺点就是贵,国货的三倍以上价格。

引用
评论(4)
4
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
qwe
5个月24天前
3楼

楼主可以考虑加个硅光电池测量频闪,或者看看这个照度传感器频率响应能力,直接程序测量频闪。市面上能够测量频闪的照度计很贵,这也是衡量led灯具质量的重要指标之一。至于显色光谱那些测起来成本太高了

引用
评论(2)
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
hrrwto
5个月24天前
4楼

可以自己做照度传感器。用一只光电二极管搭配菲涅尔透镜。MCU改成51的就够了。


引用
评论(3)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
smith
5个月22天前
5楼

这个传感器最低能做到多少,最低不可能是0的,如果能测0.0001的光,我也想做一个

引用
评论(4)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
5个月22天前 修改于 5个月22天前
6楼
引用smith发表于5楼的内容
这个传感器最低能做到多少,最低不可能是0的,如果能测0.0001的光,我也想做一个

你需要三个传感器管大中小。小需要用硅光电管,可以小到几个光子,但如何校准要动脑筋。

引用
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
GiroPetrenko
5个月22天前
7楼

STM32G系列,好耶!

可惜不是pin2pin兼容,不过终于解决没货问题了。

引用
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
bg7dgh
5个月13天前
8楼

我也准备测量下家中照度,想去淘宝租一个机器 

引用
评论(1)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
加入关注取消关注
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
建议修改
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}