← 返回传感器图鉴

MQ-2 可燃气体与烟雾传感器

最后更新 2026-06-20
⏱ 约 9 分钟 🟡 涉接线/强电
🛒 器材清单
器材数量参考
MQ-2 气体传感器模块1

价格随渠道波动,以购买页实时为准。

想自己做个会"闻味道"的小装置:厨房燃气漏了能响、点了根烟凑近能跳数、酒精挥发也有反应。MQ-2 就是干这个的——一块带金属网罩、上电后微微发烫的蓝色小模块,是 MQ 系列里最常被拿来做烟雾/燃气报警的入门款。它一边给模拟电压(AO,看浓度趋势),一边给数字开关信号(DO,超阈值就翻转),10 块钱左右,接上就能玩。

先把一句话放在最前面:MQ-2 给的是"相对浓度趋势",不是精确的 ppm 读数。它能告诉你"现在比刚才脏了",但不能告诉你"现在是 200ppm"。把这点搞清楚,后面就不会踩坑。

工作原理

MQ-2 是半导体式(金属氧化物)气体传感器,核心是一小块二氧化锡(SnO₂)敏感层,旁边还有一个加热丝。

  • 为什么要加热:SnO₂ 必须被加热到几百摄氏度才有敏感特性,所以模块上电后会发热、要预热。这也是它必须 5V 供电、电流偏大(一两百毫安)的原因——大头都给加热丝了。
  • 怎么感知气体:洁净空气里,SnO₂ 表面吸附了氧,把里面的电子"抓"住,材料电导率低、阻值高。当周围出现可燃气体或烟雾(甲烷、液化气、氢气、酒精、烟颗粒等),这些气体分子在加热的表面发生反应、释放出电子,电导率升高 → 传感器阻值下降
  • 阻值变成电压:模块把这个可变阻值和一个固定电阻串成分压(原理见 /principle/divider/),气体越浓阻值越低,AO 输出电压就越高。所以"AO 电压上升 = 周围可燃气体/烟雾变多"。

模块给你两个输出,分别对应两种用法:

  • AO(模拟输出):连续电压,反映浓度趋势。配 ADC 读(原理见 /principle/adc/),能看到数值平滑地涨落。
  • DO(数字输出):板上有个电位器设阈值,AO 电压和这个阈值用比较器一比——超了 DO 就翻转(多数模块是超阈值输出低电平、并点亮报警灯)。这是个现成的"超标就报警"开关,不用写 ADC 也能用。

转动板上的电位器,就是在调 DO 的触发阈值:拧一个方向更灵敏(轻微气体就报),拧另一个方向更迟钝。

接线

MQ-2 是 5V 供电的器件,加热丝吃 5V 才到工作温度。但它的 AO 在浓度高时电压会接近 5V,直接喂给 3.3V 的 ADC(ESP32 等)会超量程甚至损伤引脚——必须分压

Arduino UNO(5V 系统,ADC 也是 5V):

MQ-2 模块 接到 说明
VCC 5V 加热丝要 5V
GND GND 共地
AO A0 模拟读浓度趋势
DO D2(可选) 数字读"是否超阈值"

ESP32 / 3.3V 系统(重点):

MQ-2 模块 接到 说明
VCC 5V 仍需 5V 加热,别接 3.3V
GND GND 共地
AO → 分压 → GPIO34 AO 可能接近 5V,必须分压到 3.3V 以内再接 ADC
DO 任意 GPIO DO 是数字电平,超 3.3V 同样需电平处理,见 /principle/level-shift/

AO 分压最简单就是两个等值电阻(如 10kΩ + 10kΩ)做 1/2 分压,把 05V 压到 02.5V,落在 ESP32 ADC 安全区。分压原理见 /principle/divider/,电平处理见 /principle/level-shift/。

完整代码

下面这段读 AO 看趋势、读 DO 看是否报警,并加了预热提示和超阈值串口报警。

