当前位置: 首页 > news >正文

基于ColorEasyDuino与MQ-135传感器的空气质量监测系统实战(含完整Arduino代码)

基于ColorEasyDuino与MQ-135传感器的空气质量监测系统实战(含完整Arduino代码)

最近有不少朋友问我,想自己动手做一个能检测家里空气质量的设备,有没有简单又便宜的实现方案?当然有!今天我就带大家用一块叫ColorEasyDuino的开发板,搭配一个非常经典的MQ-135空气质量传感器,从零开始搭建一个完整的空气质量监测系统。整个过程就像搭积木一样简单,即使你是第一次接触嵌入式开发,跟着我的步骤也能轻松搞定。

咱们这个项目最终实现的效果是:系统能实时读取空气中的有害气体浓度,并通过串口在电脑上显示出来。同时,传感器自带的数字输出还能提供一个简单的“好/坏”空气质量判断。我会把硬件怎么连、代码怎么写、以及调试中可能遇到的坑都讲清楚,手把手带你完成这个有趣的实战项目。

1. 认识我们的“积木”:硬件介绍与连接

在开始动手之前,咱们得先了解一下手头的两块“积木”分别是什么,以及它们要怎么拼在一起。

1.1 MQ-135传感器:你的“电子鼻”

MQ-135传感器就是我们这个项目的核心,它相当于一个“电子鼻”,负责感知空气中的“味道”。它的工作原理挺有意思的:

传感器内部的核心材料是二氧化锡(SnO2)。在干净的空气里,这种材料的导电能力比较差(电导率低)。但是,当空气中存在像氨气、硫化物、苯系蒸汽这类有害气体,甚至是烟雾时,二氧化锡的导电能力就会随着这些气体浓度的增加而变强。

简单来说,空气越“脏”,传感器输出的电信号就越强。MQ-135对多种有害气体都敏感,而且价格便宜,非常适合我们用来做空气质量监测的入门实验。

它长得很小巧,通常是一个带四个引脚的小模块。这四个引脚分别是:

  • VCC:电源正极,需要接3.3V或5V。
  • GND:电源地线,接开发板的GND。
  • AO:模拟信号输出端。它会输出一个连续的电压信号,这个电压值会随着气体浓度变化,我们需要用开发板的ADC(模数转换器)功能来读取它,得到具体的浓度数值。
  • DO:数字信号输出端。模块内部已经设置好了一个浓度阈值,当气体浓度超过这个阈值时,DO引脚会输出一个低电平(LOW),反之输出高电平(HIGH)。这相当于给了一个简单的“超标/正常”的开关量报警。

1.2 ColorEasyDuino开发板:你的“微型大脑”

ColorEasyDuino是一块基于Arduino生态的开发板,对于初学者特别友好。你可以把它理解为一个功能齐全的“微型大脑”,它负责读取传感器的信号、处理数据,并通过串口和我们的电脑通信。它上面有丰富的接口,我们今天主要用到它的5V电源输出GND、一个模拟输入引脚(A0)和一个数字输入引脚(8号)

1.3 动手连接硬件

连接非常简单,只需要四根杜邦线(公对母)。咱们按照下面的对应关系,把传感器模块和开发板连起来:

传感器引脚连接到 ColorEasyDuino 引脚作用说明
VCC5V为传感器提供5V工作电压
GNDGND提供公共地线,构成完整电路
AOA0将模拟信号送入开发板的A0模拟输入引脚进行ADC读取
DO8将数字开关量信号送入开发板的8号数字引脚进行判断

注意:连接时务必确认线序正确,尤其是电源正负极不要接反。接好后可以给开发板通电,正常情况下MQ-135传感器上的指示灯会亮起,并且中间的热敏元件(像个小线圈)会开始微微发热,这是它在正常工作预热。

2. 编写程序:让系统“活”起来

硬件搭好了,接下来就要给它注入“灵魂”——编写Arduino程序。别担心,代码我已经为你准备好了,并且每一行都有详细注释。

