一、光照基础与传感器选型
各位同学好,我是老张。做智能家居系统这么多年,我始终觉得光照系统是最能体现「智能」二字的模块。你想想看,窗帘自动开合、灯光随环境亮度变化,这些场景用户每天都能感知到。但要把这件事做好,第一步就得把光照的基础概念和传感器选型搞明白。
今天这一章,我们就来聊聊光照强度单位、常见传感器的原理,以及我这些年踩过的坑。
1.1 光照强度单位:勒克斯与流明
先问大家一个问题:你买的灯泡上写着「800流明」,这到底是什么意思?
流明(lm) 是光通量的单位。说白了,就是光源发出的光总量。一个40W的白炽灯大概能发出400-500流明,而一个8W的LED灯也能达到这个水平。嗯,这里要注意,流明是光源本身的属性,跟你离多远没关系。
勒克斯(lux) 就不一样了。它是照度单位,表示单位面积上接收到的光通量。1勒克斯 = 1流明/平方米。你想想看,同样一个灯泡,离得近照度就高,离得远照度就低。这就是为什么我们做传感器选型时,关注的是勒克斯值,而不是流明值。
核心区别一句话总结:流明是「发出来多少」,勒克斯是「照到多少」。
我在项目中遇到过不少新手,拿着流明值去算光照补偿,结果完全对不上。其实你只要记住:传感器测量的是勒克斯,灯具标注的是流明。两者之间差了一个「面积」的换算。
常见的照度参考值(我平时做项目都会记在笔记本上):
| 场景 | 照度范围(lux) |
|---|---|
| 深夜月光 | 0.1 - 0.3 |
| 黄昏/阴天室内 | 50 - 200 |
| 办公室桌面 | 300 - 500 |
| 晴天室内(靠窗) | 1000 - 2000 |
| 晴天室外 | 10000 - 100000 |
1.2 常见光照传感器原理与选型对比
市面上光照传感器种类不少,但真正适合智能家居场景的,我个人常用就三种:BH1750、TSL2561 和光敏电阻。咱们一个一个说。
1.2.1 BH1750 数字光照传感器
这个传感器我用的最多。为什么?因为它直接输出勒克斯值,不需要你手动换算。内部集成了高精度ADC,测量范围1-65535 lux,精度能达到±1 lux。
它的工作原理其实不复杂:利用光电二极管将光信号转为电流,再通过内部电路放大、模数转换,最后通过I2C接口输出数字量。你直接读寄存器就能拿到勒克斯值。
我的使用习惯:BH1750有3种测量模式,我一般用「高分辨率模式2」,分辨率0.5 lux,测量时间120ms。既保证了精度,响应速度也够用。
接线也很简单:VCC接3.3V,GND接地,SCL和SDA接I2C总线。地址引脚ADDR接地时地址是0x23,接VCC时是0x5C。我习惯把ADDR接地,省事。
// BH1750 读取示例(Arduino)
#include <Wire.h>
#define BH1750_ADDR 0x23
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
Wire.beginTransmission(BH1750_ADDR);
Wire.write(0x10); // 高分辨率模式
Wire.endTransmission();
delay(120);
Wire.requestFrom(BH1750_ADDR, 2);
uint16_t value = (Wire.read() << 8) | Wire.read();
float lux = value / 1.2;
Serial.print("光照强度: ");
Serial.print(lux);
Serial.println(" lux");
delay(1000);
}
1.2.2 TSL2561 数字光照传感器
TSL2561 也是个好东西。它有两个光电二极管:一个对可见光敏感,另一个对红外光敏感。通过计算两者的差值,可以更准确地模拟人眼对光的感知。
它的测量范围更宽,0.1-40000 lux,而且功耗极低,适合电池供电的设备。不过,它输出的是原始ADC值,你需要自己换算成勒克斯。换算公式有点复杂,不同光照条件下要用不同的系数。
我曾经踩过的坑:TSL2561的积分时间设置不当,会导致测量值跳变。比如在快速变化的日光灯下,如果积分时间设得太短,读数会忽高忽低。我后来统一设为402ms的积分时间,稳定性好多了。
选型对比时,我一般这样看:
| 参数 | BH1750 | TSL2561 | 光敏电阻 |
|---|---|---|---|
| 输出类型 | 数字(I2C) | 数字(I2C) | 模拟(电压) |
| 测量范围 | 1-65535 lux | 0.1-40000 lux | 取决于电路 |
| 精度 | ±1 lux | ±2 lux(典型) | 低(±20%) |
| 功耗 | 0.12mA | 0.24mA | 取决于分压电阻 |
| 价格 | 中等 | 较高 | 极低 |
| 易用性 | ★★★★★ | ★★★☆☆ | ★★☆☆☆ |
1.2.3 光敏电阻(LDR)
光敏电阻,说白了就是一个阻值随光照变化的电阻。暗环境下阻值可达1MΩ以上,强光下可能只有几百欧姆。配合一个固定电阻组成分压电路,用ADC读取电压值就能估算光照强度。
它最大的优点是便宜,几毛钱一个。但缺点也很明显:精度差、响应慢、一致性不好。同一个型号的光敏电阻,不同批次之间阻值可能差30%。
我的建议:如果你做的是玩具级产品,或者只需要判断「白天/黑夜」这种二值场景,光敏电阻够用。但如果你要做精确的自动调光,还是老老实实用BH1750吧。
1.3 选型总结与实战建议
说了这么多,到底怎么选?我个人习惯是这样的:
- 室内自动调光系统:首选BH1750。精度够、易用性好、价格适中。我最近一个项目里用了20多个BH1750,全部一次性校准通过。
- 户外或宽动态范围场景:选TSL2561。它能处理从月光到正午阳光的极端变化,而且红外补偿让数据更准。
- 成本敏感或简单判断:光敏电阻。但记得加一个RC低通滤波,不然读数会抖得厉害。
最后说一个避坑指南:传感器安装位置很重要。我曾经把BH1750装在窗帘盒内侧,结果窗帘拉上后传感器被遮住,系统以为天黑了,把灯全打开了。后来我改成装在窗户上沿、朝外倾斜15度,才解决了这个问题。
好了,这一章就到这里。下一章我们聊聊调光策略——怎么根据光照值平滑地控制窗帘和灯光,让用户感觉不到「顿挫感」。到时候我会分享一个我调试了三个月的PID调光算法,很有意思。