// MQ-2 可燃气体/烟雾传感器读取
// AO 接 A0(5V系统直连;3.3V系统须分压后再接ADC)
// DO 接 D2(板载电位器调阈值)
const int PIN_AO = A0;
const int PIN_DO = 2;

const int ALARM_LEVEL = 400;   // 软件报警阈值,需按你的基线实测调整
unsigned long startMs;

void setup() {
  Serial.begin(9600);
  pinMode(PIN_DO, INPUT);
  startMs = millis();
  Serial.println("MQ-2 预热中,请等待约 20 秒以上让读数稳定…");
}

void loop() {
  int ao = analogRead(PIN_AO);     // 0~1023,越大表示气体越浓
  int doState = digitalRead(PIN_DO); // 多数模块:超阈值=LOW

  // 预热期(前 30 秒)读数会持续漂移,别急着判断
  bool warmingUp = (millis() - startMs) < 30000UL;

  Serial.print("AO 原始值: ");
  Serial.print(ao);
  Serial.print("  DO: ");
  Serial.print(doState == LOW ? "触发" : "正常");

  if (warmingUp) {
    Serial.println("  [预热中,读数仅供观察]");
  } else if (ao > ALARM_LEVEL || doState == LOW) {
    Serial.println("  >>> 检测到可燃气体/烟雾升高!(学习演示,非认证报警)");
  } else {
    Serial.println("  空气正常");
  }

  delay(500);
}

ALARM_LEVEL 设成多少?先空跑一会儿看洁净空气下 AO 稳定在哪个值(基线),再在这个基线上加一截余量当阈值,下一节细说。

你应该看到什么

接好上电,串口会先刷一串"预热中"。刚上电的几十秒里 AO 数值通常偏高、然后慢慢往下走、最后稳在一个基线(不同模块基线不同,常见几十到两三百)。

稳定后做两个动作:

  • 拿个打火机(只放气、不点火)凑近金属网罩,按住放气键——AO 数值会明显往上蹿,可能从基线一两百直冲五六百甚至更高,松手后慢慢回落。
  • 划根火柴吹灭、让烟飘过去,AO 也会跳一下。

DO 那边:把电位器调到合适灵敏度后,凑近气体时板上报警灯亮、DO 引脚翻转,串口打印"触发"。这就说明它在正常工作。

读数解读与预热

两件事最容易让新手困惑:

1. 为什么要预热、要等多久。 SnO₂ 加热到工作温度需要时间,加热丝本身的状态、表面吸附的平衡都要稳定。冷启动后头 20 秒到几分钟读数都在漂,数值会持续往下走再趋稳,这是正常的。对烟雾/燃气报警这类长期通电的应用,开机预热一两分钟再开始判断即可;对要求高的场景,datasheet 甚至建议预热更久。

2. 为什么不是精确 ppm。 你读到的 AO 只是"阻值变化映射出来的电压",要换算成真实浓度(ppm),得查 datasheet 里那条对数坐标的灵敏度特性曲线,还要先在洁净空气里标定基线电阻 R₀,再按不同气体各自的曲线换算——而且同一片传感器对甲烷、液化气、酒精、氢气的响应曲线还不一样。这套标定远超入门范围。所以入门阶段就把它当趋势探测器:记住洁净空气的基线值,关注"数值往哪个方向变、变了多少",超过基线一定幅度就当"有气体"。

选型与避坑

MQ 是一个系列,每个型号对不同气体灵敏。别拿 MQ-2 去测它不擅长的东西。

需求 选谁 说明
烟雾 / 可燃气(液化气、甲烷、氢气、酒精) MQ-2 本篇,最通用的入门款
空气质量 / 多种有害气体综合 MQ-135 见 /sensor/mq-135/
CO2 浓度(要相对准的数值) MH-Z19 红外(NDIR)原理,直接给 ppm,见 /sensor/mh-z19/
一氧化碳 CO MQ-7 本系列另一型号
🚧 避坑

