给项目加光照检测,大多数人会在三条路里打转:一颗光敏电阻自己搭分压、一块现成的光敏模块、或者一颗走I2C的BH1750数字传感器。三样都能感知明暗,但读出来的东西完全不是一回事:一个给相对值,一个给开关量加粗略模拟量,一个直接输出勒克斯。这篇把三款逐项摆开对一遍,参数都对着官方页面核对过,看完按需求对号入座。

先把对象锚定清楚。光敏电阻是一个元件,两根引脚,没有极性,靠硫化镉一类感光材料的电阻随光照变化工作;光敏模块是把光敏元件和调理电路做成一小块板子,常见的四针款带VCC、GND、DO、AO四个引脚;BH1750则是罗姆的16位数字环境光传感器,走I2C总线,输出就是照度值。档次从元件到模块再到芯片级方案,价格和精度也按这个顺序往上走。
光敏电阻:几毛钱的元件,读出来的是相对值
光敏电阻的优势就是便宜和简单:和一颗10kΩ电阻组成分压电路,接到单片机模拟脚,analogRead一下就能拿到0到1023的读数。Random Nerd Tutorials那个经典的夜灯安防项目就是这么做的,光敏电阻接A0,代码里设一个300的阈值,读数高于阈值就当环境变暗、触发开灯,逻辑几行写完。
但要知道它读的是什么。分压电路输出的是电压,不是照度,读数和勒克斯之间没有一个标定的换算关系,不同批次的光敏电阻读数还对不上。响应也慢,光照突变后要等一段时间才稳定,温度一变读数还会漂。所以它适合做判断明暗的光控开关,比如路灯 dusk to dawn 那类场景,不适合做需要报数字的照度监测。

光敏模块:把调理电路做进板子,接上就能用
光敏模块是元件方案的打包升级。市面上最常见的四针款用LM393比较器,DO脚输出干净的开关信号,板上电位器直接拧出触发阈值,AO脚则把分压后的原始电压引出来,想要连续读数就接AO。和裸元件比,省掉了自己搭分压和写阈值判断,接线也从三根变四根,代价是几块钱的差价。
另一种代表是Seeed的Grove光敏传感器,v1.2版用的感光元件是LS06-S,板上加了一片LM358运放做电压输出,光越亮模拟输出值越大。官方wiki给出的规格是:工作电压3到5V,工作电流0.5到3mA,响应时间20到30毫秒,峰值波长540纳米,整块板重4克。这类品牌模块的好处是规格页写得清清楚楚,接线用Grove座一插即用,对新手友好;代价是比白牌四针模块贵,而且读数依旧是相对值,不是勒克斯。

BH1750:直接给出勒克斯值的数字方案
BH1750是三款里唯一能报出标准照度单位的。官方资料和Random Nerd Tutorials的教程页写得明确:16位环境光传感器,I2C接口,量程1到65535勒克斯,光谱响应接近人眼,红外影响很小,测量偏差在正负20%左右。它支持连续和单次两类测量模式,分辨率分三档:低分辨率4勒克斯精度、耗时约16毫秒;高分辨率1勒克斯精度、约120毫秒;高分辨率2模式0.5勒克斯精度、同样约120毫秒。
引脚是标准的五针:VCC、GND、SCL、SDA,外加一个地址选择脚ADD。ADD悬空或接地时I2C地址是0x23,接VCC时是0x5C,一条总线上可以挂两颗。和ESP32接线很简单:VCC接3.3V,SCL接GPIO22,SDA接GPIO21,ADD悬空。软件上用Christopher Laws的BH1750库,库管理器里搜BH1750装上,一句readLightLevel()就能拿到浮点勒克斯值,串口里直接打印。


怎么选:按需求对号入座
把三项对比归纳成四条,按需求挑就行。
1. 只判断明暗、预算压到最低、愿意自己调阈值:选光敏电阻。两毛钱的元件加一颗10kΩ电阻搞定,代价是读数只能自己定标,换批次要重调。
2. 想快速做出光控开关、不想碰分压电路:选LM393四针光敏模块。DO脚直接读数字口,阈值在板上拧电位器调,十分钟出效果;要连续读数就接AO,但记住AO读数同样是相对值。
3. 要对外报照度数值、做环境监测、自动调光、跨设备数据可比:选BH1750。1到65535勒克斯量程加数字输出,是三款里唯一能写进数据记录的方案,也最省软件调参的功夫。
4. 只给我自己排个序:做产品或者做数据类项目,BH1750优先;做教学演示和一次性小玩具,光敏模块优先;光敏电阻适合进料成本敏感、又有人调过参的量产场景,个人项目里它省下的钱抵不上调参花掉的时间。
几条冷静提示。光敏电阻和LM393模块的AO读数都别当成照度值用,两者都没有勒克斯标定;BH1750虽然输出标准单位,正负20%的偏差决定了它是环境光级别而非实验室级别,对精度要求高就该上分光类仪器。价格方面,光敏电阻单个几毛钱、白牌四针模块普遍几块钱、Grove这类品牌模块十几块、BH1750模块几块到十几块,按主流电商散件价粗估,价格截至2026年11月8日,下单前以店铺实价为准。
收个尾:要开关选模块,要数字选BH1750,要极致便宜且自己会调,光敏电阻最省。你的光照检测项目用的是哪一款,评论区聊聊踩过的坑。











想请教下,BH1750把ADD接VCC改地址之后,一条I2C总线是不是就能同时挂两个读两个位置的照度了?
以前做楼道感应灯用LM393那块模块,一下午都在拧电位器,看完这篇才真正搞明白DO和AO到底差在哪,早看到能省俩小时
光敏电阻调阈值调到怀疑人生,后来换了BH1750直接读勒克斯值,真是一劳永逸,就是贵了几块钱
±20%那个提示很实在,环境监测够用,想拿它做精确测量确实别想了,作者把边界讲清楚了
正好给孩子的Arduino套件补一颗光敏电阻试试,分压那段写得很明白,10kΩ加A0就搞定