从零开始打造空气质量检测仪:手把手教你用 Arduino 做环境监测
你有没有过这样的经历?刚走进一间密闭的房间,总觉得空气“闷”、头昏脑胀,却说不清问题出在哪。其实,这很可能就是室内空气污染在悄悄影响你的健康——而我们往往对此毫无察觉。
如今,城市生活节奏加快,人们80%以上的时间都在室内度过。厨房油烟、家具释放的甲醛、打印机散发的臭氧……这些看不见的污染物正潜移默化地侵蚀着我们的呼吸系统。好消息是,借助一块几十元的开发板和几个传感器,普通人也能亲手做一个实时监测空气质量的小设备,不再“凭感觉”判断环境好坏。
今天,我们就以Arduino UNO为核心,带你从零搭建一台简易但实用的空气质量检测仪。不需要电子基础,不用会焊接,连代码都是“抄作业”级别,只要你会插线、会点鼠标,就能完成这个项目。
为什么选 Arduino?因为它真的适合“小白”
说到嵌入式开发,很多人第一反应是“难”:要学单片机、懂电路、会调试……门槛太高。但Arduino的出现,彻底改变了这一点。
它本质上是一个开源硬件平台,最大的特点就是——简单到像搭积木。配合图形化的Arduino IDE编程环境,哪怕你从来没写过代码,也能通过几行 C++ 风格的指令控制硬件。更重要的是,它的社区极其活跃,无论遇到什么问题,几乎都能在网上找到答案。
在这个项目中,我们将使用最经典的Arduino UNO R3板子作为大脑,搭配一个叫MQ-135的气体传感器来感知空气中的有害物质。整个系统成本不到百元,却能实现对 TVOC(总挥发性有机物)、烟雾、氨气等常见污染物的粗略检测。
核心部件揭秘:MQ-135 到底是怎么“闻”出空气好坏的?
它不是“鼻子”,而是“电阻变化探测器”
别被名字误导了,MQ-135 并不会像人一样“闻气味”。它的原理其实很巧妙:基于一种叫做金属氧化物半导体(MOS)的材料。
这块传感器内部有一层敏感材料(通常是二氧化锡 SnO₂),还有一个加热丝。通电后,加热丝把元件加热到 300°C 左右——听起来很高?没错,这是为了让气体更容易发生化学反应。
当空气中存在目标气体(比如氨气、苯、二氧化碳等)时,它们会吸附在敏感层表面,导致材料的电阻值发生变化。浓度越高,电阻变越明显。这个变化会被电路转换成电压信号输出出来。
最终,Arduino 只需读取这个电压值,就知道当前空气“脏不脏”。
📌 小贴士:MQ-135 输出的是模拟电压(0~5V),正好匹配 Arduino 的 ADC 输入范围。
关键参数一览(挑重点看)
| 参数 | 数值/说明 |
|---|---|
| 工作电压 | DC 5V(直接接 Arduino 电源即可) |
| 输出信号 | 模拟电压(可接 A0~A5 引脚) |
| 检测对象 | NH₃、CO₂、烟雾、TVOC 等(综合反映) |
| 响应时间 | <10 秒 |
| 预热要求 | 首次使用需持续通电 24 小时“老化” |
⚠️ 注意事项:
-不要指望它做医疗级检测:精度有限,适合趋势观察而非精确数值。
-易受干扰:酒精、香水、洗手液蒸汽都会让它“误报”。
-温湿度影响大:建议后续加 DHT11 补偿数据。
不过对于入门项目来说,这些问题完全可控。关键是——它便宜!一片十几块包邮,失败了也不心疼。
动手第一步:接线图来了,照着连就行
我们采用最简单的连接方式,全程使用杜邦线+面包板,无需焊接!
所需材料清单
| 名称 | 数量 | 备注 |
|---|---|---|
| Arduino UNO R3 开发板 | 1 块 | 推荐带 CH340G 芯片的国产版本 |
| MQ-135 传感器模块 | 1 个 | 建议买带 PCB 的成品模块,已有上拉电阻 |
| 面包板 | 1 块 | 小型即可 |
| 杜邦线若干 | 若干 | 公对母、母对母都行 |
| USB 数据线 | 1 条 | Micro-USB 或 Type-B,用于供电和上传程序 |
接线方式(三根线搞定)
| MQ-135 引脚 | 连接到 Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| OUT | A0 |
✅ 就这么简单!VCC 接电源,GND 接地,OUT 接模拟输入口 A0。如果你买的模块上有 LED 指示灯,亮起说明已经开始工作了。
写代码?别怕,这几行就够了
打开Arduino IDE(还没装?去官网 arduino.cc 下载,支持 Win/Mac/Linux),新建一个项目,把下面这段代码复制进去:
const int sensorPin = A0; // 定义传感器接在 A0 引脚 void setup() { Serial.begin(9600); // 启动串口通信,波特率设为 9600 } void loop() { int adcValue = analogRead(sensorPin); // 读取原始 ADC 值(0~1023) float voltage = adcValue * (5.0 / 1023.0); // 换算成实际电压(0~5V) Serial.print("ADC: "); Serial.print(adcValue); Serial.print("\tVoltage: "); Serial.print(voltage, 2); // 保留两位小数 Serial.println(" V"); delay(1000); // 每秒采样一次 }📌逐行解释一下:
-analogRead(A0):Arduino 内置函数,专门用来读模拟引脚的值,返回 0~1023。
-5.0 / 1023.0:因为 ADC 是 10 位分辨率,所以最大值是 1023,对应 5V。
-Serial.print():把数据显示在电脑上,方便你看结果。
-delay(1000):暂停 1 秒,避免刷屏太快。
上传代码前记得:
1. 正确选择开发板类型:Tools → Board → Arduino Uno
2. 选择对应的串口号(插入 USB 后一般会自动识别)
点击左上角的“→”按钮上传,然后按 Ctrl+Shift+M 打开串口监视器,你应该能看到类似这样的输出:
ADC: 245 Voltage: 1.19 V ADC: 247 Voltage: 1.21 V ADC: 244 Voltage: 1.19 V恭喜!你已经成功采集到了空气中的“气味数据”。
让机器学会“判断”:把数字变成“空气好不好”的提示
光看一堆数字太抽象了。我们可以让 Arduino 自己做个判断,告诉你现在空气质量属于哪个等级。
在原有代码基础上,添加一个判断函数:
String getAirQuality(int adcValue) { if (adcValue < 300) return "Excellent"; // 优 else if (adcValue < 600) return "Good"; // 良 else if (adcValue < 800) return "Fair"; // 轻度污染 else return "Poor"; // 严重污染 }然后在loop()中调用它:
String quality = getAirQuality(adcValue); Serial.print("Air Quality: "); Serial.println(quality);重新上传代码后,串口就会显示:
ADC: 245 Voltage: 1.19 V Air Quality: Excellent是不是瞬间专业感拉满?这个分级完全是经验性的,你可以根据自己所在环境调整阈值。比如北方冬天烧煤取暖的地方,基准值可能本身就偏高。
实际测试建议:去这几个地方试试效果
理论讲完,动手才是王道。建议你在不同场景下测试设备反应:
| 场景 | 预期表现 |
|---|---|
| 户外空旷处 | ADC 值较低(<300),显示“优” |
| 刚炒完菜的厨房 | 数值迅速上升,可能突破 600 |
| 卫生间喷完空气清新剂 | 短时间内飙升(注意:这是假警报) |
| 密闭一天的卧室 | 数值缓慢升高,反映 CO₂ 累积 |
你会发现,设备对烹饪烟雾、清洁剂气味特别敏感——这也正是它最有用的地方:提醒你“该开窗通风了”。
常见坑点与避坑秘籍
新手最容易踩的几个坑,我都帮你试过了:
🔧问题1:刚插上电,数值一直在跳,不稳定?
→ 别慌!MQ-135 需要预热。首次通电建议等待10~30 分钟,等数值趋于平稳再开始测量。
🔧问题2:放在干净房间也显示“污染”?
→ 检查是否靠近酒精类物品、香薰机或打印机。MQ-135 对这些非常敏感,属于正常现象。
🔧问题3:每次重启数值都不一样?
→ 因为没有做校准。进阶玩法可以在洁净空气中记录一个“基准值 R₀”,后续用公式计算相对浓度。
🔧问题4:USB 断开就没法用了?
→ 加个移动电源就行!任何支持 5V 输出的充电宝都可以给 Arduino 供电,实现便携监测。
下一步怎么玩?给你几个升级思路
做完基础版之后,完全可以把它变得更强大。以下是几个低成本扩展方向:
✅ 加个屏幕:本地显示更直观
- 接一个LCD1602(约 10 元)或OLED 屏(SSD1306,约 15 元)
- 直接显示“空气质量:良好” + 当前电压值
- 代码只需增加几行库调用,网上教程一大把
✅ 加温湿度补偿:让数据更准一点
- 插上DHT11温湿度传感器(5 元)
- 用温湿度修正 MQ-135 的读数,减少误差
- 特别适合长期放置在卧室或教室
✅ 接 WiFi:把数据传到手机上看
- 使用ESP-01S 模块(约 8 元)或直接换 ESP32 开发板
- 把数据上传到Blynk、ThingsBoard 或阿里云 IoT
- 实现远程查看、历史曲线、超标报警
✅ 做个多节点网络:画出家里空气地图
- 在客厅、卧室、厨房各放一台
- 通过无线通信汇总数据
- 找出家中空气最差的位置
写在最后:这不是玩具,是通往技术世界的一扇门
也许你会觉得,这样一个只能粗略判断“空气好不好”的小装置,能有多大用处?但它真正的价值,不在于多精准,而在于——
👉它让你第一次亲手把“物理世界”和“数字世界”连接了起来。
你看到了一段代码如何驱动一个真实的传感器,如何把空气中看不见的分子活动转化为屏幕上跳动的数字。这种“我能掌控硬件”的成就感,是任何视频教程都无法替代的。
而且,这套方法论可以复用到无数其他项目中:
- 换个传感器,就能做土壤湿度计;
- 加个继电器,就能自动打开加湿器;
- 接个蜂鸣器,就能做成煤气泄漏报警器……
从感知环境,到影响环境,只差一步逻辑判断。
所以,别再犹豫了。去买块 Arduino,花一个下午的时间,把这个小玩意做出来。当你看到它在桌角默默工作,提醒你“该开窗了”的那一刻,你会明白:原来科技离生活,可以这么近。
如果你在实现过程中遇到了问题,欢迎留言交流。我们一起解决,一起进步。