四个最常见的坑:

  1. AO 5V 必须分压:MQ-2 的 AO 在高浓度时接近 5V,直接接 ESP32/3.3V 的 ADC 会超量程或伤引脚,必须分压(/principle/divider/)。DO 同理需电平处理(/principle/level-shift/)。
  2. 必须预热:上电头几十秒到几分钟读数一直漂,没稳之前别下判断。
  3. 不是精确浓度计:AO 是趋势不是 ppm,要 ppm 得查曲线标定,入门别强求。
  4. 易受温湿度影响:环境温度、湿度变化会让基线漂移,长期使用要么定期重新看基线,要么用软件做基线跟踪。

故障排查

现象 可能原因 怎么办
AO 一直接近最大值不回落 还在预热 / VCC 没接 5V 等够预热时间;确认 VCC 是 5V 不是 3.3V
凑近气体 AO 没反应 AO 没接对 / 接到了数字脚 确认 AO 接 ADC 引脚,DO 是数字脚别搞混
DO 一直报警灯亮 电位器阈值调太灵敏 拧电位器降低灵敏度,到正常空气下灯灭
ESP32 上读数乱跳/读不到 AO 没分压、超量程 加分压电阻把 AO 压到 3.3V 内
数值整体随天气漂 温湿度变化 正常现象,重新记基线或做软件基线跟踪
模块不发热 供电不足 / 接线松 用能带得动一两百毫安的 5V 电源

进阶与变体

玩熟读数后,可以往"真能用"的方向加一点东西:

  • 加蜂鸣器做报警:DO 触发或 AO 超阈值时驱动有源蜂鸣器响。若蜂鸣器电流大,用继电器或三极管隔离驱动,做法见 /guide/l2-relay/。
  • 加 OLED 显示:把基线值和当前 AO 实时画出来,调阈值更直观。
  • 多 MQ 组合:MQ-2(可燃气/烟)+ MH-Z19(CO2,/sensor/mh-z19/)+ MQ-135(空气质量,/sensor/mq-135/)一起,做一个多维度的"屋里空气仪表盘"。
  • 接 AI 判断:把多传感器读数喂给模型做异常识别,思路见 /guide/l4-sensor-ai/。

典型应用

  • 简易烟雾报警小装置(学习用)
  • 厨房燃气泄漏提醒(学习演示)
  • 车库、储物间的可燃气体环境观察
  • DIY 多传感器空气监测面板的一路
⚠️ 安全

本篇属于 R2(涉及安全报警场景)。MQ-2 自制的报警装置只能用于学习和演示,不可替代经过认证的消防烟感探测器或家用燃气报警器。真正用于保护生命财产的场所,请安装符合国家标准、经第三方认证的成品报警器。自制装置的灵敏度、可靠性、长期稳定性都无法与认证产品相比,别拿它当家里唯一的安全防线。

小结

MQ-2 是 SnO₂ 半导体式气体传感器,靠"遇可燃气体阻值下降"工作,5V 供电、需预热、AO 给趋势、DO 给阈值开关。把它当趋势探测器用最省心——记住洁净空气基线,关注数值变化方向。三件事别忘:AO 5V 必须分压、要预热、不是精确 ppm

相关:

  • 空气质量综合 → /sensor/mq-135/
  • 更准的 CO2 测量 → /sensor/mh-z19/
  • 分压原理 → /principle/divider/
  • ADC 原理 → /principle/adc/
  • 电平转换 → /principle/level-shift/
  • 用继电器驱动负载 → /guide/l2-relay/
  • 传感器接 AI → /guide/l4-sensor-ai/
  • 更多传感器 → /sensor/
  • 更多原理 → /principle/
  • 更多实战 → /guide/

参数以 datasheet 为准;本页公开资料整理,接线与代码请结合实物验证。

📄 来源 / 自校链接

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

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

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