← 返回传感器图鉴

火焰传感器(红外火焰检测)

最后更新 2026-06-20
⏱ 约 7 分钟 🟡 涉接线/强电
🛒 器材清单
器材数量参考
火焰传感器模块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 为准;本页为公开资料整理,接线与代码请结合实物验证。

📄 来源 / 自校链接

本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为公开资料的学习整理,非亲测。涉接线/花钱/合规的步骤请结合实物与官方最新资料验证,风险自负。见免责声明