← 返回传感器图鉴

MQ-135 空气质量传感器

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

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

想给桌面做个小小的空气质量监测器:屋里待久了有点闷、油烟飘进来、晚上门窗紧闭一夜——能不能让一块小板子察觉到"空气变差了",然后亮个红灯提醒你开窗?这正是 MQ-135 最擅长的活。它不挑某一种气体死磕,而是对氨气、苯、酒精、烟雾、二氧化碳这一大票有害气体都有反应,给出一个"空气是脏是净"的综合趋势。

先说清楚一件事,省得后面误会:MQ-135 给的是相对的脏净趋势,不是某种气体精确到 ppm 的浓度。把这点记牢,它就是个又便宜又好玩的入门件。

工作原理

MQ-135 和你可能见过的 MQ-2 是一家人——都是半导体式气体传感器,核心是一小块二氧化锡(SnO₂)的敏感材料,区别只在配方和标定针对的气体不同。MQ-2 偏可燃气和烟雾,MQ-135 偏氨气、苯、CO₂ 这类"空气质量类"有害气体。

它的工作链条是这样的:

  1. 加热:模块内部有个加热丝,给敏感材料持续加热到工作温度。这也是为什么 MQ 系列必须 5V 供电、且摸上去会温热——加热要耗电。
  2. 吸附变阻:在干净空气里,SnO₂ 表面吸附了氧、电阻较高;当周围出现有害气体,这些气体分子和表面发生反应,把材料的电阻拉低。气体越多,电阻越低。
  3. 转成电压:模块板子上把这个变化的电阻接成分压电路,于是电阻的变化就变成了 AO 脚上电压的变化——空气越脏,AO 电压越高。

板子上有两个输出脚:

  • AO(模拟输出):随气体浓度连续变化的电压,用 analogRead 读它的趋势,这是 MQ-135 真正有价值的输出。
  • DO(数字输出):板载一个电位器设阈值,超过阈值 DO 翻转(高/低)。适合做"超标就报警"的简单开关逻辑,调电位器即可改灵敏度。

想搞清楚 analogRead 把电压变成数字的过程,先看 /principle/adc/;分压电路的来龙去脉见 /principle/divider/

接线

MQ-135 ESP32 说明
VCC 5V 必须 5V,加热丝要这个电压才能正常工作
GND GND 共地
AO GPIO34(仅输入的 ADC 脚) 5V 模拟信号需分压到 3.3V,见下方提示
DO 任意 GPIO(如 GPIO27) 数字阈值输出,直接读高低即可
⚠️ 安全

MQ-135 用 5V 供电,它的 AO 模拟输出摆幅也是按 5V 来的。 ESP32 的 ADC 引脚只认 0–3.3V,把 5V 的 AO 直接接进去有打坏引脚的风险,而且超过 3.3V 的部分会被削平、读数失真。规范做法是在 AO 和 ESP32 之间加分压:1kΩ 串 2kΩ 对地,从中间取信号,把 5V 压到约 3.3V。原理见 /principle/level-shift//principle/divider/。DO 脚是数字电平,同样建议确认不超过 3.3V。

完整代码

下面把 AO 的原始读数映射成几档"空气质量等级",同时读 DO 做超标提示。注意开头的预热说明。

const int aoPin = 34;   // 模拟输出,已分压到 3.3V
const int doPin = 27;   // 数字阈值输出

void setup() {
  Serial.begin(115200);
  pinMode(doPin, INPUT);

  // 预热:MQ 系列上电后加热丝要先把敏感材料烤到工作温度,
  // 刚上电读数会从高往下漂,至少等 1~2 分钟再信它。
  // 全新传感器建议先通电老化 24~48 小时,读数会更稳定可靠。
  Serial.println("MQ-135 预热中,请等待...");
  delay(60000); // 简单等 60 秒,正式项目可做更长预热
}

void loop() {
  int raw = analogRead(aoPin);        // 0~4095,越大空气越脏
  int doState = digitalRead(doPin);   // 板载阈值:通常超标输出 LOW

  // 把原始值粗分成几档(阈值需结合你的环境实测校准,下面只是示例)
  String level;
  if (raw < 800)        level = "优 - 空气清新";
  else if (raw < 1500)  level = "良 - 正常";
  else if (raw < 2500)  level = "中 - 略闷,可通风";
  else                  level = "差 - 建议立即开窗";

  Serial.print("AO原始值: ");
  Serial.print(raw);
  Serial.print("  等级: ");
  Serial.print(level);
  Serial.print("  DO: ");
  Serial.println(doState == LOW ? "超标!" : "正常");

  delay(1000);
}

代码里那几个分档阈值(800/1500/2500)不是金科玉律——每块传感器、每个环境的基线都不一样,你得在自己屋里跑一阵子,记下干净时和变差时的读数,再回头调这几个数。

你应该看到什么