2.1 代码详解

打开Arduino IDE,创建一个新项目,然后把下面的代码完整地复制进去。

/****************************************************************************** * 测试硬件:ColorEasyDuino开发板 * 版 本 号: V1.0 * 修改作者: www.lckfb.com * 修改日期: 2024年04月08日 * 功能介绍:MQ-135空气质量传感器数据读取与显示 ****************************************************************************** * 开发板软硬件资料与相关项目软硬件资料官网全部开源 * 开发板官网:www.lckfb.com * 技术支持常驻论坛,任何技术问题欢迎随时交流学习 * 立创论坛:club.szlcsc.com * 关注bilibili账号:【立创开发板】,掌握我们的最新动态! * 不靠卖板赚钱,以培养中国工程师为己任 ******************************************************************************/ // 第一步:定义引脚 int MQ135_AO_Pin = A0; // 定义空气质量传感器的AO连接到开发板的A0引脚 int MQ135_DO_Pin = 8; // 定义空气质量传感器的DO连接到开发板的8号引脚 int MQ135Value = 0; // 用于存储从AO读取的模拟量数值的变量 #define ADC_MAX_VALUE 1023 // Arduino的ADC分辨率是10位,所以最大读数是1023 void setup() { // 初始化串口通信,设置波特率为9600,这样电脑才能看懂开发板发送的数据 Serial.begin(9600); // 将8号数字引脚设置为输入模式,并使用内部上拉电阻 // INPUT_PULLUP模式能让引脚在无外部信号时保持高电平,避免误触发 pinMode(MQ135_DO_Pin, INPUT_PULLUP); } void loop() { // 第一部分:读取并判断数字量输出(DO) int MQ135State = digitalRead(MQ135_DO_Pin); // 读取8号引脚的电平状态 if (MQ135State == LOW) { Serial.println("警告:检测到空气质量较差!"); // DO输出低电平,表示浓度超标 } else { Serial.println("状态:空气质量正常。"); // DO输出高电平,表示浓度正常 } // 第二部分:读取并显示模拟量输出(AO) MQ135Value = analogRead(MQ135_AO_Pin); // 读取A0引脚的模拟电压值,并转换为0-1023的数字 Serial.print("当前空气质量ADC值: "); Serial.println(MQ135Value); // 将读取的数值打印到串口监视器 // 第三部分:你可以在这里添加更多的数据处理逻辑 // 例如,将ADC值转换为更直观的浓度单位(ppm),这需要传感器的校准曲线,进阶时可以尝试。 delay(1000); // 延时1秒,然后再进行下一轮读取,避免数据刷屏太快看不清 }

让我带你过一遍这段代码的关键点:

  1. 引脚定义(int MQ135_AO_Pin = A0;):开头两行定义了传感器连接的引脚,这样后面写代码直接用MQ135_AO_Pin这个变量就行,非常清晰,以后想换引脚也只需要改这一个地方。
  2. setup()函数:这是Arduino程序启动时只运行一次的部分。我们在这里做了两件事:启动串口通信(Serial.begin(9600))和设置8号引脚为带上拉电阻的输入模式(INPUT_PULLUP)。
    • 串口通信:这是开发板和电脑对话的桥梁,波特率9600是双方约定好的通信速度。
    • INPUT_PULLUP:这是一个很实用的技巧。它启用了引脚内部的一个上拉电阻,让引脚在默认状态下(即传感器DO输出高阻态或断开时)保持稳定的高电平(HIGH),只有传感器主动拉低时才会变成LOW,这样信号更稳定,也省去了外接电阻的麻烦。
  3. loop()函数:这是程序的主体,会不停地循环执行。
    • 读取DOdigitalRead(MQ135_DO_Pin)读取8号引脚的电平。LOW(低电平,通常是0V)代表空气质量差(浓度超过模块预设阈值),HIGH(高电平,通常是5V)代表正常。
    • 读取AOanalogRead(MQ135_AO_Pin)是核心操作。开发板内部的ADC(模数转换器)会把A0引脚上的电压(0-5V)转换成一个0到1023之间的整数。这个数值越大,代表传感器检测到的气体浓度越高。这是我们获取精确浓度信息的关键。
    • 串口打印Serial.print()Serial.println()把读取到的状态和数值发送到电脑,我们就能在串口监视器上看到了。
    • 延时delay(1000)让程序等待1秒,避免数据刷新太快。

