MQ-135 空气质量传感器
| 器材 | 数量 | 参考 |
|---|---|---|
| MQ-135 气体传感器模块 | 1 | — |
价格随渠道波动,以购买页实时为准。
想给桌面做个小小的空气质量监测器:屋里待久了有点闷、油烟飘进来、晚上门窗紧闭一夜——能不能让一块小板子察觉到"空气变差了",然后亮个红灯提醒你开窗?这正是 MQ-135 最擅长的活。它不挑某一种气体死磕,而是对氨气、苯、酒精、烟雾、二氧化碳这一大票有害气体都有反应,给出一个"空气是脏是净"的综合趋势。
先说清楚一件事,省得后面误会:MQ-135 给的是相对的脏净趋势,不是某种气体精确到 ppm 的浓度。把这点记牢,它就是个又便宜又好玩的入门件。
工作原理
MQ-135 和你可能见过的 MQ-2 是一家人——都是半导体式气体传感器,核心是一小块二氧化锡(SnO₂)的敏感材料,区别只在配方和标定针对的气体不同。MQ-2 偏可燃气和烟雾,MQ-135 偏氨气、苯、CO₂ 这类"空气质量类"有害气体。
它的工作链条是这样的:
- 加热:模块内部有个加热丝,给敏感材料持续加热到工作温度。这也是为什么 MQ 系列必须 5V 供电、且摸上去会温热——加热要耗电。
- 吸附变阻:在干净空气里,SnO₂ 表面吸附了氧、电阻较高;当周围出现有害气体,这些气体分子和表面发生反应,把材料的电阻拉低。气体越多,电阻越低。
- 转成电压:模块板子上把这个变化的电阻接成分压电路,于是电阻的变化就变成了 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 的活。
- 原理打底:/principle/adc/、/principle/divider/、/principle/level-shift/
- 同族不同活:/sensor/mq-2/(烟雾/可燃气报警)、/sensor/mh-z19/(精确测 CO₂)
- 更多传感器:/sensor/ | 加块屏显示:/guide/l2-oled/ | 系统学习:/guide/l4-sensor-ai/
参数以 datasheet 为准;本页公开资料整理,接线与代码请结合实物验证。