烧录后等预热结束,打开串口监视器(波特率 115200),先看清干净空气里的基线读数,然后做两个小实验:

  • 对着它哈一口气:呼出的气里有 CO₂ 和水汽,AO 原始值会明显往上跳,等级可能从"良"变"中",几秒后慢慢回落。
  • 拿酒精棉片或打火机(别点着,只放气)凑近:MQ-135 对酒精、可燃气也敏感,读数会大幅飙升,DO 很可能翻转成"超标"。

读数能随气体出现而上升、移开后缓慢回落,就说明加热、吸附、采样这条链路全通了。注意它的恢复有点慢(要把吸附的气体释放掉),不会瞬间归位,这是正常的。

读数解读 / 标定

  • 它是趋势计,不是浓度计:AO 数值高低反映"周围有害气体相对多还是少",对同一台设备纵向比较(现在 vs 一小时前)才有意义。拿两块板子横向比绝对值意义不大。
  • 关于换算 CO₂ ppm:网上有种进阶玩法,先在洁净空气里测出传感器的基准电阻 RZero,再用 datasheet 的特性曲线把 AO 反推成近似 CO₂ 浓度(ppm)。这套做法能给你一个"看起来像 ppm"的数字,但精度有限、仅供参考——半导体传感器对单一气体本就不精确,且强烈受温湿度影响。想认真玩可以试,别拿它的 ppm 当真实数据汇报。
  • 温湿度会干扰:同样的空气,湿度变高、温度变化,读数也会动。要更准需要做温湿度补偿。

选型 / 避坑

MQ-135、MQ-2、MH-Z19 经常被搞混,其实分工很清楚:

需求 该选 为什么
综合反映"空气好不好" MQ-135 对氨气/苯/烟雾/CO₂ 等多种有害气体都敏感,给综合趋势
烟雾、可燃气/液化气泄漏报警 MQ-2(见 /sensor/mq-2/ 配方偏可燃气和烟雾,做安全报警更对口
要准确测 CO₂ 浓度(ppm) MH-Z19(见 /sensor/mh-z19/ 红外 NDIR 原理,专测 CO₂,半导体测 CO₂ 不靠谱
🚧 避坑

① AO 是 5V 摆幅:接 ESP32 的 ADC 不分压有烧引脚风险、且读数会被削平失真,务必加 1k+2k 分压(见上方安全提示)。 ② 必须预热 / 老化:上电后读数会从高往下漂,至少等 12 分钟;全新传感器建议先老化 2448 小时,否则读数飘忽不可信。 ③ 它不是精确浓度计:给的是综合脏净趋势,不要把 AO 当成某种气体的精确 ppm。 ④ 别拿它精确测 CO₂:要可信的 CO₂ 数值请用红外 NDIR 的 MH-Z19,半导体式做 CO₂ 定量误差很大。 ⑤ 受温湿度影响:环境温湿度变化会让读数漂移,高要求场景需做补偿。

故障排查

现象 可能原因 排查
读数一直很高、慢慢往下掉 还在预热,没到工作温度 正常现象,等 1~2 分钟(新件老化更久)
数值被削平、超过某值就卡住 AO 5V 直连,超 3.3V 部分被截断 加 1k+2k 分压再读
读数乱跳不稳 供电不足 5V 掉压 / 周围气流扰动 用稳定 5V 电源,避开风口
完全无反应、不温热 VCC 接了 3.3V,加热丝没工作 必须给 5V
DO 一直触发或从不触发 板载电位器阈值没调好 拧电位器,对着干净空气调到临界点

进阶 / 变体

  • 三色灯分级提示:把上面的"优/良/中/差"等级接到绿/黄/红 LED,空气一变差红灯就亮,比盯串口直观得多。配个 OLED 屏显示实时数值更好,做法见 /guide/l2-oled/
  • 联动风扇 / 新风:当读数连续若干秒超过阈值,用一个继电器或 MOS 管自动开启排风扇或新风机,空气转好再关——这就是简易"自动通风"的雏形。
  • 温湿度补偿:搭一颗温湿度传感器,把湿度、温度读进来对 MQ-135 的读数做修正,趋势会更可信。
  • 接 WiFi 上报:ESP32 把空气等级推到手机或云端,离家时也能看屋里空气,超标了远程提醒。

典型应用

  • 室内空气监测:桌面/卧室小盒子,闷了提醒开窗;
  • 新风 / 排风联动:超标自动通风,转好自动停;
  • 厨房油烟提示:油烟飘起读数飙升,提醒开抽油烟机;
  • 会议室 / 教室通风提醒:人多 CO₂ 累积,趋势上升时提示换气。

小结 · 相关

MQ-135 用几块钱解决了"屋里空气是不是变差了"这个最日常的判断。记住三件事:它给的是综合脏净趋势而非精确浓度、AO 是 5V 接 ESP32 要分压、上电要预热新件要老化。把这三条躲过去,它就是做空气质量入门项目的好起点;真要精确测 CO₂,那是 MH-Z19 的活。

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

📄 来源 / 自校链接

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

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

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