火焰传感器(红外火焰检测)
| 器材 | 数量 | 参考 |
|---|---|---|
| 火焰传感器模块 | 1 | — |
价格随渠道波动,以购买页实时为准。
想做一辆能"循着火苗跑过去"的灭火小车,或者一个"打火机一靠近就报警"的小装置,第一件要解决的事是:怎么让单片机知道"前面有明火"。最便宜、最入门的答案就是这块巴掌大的火焰传感器模块——板子上那颗黑色或深蓝色、像小灯泡又像探头的元件,对着火焰特有的红外光特别敏感。它一头接电源,另一头给你两路输出:一路模拟量反映火有多近多大,一路数字量直接告诉你"有火/没火"。十几块钱,是入门火焰类项目几乎绕不开的第一站。
但先把丑话说在前面:它检测的是火焰发出的红外光,不是"火"本身,更不是温度。这个区别决定了它的所有脾气,后面会反复回到这一点。
工作原理
火焰燃烧时会向外辐射很宽的光谱,其中在近红外波段(大约 760–1100nm 附近)有一段比较强的特征辐射。模块上那颗核心探头是一只红外光电二极管,它恰好对这个波段的红外光敏感:照射到它上面的这段红外越强,它内部产生的电流就越大。
模块把这只光电二极管的电流变化转成电压,分两路送出去:
- 模拟输出 AO:直接反映探头收到的红外强度。火越大、距离越近,照在探头上的红外越强,AO 这路读数就跟着变化。它是一个连续的数值,能粗略反映"火离得有多近、有多旺"。
- 数字输出 DO:板上有一颗 LM393 电压比较器和一个蓝白色电位器。电位器设定一个阈值电压,比较器把 AO 的电压和这个阈值一比——超过阈值(红外够强)就翻转 DO 的电平,输出一个干净的"有火/无火"开关信号。拧电位器就是在调这个判定阈值,也就是灵敏度。
理解这套结构,就能想通它为什么"认红外不认火":它从头到尾只是在测一段红外光的强弱。只要有东西在这个波段发出足够强的红外——哪怕不是火——它一样会被触发。阳光、白炽灯、电烙铁、甚至遥控器的红外,都可能让它误判。它不知道什么是"火",它只知道"这个波段的红外此刻很强"。
也正因为如此,它给不出温度。它不能告诉你那团火有多少度,只能告诉你"前方红外火焰特征的强弱"。要测温度是另一套器件的事,下面选型会讲。
接线
模块通常是四脚(带 AO 的版本)或三脚(只有 DO 的版本)。以常见的四脚版为例:
| 火焰传感器 | ESP32 | 说明 |
|---|---|---|
| VCC | 3.3V 或 5V | 宽压,3.3V 即可正常工作 |
| GND | GND | 共地 |
| DO | 任意 GPIO(如 GPIO13) | 数字读,有火翻转电平 |
| AO | ADC 引脚(如 GPIO34) | 模拟读,反映红外强度 |
几个要点:VCC 用 3.3V 时,AO 输出范围和 DO 的高电平都落在 3.3V 以内,可以放心直接进 ESP32 的脚;若用 5V 供电,DO 触发时可能给到接近 5V,灌进 ESP32 的 GPIO 不安全,第一次用务必拿万用表量一下触发时 DO 到底是 3.3V 还是 5V。AO 必须接到带 ADC 功能的引脚(ESP32 上像 GPIO32–39 这类),普通数字脚读不出模拟值。
完整代码
下面这段同时读两路:AO 看红外强度趋势,DO 当报警开关,结果都打到串口。
const int FLAME_AO = 34; // 模拟输出,接 ADC 引脚
const int FLAME_DO = 13; // 数字输出,经电位器阈值
const int BUZZER = 2; // 演示用,有火时报警(接蜂鸣器或板载 LED)
void setup() {
Serial.begin(115200);
pinMode(FLAME_DO, INPUT);
pinMode(BUZZER, OUTPUT);
// ESP32 的 ADC 默认量程偏小,放大到能读到接近 3.3V
analogSetPinAttenuation(FLAME_AO, ADC_11db);
Serial.println("火焰传感器就绪,可拿打火机在 30cm 内测试");
}
void loop() {
int intensity = analogRead(FLAME_AO); // 红外强度,0~4095
int alarm = digitalRead(FLAME_DO); // 经阈值判定,多数模块有火时为 LOW
Serial.print("红外强度 AO=");
Serial.print(intensity);
Serial.print(" DO=");
Serial.println(alarm == LOW ? "有火!" : "无火");
if (alarm == LOW) { // 触发,注意大多数模块是低电平有效
digitalWrite(BUZZER, HIGH); // 报警
} else {
digitalWrite(BUZZER, LOW);
}
delay(200);
}
特别提醒 DO 的有效电平:相当多火焰模块用的是低电平有效——检测到火时 DO 拉低、平时为高。如果发现逻辑反了(没火时一直报警),把判断里的 LOW 改成 HIGH 即可,这取决于你手上模块的设计。
想让 AI 帮你扩展,可以这样描述需求:「ESP32 用 GPIO34 读火焰传感器 AO、GPIO13 读 DO,AO 超过某阈值或 DO 触发时驱动蜂鸣器报警并打印强度值」,把引脚号、有效电平和动作说清楚,生成的代码基本能直接跑。
你应该看到什么
烧录后打开串口。室内没有明火时,AO 读数应该停在一个相对稳定的"背景值"上,DO 显示"无火"。
拿一只打火机,在传感器探头正前方约 20–30cm 处点燃——AO 读数会明显朝触发方向变化(背景红外被火焰的红外叠加上去),到达电位器设定的阈值时,DO 翻转、串口跳出"有火!"、蜂鸣器响起。把打火机移远、熄灭,AO 回落、DO 恢复"无火"。
一个验证手感的小动作:让火焰从探头正前方慢慢移到侧面 45° 以外,你会看到 AO 读数随偏离角度迅速减弱、DO 很快回落到"无火"——这正好印证了它有探测角度限制,必须大致对准。
读数解读 / 灵敏度
把两路输出分开理解就不会乱:
- AO 是连续的强度值。它没有"度"的物理意义,只是相对强弱:火越近越旺,AO 越偏向触发方向。它适合做"哪个方向的火更强"这类相对比较(灭火小车找火源方向就靠它),不适合当成绝对测量。
- DO 是 AO 过阈值后的开关信号。它干不干脆、灵不灵敏,全看那颗电位器。
调灵敏度就是拧电位器:往灵敏度高的方向拧,阈值降低,稍远一点的小火也能让 DO 触发,但也更容易被阳光、灯光误触;往回拧,阈值提高,只有近处较强的火才报,抗干扰但探测距离缩短。实测时拿打火机在你期望的报警距离反复进出,找一个"该报的报、不该报的不报"的位置。
还有一点:探头有大约 60° 的锥形探测角,且越偏离正前方越不敏感。安装时要让探头朝向你最关心的方向,别指望它能 360° 看火。
选型 / 避坑
它的物理边界很硬,选型前先想清楚你要测的到底是什么:
- 要检测"有没有明火 / 火苗在哪边"——火焰报警、灭火机器人循火源——红外火焰传感器正合适,便宜直接。
- 要测"高温但没有明火的过热"——比如电机、电池过热,根本没有火焰红外特征——火焰传感器测不到,应该上热电偶 + MAX6675 模块或红外测温,它们给的是温度数值。
- 要检测"烟雾 / 可燃气体"——着火前往往先有烟和气体——那是气体传感器的活,用 MQ-2 这类,它测的是烟雾和可燃气体浓度,和火焰红外是两条完全不同的检测路线。
实际做火灾相关项目时,常见的做法是火焰传感器 + 烟雾传感器一起上,红外管"看见火"、烟感"闻到烟",两路互补才靠谱。
① 认红外不认火:阳光直射、白炽灯/卤素灯、电烙铁、红外遥控等红外源都可能让它误报。安装时背对窗户、避开强光源,是减少误报最有效的一招。 ② 探测角与对准:约 60° 锥形视角,越偏离正前方越不灵。探头必须大致对准要监测的方向。 ③ 探测距离有限:一般也就几十厘米到 1 米左右,距离强烈依赖火的大小。别指望它隔着房间发现小火苗。 ④ 不测温度:它只给"红外火焰特征的强弱",给不出度数。要温度请改用热电偶或红外测温。
故障排查
| 现象 | 可能原因 | 排查 |
|---|---|---|
| 没火时一直报警 | DO 有效电平判断反了 / 阈值太低 / 旁边有强光红外源 | 改 LOW↔HIGH 判断;拧高阈值;遮挡阳光、灯光 |
| 火靠近也不触发 | 灵敏度太低 / 探头没对准 / 距离太远 | 拧高灵敏度电位器;让探头正对火源;靠近到 30cm 内 |
| AO 读数恒为 0 或 4095 | AO 接到了非 ADC 引脚 / 接线松 / 量程未配置 | 换到 ADC 引脚;查 AO、GND 连接;设 ADC_11db |
| DO 完全不变 | 电位器拧到极端 / DO 没接对 | 来回拧电位器找翻转点;确认 DO 接的是数字脚 |
| 读数随阳光大幅漂移 | 阳光含大量红外被探头收到 | 换安装位置避开直射;用遮光罩;提高阈值 |
进阶 / 变体
- 灭火小车找火源方向:装左右两只(甚至前左、前右、正前三只)火焰传感器,比较各自 AO 的强度——哪只读到的红外更强,火就在哪一侧,小车朝那个方向转,越走越正,就能"循着火"开过去。这正是火焰传感器最经典的玩法,本质是用多路相对强度做方向判断,思路和避障小车用多路传感器找方向是相通的。
- 联动水泵灭火:检测到火后,用 ESP32 驱动一个继电器控制小水泵或风扇,靠近火源后喷水/吹灭,构成一个完整的灭火动作闭环。继电器把强电/大电流和单片机隔开,逻辑只管判断。
- 接入 AI 判断:把 AO 的强度序列、是否多路同时触发等信息喂给上层逻辑,结合摄像头做更可靠的"是不是真有火"判断,减少单纯红外的误报,可参考传感器接入 AI 应用。
典型应用
- 灭火机器人:多路火焰传感器找火源方向,配合水泵/风扇灭火,是机器人比赛和教学的常见项目。
- 火焰报警:检测到明火即蜂鸣报警或联网推送,常和烟雾传感器搭配。
- 安全联动:检测到火后自动断电、关阀、启动排风等保护动作的触发源。
用火焰传感器自制的火灾报警仅供学习和原型验证,不可替代经过认证的烟感探测器、消防设备和报警系统。涉及生命财产安全的火灾防护,请使用合规认证的专业设备,并遵守当地消防规范。
小结
火焰传感器是一只"看火焰红外的眼睛":靠红外光电二极管感受火焰特征波段(约 760–1100nm)的红外光,AO 给连续的强度、DO 经电位器阈值给"有火/无火"开关。用好它记住几件事——它认红外不认火(阳光、白炽灯会误报)、有约 60° 锥角要对准、探测距离只有几十厘米到 1 米、不测温度。要测过热温度请用热电偶 MAX6675,要测烟雾用 MQ-2。它的模拟读法依赖 ADC,本质属于模拟信号传感器(同时附带数字开关输出)。
相关阅读:理解 ADC 怎么读模拟量、数字与模拟信号的区别、用继电器联动水泵、做避障/循迹小车的多路传感思路、把传感器接入 AI 应用。更多模块见传感器总览、原理篇与实战教程。
参数以 datasheet 为准;本页为公开资料整理,接线与代码请结合实物验证。