电子杂谈
主要内容: 1.STM32开发、模数电路、PCB设计学习笔记; 2.电子类项目/制作分享; 3.其他电子技术相关内容。
文号 901565
6850
8
收藏(1)

基于BH1750FVI环境光传感器的迷你照度计制作【开源】

中文摘要

基于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 8次下载

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


附图:

  1. BH1750FVI光谱响应曲线

    1645190467788.jpg



-欢迎拍砖、讨论-

-THE END-

[修改于 4 个月前 - 2022-02-19 17:15:29]

8
全桥整流
4个月15天前 修改于 4个月15天前
1楼

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

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

虎哥
4个月15天前 修改于 4个月15天前
2楼

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

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

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

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

qwe
4个月14天前
3楼

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

hrrwto
4个月13天前
4楼

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


smith
4个月11天前
5楼

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

虎哥
4个月11天前 修改于 4个月11天前
6楼
引用smith发表于5楼的内容
这个传感器最低能做到多少,最低不可能是0的,如果能测0.0001的光,我也想做一个

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

GiroPetrenko
4个月11天前
7楼

STM32G系列,好耶!

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

bg7dgh
4个月3天前
8楼

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

TonyCheng
青海省西宁市高一学生,CTX Industries成员,嵌入式、电子技术爱好者。
 内容统计
2022年05月
3 篇
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

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

空空如也

加载中...
回复
设为精选取消精选
评学术分
鼓励
编辑
查看历史
通过审核
加入收藏取消收藏
退修或删除
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
回复
加入收藏取消收藏