2.2 上传代码与测试

  1. 选择开发板与端口:在Arduino IDE的“工具”菜单中,“开发板”选择“Arduino Uno”(因为ColorEasyDuino兼容Uno)。然后在“端口”中选择你的ColorEasyDuino对应的串口号(在Windows设备管理器中可以看到,通常是COMx)。
  2. 点击上传:点击IDE左上角的“→”上传按钮,IDE会编译代码并烧录到开发板中。看到底部状态栏显示“上传成功”即可。
  3. 打开串口监视器:上传成功后,点击IDE右上角的“放大镜”图标,打开串口监视器。确保右下角的波特率设置为9600

现在,你应该能看到串口监视器里每隔一秒就刷新一行数据,类似这样:

状态:空气质量正常。 当前空气质量ADC值: 245 状态:空气质量正常。 当前空气质量ADC值: 248 ...

3. 验证与调试:看看你的“电子鼻”灵不灵

代码跑起来了,数据也有了,怎么验证我们的系统工作正常呢?这里有几个小实验和常见问题排查方法。

3.1 功能验证

  • 测试DO报警功能:MQ-135对酒精、打火机气体(丁烷)非常敏感。你可以尝试在传感器附近轻轻吹一口气(注意不是对着猛吹),或者用棉签蘸一点酒精靠近(但不要接触)传感器的金属网罩。观察串口打印,很可能会从“空气质量正常”变为“检测到空气质量较差!”。这说明传感器的数字阈值报警功能是好的。
  • 观察AO数值变化:在进行上述测试时,同时关注“当前空气质量ADC值”的变化。当有气体靠近时,这个数值应该会有一个明显的上升。远离气体后,数值会慢慢下降。这证明了模拟量输出是随浓度实时变化的。

3.2 常见问题与排查

  • 串口监视器没有数据或全是乱码
    • 检查波特率:确保串口监视器右下角的波特率设置为9600,和代码里的Serial.begin(9600)一致。
    • 检查端口:确认是否选择了正确的COM口。可以拔掉USB线,看看哪个端口消失了,再插上,出现的那个就是。
  • DO状态一直显示“正常”,测试没反应
    • 检查接线:确认DO引脚是否真的接到了开发板的8号引脚,并且接触良好。
    • 传感器预热:MQ-135传感器通电后需要一段时间(通常几十秒到一两分钟)预热才能达到稳定和最佳灵敏度,刚上电时反应迟钝是正常的。
    • 阈值电位器:有些MQ-135模块上有一个蓝色的可调电阻(电位器),它可以调节DO输出的触发阈值。如果阈值调得太高,可能普通气体无法触发。你可以尝试用小螺丝刀逆时针微调这个电位器,降低触发门槛(注意:调整幅度要小,调完等一会儿再测试)。
  • AO数值一直不变或变化很小
    • 确认测试方法:确保测试气体(如呼气、酒精)能有效到达传感器进气孔。
    • 环境差异:在非常干净通风的环境下,数值本身波动就小。可以尝试去厨房(有油烟挥发物)附近测试,对比数值变化。

3.3 下一步进阶思路

