做自动台灯、白天自动拉窗帘、给植物补光判断光线够不够,核心都是要能测量环境光强。BH1750是一枚数字I2C光照传感器,直接把光照度换算成LUX(勒克斯)送出来,不用自己接光敏电阻做AD换算。这篇把它的接线、读数模式和用法讲透。
BH1750是怎么把光变成数字的
模块上有一颗感光的二极管,光线照到它会转化成小电流,芯片内部经过放大和16位ADC采样后,直接把勒克斯值通过I2C送出。它内建了和眼睛匹配的光谱响应,325nm到845nm,能近似模拟人眼对亮暗的感知。

量程可以从1勒克斯一路读到65535勒克斯,也就是从昏暗的室内到正午太阳暴晒都能覆盖,16位数字输出读起来很直接,省掉了光敏电阻配AD计算的麻烦。
BH1750怎么接线到Arduino
走I2C,四根线就够了:VCC接5V或3.3V、GND接地、SCL接A5、SDA接A4。模块的ADDR脚决定地址,通常默认拉高是0x5C,接到地就是0x23,多个传感器一起用时靠这个区分。

库用BH1750库,初始化时传入分辨率模式,loop里调lightLevelRead()就能拿到当前勒克斯值,用一个阈值判断就能做自动亮灭。
分辨率模式和避坑
读数模式分连续和一次触发两种,连续模式下传感器会一直自动更新,适合做实时调光;需要省电时可以用单次模式读完一次就睡。分辨率档位也分高中低三档,高分辨率精度更好但测量时间长一点。
避坑主要两点:一是高分辨率模式单次测量约要120ms,loop别读得太频繁,不然读数还是旧值;二是模块感光面要朝向光源、别被遮挡或贴在全透明亚克力下面,光被反射干扰后读数会不准。接线判地址、选好测量模式,一套自动亮度控制就立起来了。




感光面要朝向光源,这个提醒很到位
比光敏电阻省心多了,数字输出直接读勒克斯
自动调光用连续模式就稳,别去读旧的