1. 传感器基础:常见传感器类型及其工作原理

各位同学好,我是老张。做嵌入式传感器融合这块有些年头了。今天咱们聊聊智能灯具里最常用的几种传感器——PIR、光敏、超声波、雷达。

你想想看,一个灯具要“智能”,首先得知道周围发生了什么。是有人走过来了?天黑了没有?距离多远?这些信息全靠传感器来采集。我个人习惯把传感器比作灯具的“五官”,没有它们,灯具就是个瞎子。

1.1 PIR传感器——被动红外传感器

PIR,全称是Passive Infrared,被动红外。说白了,它就是个“体温探测器”。

工作原理:

所有高于绝对零度的物体都会辐射红外线。人体温度大约37°C,辐射的红外线波长在9-10μm左右。PIR传感器内部有两个敏感元,当人移动时,红外线变化被两个敏感元检测到差异,就会输出一个脉冲信号。

关键点:PIR只能检测移动的人体,不是静止的人。你坐在那里不动,它检测不到。

我的经验:我在做办公室智能灯控项目时遇到过一个问题——员工午休趴在桌上不动,灯自动灭了。后来我加了光敏传感器做辅助判断,才解决。嗯,这里要注意,PIR的检测范围通常是个扇形,角度90°-120°,距离3-8米。

典型参数:

参数 典型值 说明
检测角度 90°-120° 透镜决定
检测距离 3-8米 可调灵敏度
响应时间 0.5-2秒 取决于移动速度
工作电压 3.3V-5V 常见数字输出

避坑指南:我曾经在户外灯具上直接用PIR,结果夏天高温时频繁误触发。因为环境温度接近体温,传感器灵敏度会下降。后来我加了温度补偿算法才搞定。

1.2 光敏传感器——环境光检测

光敏传感器,也叫环境光传感器。它的任务很简单——告诉灯具现在是白天还是黑夜。

工作原理:

常见的有两种:光敏电阻和光电二极管。光敏电阻的阻值随光照强度变化,光照越强,阻值越小。光电二极管则是输出电流与光照成正比。

我个人习惯用数字式环境光传感器,比如BH1750。它直接输出lux值,省去了模拟量计算的麻烦。

// BH1750读取示例
#include <Wire.h>
#include <BH1750.h>

BH1750 lightMeter;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  lightMeter.begin();
}

void loop() {
  float lux = lightMeter.readLightLevel();
  Serial.print("光照强度: ");
  Serial.print(lux);
  Serial.println(" lux");
  delay(1000);
}

我的经验:做智能路灯时,我遇到过一个问题——黄昏时分光照变化很快,传感器频繁触发开关。后来我加了迟滞算法,比如光照低于50lux开灯,高于80lux才关灯。这样就不会来回跳了。

典型参数:

参数 典型值 说明
测量范围 1-65535 lux BH1750
分辨率 1 lux 高分辨率模式
响应时间 120ms 典型值

1.3 超声波传感器——距离测量

超声波传感器,大家最熟悉的就是HC-SR04了。它通过发射超声波并接收回波来测量距离。

工作原理:

发射器发出40kHz的超声波脉冲,遇到障碍物反射回来,接收器收到回波。距离 = 声速 × 时间 / 2。声速在空气中大约340m/s,受温度影响。

关键点:超声波对软性物体(如布料、海绵)反射效果差,对硬质平面反射效果好。而且它有个盲区,通常2-3cm内测不准。

// HC-SR04距离测量示例
#define TRIG_PIN 9
#define ECHO_PIN 10

void setup() {
  Serial.begin(9600);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
}

void loop() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  
  long duration = pulseIn(ECHO_PIN, HIGH);
  float distance = duration * 0.034 / 2;
  
  Serial.print("距离: ");
  Serial.print(distance);
  Serial.println(" cm");
  delay(500);
}

避坑指南:我曾经在会议室装超声波传感器检测人员就座情况,结果发现空椅子也能反射超声波。后来我结合了PIR传感器,只有同时检测到人体移动和距离变化才判定有人。

1.4 雷达传感器——微波运动检测

雷达传感器,常见的是24GHz或5.8GHz的微波雷达。它比PIR更灵敏,能检测微小的动作。

工作原理:

雷达发射微波信号,遇到移动物体时,反射信号的频率会发生变化(多普勒效应)。通过检测频率变化,就能判断是否有物体移动。

关键点:雷达可以穿透非金属材料(如塑料、木板),所以可以藏在灯具外壳内部。而且它能检测到呼吸引起的微小移动,比PIR灵敏得多。

典型参数:

参数 典型值 说明
工作频率 5.8GHz / 24GHz ISM频段
检测距离 3-15米 可调
穿透性 可穿透非金属 塑料、木板等
功耗 0.1-0.5W 比PIR高

我的经验:做智能家居时,我对比过PIR和雷达。PIR便宜但容易漏检,雷达灵敏但功耗高。我的建议是:走廊、卫生间用PIR就够了;卧室、书房这种需要检测微小动作的地方,用雷达更靠谱。

1.5 传感器选型对比

最后,我整理了一个对比表,方便大家选型时参考:

传感器 检测对象 优点 缺点 典型应用
PIR 人体移动 便宜、低功耗 不能检测静止、受温度影响 走廊灯、感应灯
光敏 环境光照 简单、成本低 响应慢、精度一般 路灯、自动调光
超声波 距离 精度高、不受颜色影响 有盲区、受温度影响 自动门、停车辅助
雷达 微小移动 灵敏、可穿透 功耗高、成本高 智能家居、安防

最后提醒:传感器融合不是简单地把几个传感器拼在一起。我曾经犯过这个错——把PIR和超声波直接并联使用,结果互相干扰。正确的做法是分时工作,或者用不同的工作频率。这些我们后面章节会详细讲。

好了,这一章就到这里。下一章我们讲传感器数据采集与预处理,包括滤波、去噪、校准这些实战内容。有什么问题欢迎交流。