现在你的基础监测系统已经能工作了。如果你想把它变得更实用,可以尝试以下方向:

  1. 数据可视化:不用总盯着串口监视器。可以在电脑上使用ProcessingPython(配合pyserial库)编写一个简单的上位机软件,用曲线图实时显示ADC值的变化,更加直观。
  2. 浓度标定:当前的ADC值只是一个相对值。要想知道具体的“多少ppm(百万分之一浓度)”,你需要对传感器进行标定。这需要标准浓度的气体和更复杂的计算(通常涉及对数拟合)。你可以搜索“MQ-135校准曲线”来深入了解。
  3. 增加显示与报警:给你的系统加上一个OLED屏幕,实时显示空气质量等级和数值。再连接一个蜂鸣器或LED,当DO报警时,让硬件本身也能发出声光警报。
  4. 物联网应用:结合ESP8266/ESP32这类带Wi-Fi的开发板,将数据上传到云平台(如阿里云、ThingsBoard等),这样你就可以在手机APP上远程查看家里的空气质量了。

这个基于ColorEasyDuino和MQ-135的项目虽然简单,但它涵盖了嵌入式开发中最核心的环节:硬件连接、数字/模拟信号读取、串口通信和数据处理。希望你能通过这个实战,真正入门嵌入式开发的世界。遇到问题别怕,多动手试试,调试的过程本身就是最好的学习。

http://www.cnnetsun.cn/news/1254452.html

相关文章:

  • uniapp跨平台禁止下拉刷新实战:Android与iOS双端适配方案
  • 3步解锁B站视频转文字的高效处理能力:告别手动记录的时代
  • 三、GD32F4系列MCU寄存器与标准外设库函数开发模式深度解析
  • 基于ESP32的电动升降桌高精度位置控制系统设计
  • 人脸识别镜像实战:RetinaFace+CurricularFace快速上手,从部署到测试全流程
  • 互联网大厂Java求职者面试实录—谢飞机与面试官的技术对话及解析
  • Qwen2.5-72B大模型应用:建筑图纸描述生成+施工规范条款引用实践
  • 惊艳效果展示:Nanbeige 4.1-3B 创作技术博客与项目README
  • AIGlasses OS Pro智能视觉系统开发环境配置:从Python安装到模型调用
  • SEER‘S EYE结合Python爬虫:自动化数据采集与智能分析流水线
  • Z-Image-Turbo-辉夜巫女快速开始:三步完成星图GPU平台镜像部署与测试
  • 揭秘:提示工程领域认证与进阶的高效途径
  • Kimi-VL-A3B-Thinking作品分享:InfoVQA 83.2分超高分辨率文档理解效果实拍
  • 黑丝空姐-造相Z-Turbo持续集成:使用GitHub Actions自动化测试模型API
  • 李慕婉-仙逆-造相Z-Turbo 与 MySQL 数据库联动:智能查询与报告生成
  • 李慕婉-仙逆-造相Z-Turbo Web开发全栈实践:从AI接口到前端展示的完整项目
  • Youtu-VL-4B-Instruct-GGUF模型实战:模拟STMF103C8T6最小系统板的电路图理解
  • 基于Multisim仿真的小功率调频发射机设计与性能调优
  • lychee-rerank-mm模型架构解析:理解多模态融合机制
  • OpenBCI与FTDI FT232通信延迟优化:跨平台性能调优实战
  • AudioSeal实战指南:利用tail -f实时监控app.log定位检测失败原因
  • 不用底图直接生成!AnimateDiff新手入门保姆级教程
  • 利用Qwen-Image-Edit-F2P自动化生成小说角色人脸配图方案
  • 电机控制进阶(1) - FOC核心算法解析:从Clark/Park变换到代码实战
  • 光伏储能微电网的Simulink主从控制模式仿真
  • MogFace人脸检测模型-WebUI企业应用:安防系统人脸预处理模块落地实践
  • 3步告别星穹铁道重复操作:March7thAssistant让你专注核心体验
  • 2023年电赛E题全国一等奖方案解析:基于步进电机云台与滤光视觉的运动目标追踪系统
  • Asian Beauty Z-Image Turbo 操作系统兼容性测试:Windows/Linux/macOS部署对比
  • AXI协议核心机制解析:从握手机制到突发传输