GD32F407VE天空星开发板的MQ135的空气质量检测 - 详解

news/2025/11/28 16:13:01/文章来源:https://www.cnblogs.com/yangykaifa/p/19283158

GD32F407VE天空星开发板的MQ135的空气质量检测

一、MQ135传感器深度解析

1.1 传感器概述与应用场景

MQ135是一款高性能的半导体气体传感器,专门设计用于检测空气中的多种污染气体。这款传感器采用二氧化锡(SnO₂)作为核心气敏材料,在清洁空气中具有较低的电导率,而当环境中存在污染气体时,其电导率会随着气体浓度的增加而显著增大。

典型应用场景包括:

  • 家庭环境空气质量监测系统
  • 工业现场有害气体泄漏报警装置
  • 智能家居中的通风控制系统
  • 实验室环境安全监测
  • 公共场所空气质量评估

1.2 技术特性详解

在这里插入图片描述
在这里插入图片描述

MQ135传感器具备多项优秀的技术特性:

电气参数:

环境适应性:

检测性能:

二、硬件系统设计与连接

2.1 模块硬件构成

MQ135空气检测模块是一个完整的检测解决方案,包含以下核心组件:

传感器本体:

信号处理电路:

接口定义:

2.2 工作原理深度分析

在这里插入图片描述

气体检测机制:
当传感器暴露在污染气体环境中时,气体分子与二氧化锡材料发生化学反应,导致材料电导率发生变化。这种变化与气体浓度呈正相关关系,从而实现了气体浓度的检测。

信号输出原理:

  • 数字输出(DO)通过电压比较器实现。当气体浓度超过设定阈值时,比较器输出低电平,触发LED1点亮
  • 模拟输出(AO)直接反映传感器当前的电阻状态,通过ADC采集可以获得连续的浓度信息

阈值调节机制:
通过旋转可调电位器,可以改变比较器的参考电压,从而调整触发阈值。顺时针旋转提高阈值,逆时针旋转降低阈值。

三、软件系统设计与实现

3.1 系统初始化配置

bsp_gpio_mq135.c的代码

#include "bsp_gpio_mq135.h"
//初始化的代码我AO的引脚写在adc里面就初始化了,
//DO的引脚可以接在任意的有个io口上,检测引脚的电平就可以触发一些代码
void mq135_init(){
printf("=mq135_init===");
//可以在这初始化DO引脚
}
/*_BSP_GPIO_MQ135_H */
/**
* @brief  检测空气检测传感器情况
* @param  GPIOx:x 可以是 A,B,C等
* @param  GPIO_Pin:待操作的pin脚号
* @retval SET(污染气体浓度未超过阈值)、RESET(污染气体浓度超过阈值)
*/
FlagStatus MQ135_Scan(){
// GD32使用gpio_input_bit_get读取指定GPIO引脚的输入状态
// 返回值为SET(1)或RESET(0),表示引脚的逻辑电平状态
if(gpio_input_bit_get(MQ135_DO_PIN) == RESET){
return RESET;
}
else{
return SET;
}
// 或者简化为一行:
// return gpio_input_bit_get(GPIOx, GPIO_Pin);
}

bsp_gpio_mq135.h代码:

#ifndef __BSP_GPIO_MQ135_H
#define __BSP_GPIO_MQ135_H
#include "gpio_cfg.h"//这个是我的初始化的函数,可以写下面的这个
#include "gd32f4xx.h"
//任意的io口引脚
#define MQ135_DO_RCU		RCU_GPIOC
#define MQ135_DO_PIN		GPIOC, GPIO_PIN_2
//adc采样的引脚
#define MQ135_AO_RCU		RCU_GPIOC
#define MQ135_AO_PIN		GPIOC, GPIO_PIN_1
void mq135_init();
//判断do的引脚是否触发
FlagStatus MQ135_Scan();
#endif /* __BSP_GPIO_MQ135_H */

3.2 数字信号处理模块

// DO状态监测函数
FlagStatus MQ135_Scan()
{
if(gpio_input_bit_get(MQ135_DO_PIN) == SET){
// 气体浓度超过阈值
printf("⚠️ 警告:检测到空气质量超标!\r\n");
printf("当前时间:%s\r\n", get_timestamp());
return SET;
}
else
{
// 气体浓度在安全范围内
printf("✅ 空气质量正常\r\n");
return RESET;
}
}

3.3 模拟信号采集与处理

app_mq135.c代码

#include "App.h"
#include "app_mq135.h"
#include "bsp_gpio_mq135.h"
#include <math.h>#include "ADC0.h"/*** @brief  MQ135_ADC 任务初始化* @param  mq135_task_cycle: 任务轮询周期 单位ms(可修改系统节拍定时器)* @retval 无*/void MQ135_TaskInit(){printf("==MQ135_TaskInit==");//GPIO_analog(MQ135_AO_RCU, MQ135_AO_PIN); // 模拟输入}/*** @brief  求ppm* @param  adc_value : ADC读取的原始值(0~4095)* @retval ppm* @note* 根据手册提供的各污染气体灵敏度 拟合成幂函数* 需要根据Rs/R0推算ppm,所以拟合函数时,x轴为Rs/R0,y轴为ppm,推导出y=ax^b* 图表没有每个点对应具体数值只能大致估计,所以测量值存在误差,想要完全精确请根据环境做多次标定*/float MQ135_Get_PPM(uint16_t adc_value){float vrl = 0;   /* AO输出的模拟电压 */float Rs;        /* 当前传感器电阻 */float ppm = 0;   /* 污染物平均浓度 *//* 读取AO输出电压 */vrl = (float)adc_value / 4095 * VC;/* 换算Rs电阻 */Rs = (float)(VC - vrl) * RL / vrl;//根据数据手册图表,Rs/R0的范围为0.1~1000,所以需要取log10(Rs/R0)来进行拟合float Rs0 = Rs/R0;  /* Rs/R0 *//* y=ax^b x为Rs/R0,ab的取值根据数据手册图表自行拟合成幂函数 */ppm =  A*pow(Rs/R0,B) ;return ppm;}/*** @brief  MQ135_ADC 任务*/void MQ135_Task(void){float adc_convertedvalue[20] = {0};//转化后的源始值的计算值//将ADC原始值转换为电压值uint16_t value = ADC0_get(1);adc_convertedvalue[0] = value * 3.3/4095;printf("adc_convertedvalue = %.2f",adc_convertedvalue[0]);printf("\r\n/*");//打印分割线for(uint32_t adc_task_i_temp = 0;adc_task_i_temp<80;adc_task_i_temp++){printf("*");}printf("*/");printf("\r\n 当前的值:");printf("\r\n 空气质量检测模块: %f V(0x%04X)",adc_convertedvalue[0],value);printf("\r\n");/* 拟合函数换算出ppm */float ppm = MQ135_Get_PPM(value);if(ppm<10){printf("综合污染气体平均浓度未达到检测范围\r\n");}else if(ppm>1000){printf("综合污染气体平均浓度超过检测范围\r\n");}else{printf("综合污染气体的平均浓度:%fppm\r\n",ppm);}printf("/*");for(uint32_t adc_task_i_temp = 0;adc_task_i_temp<80;adc_task_i_temp++){printf("*");}printf("*/");}

app_mq135.h代码

#ifndef __APP_MQ135_H
#define __APP_MQ135_H
#include "gpio_cfg.h"//或#include "stdint.h"
#define RL                               1     /* 根据硬件原理图可知:RL = 1k */ 
#define R0                               2     /* MQ135在洁净空气中的阻值,官方数据手册没有给出,这是实验测试得出,想要准确请多次测试 */ 
#define VC                               5.0   /* MQ135供电电压,根据实际供电修改,默认接5V */
#define A                                4.17  /* y=ax^b 的 a */
#define B                                -2.28 /* y=ax^b 的 b */
#define MQ135_DO_RCU		RCU_GPIOC
#define MQ135_DO_PIN		GPIOC, GPIO_PIN_2
#define MQ135_AO_RCU		RCU_GPIOC
#define MQ135_AO_PIN		GPIOC, GPIO_PIN_1
typedef struct
{
uint32_t cycle;
uint32_t timer;
uint8_t  flag;
}MQ135_TaskInfo;
extern MQ135_TaskInfo mq135_task;
float MQ135_Ge_PPM(uint16_t adc_value);
void MQ135_TaskReset(void);
void MQ135_TaskInit();
void MQ135_Task(void);
#endif /* __APP_MQ135_H  */

四、浓度换算算法与校准

4.1 理论基础与算法实现

气体浓度换算基于传感器的灵敏度特性曲线,采用幂函数拟合的方法:

/**
* @brief  求ppm
* @param  adc_value : ADC读取的原始值(0~4095)
* @retval ppm
* @note
* 根据手册提供的各污染气体灵敏度 拟合成幂函数
* 需要根据Rs/R0推算ppm,所以拟合函数时,x轴为Rs/R0,y轴为ppm,推导出y=ax^b
* 图表没有每个点对应具体数值只能大致估计,所以测量值存在误差,想要完全精确请根据环境做多次标定
*/
float MQ135_Get_PPM(uint16_t adc_value)
{
float vrl = 0;   /* AO输出的模拟电压 */
float Rs;        /* 当前传感器电阻 */
float ppm = 0;   /* 污染物平均浓度 */
/* 读取AO输出电压 */
vrl = (float)adc_value / 4095 * VC;
/* 换算Rs电阻 */
Rs = (float)(VC - vrl) * RL / vrl;
//根据数据手册图表,Rs/R0的范围为0.1~1000,所以需要取log10(Rs/R0)来进行拟合
float Rs0 = Rs/R0;  /* Rs/R0 */
/* y=ax^b x为Rs/R0,ab的取值根据数据手册图表自行拟合成幂函数 */
ppm =  A*pow(Rs/R0,B) ;
return ppm;
}

五、完整应用系统实现

5.1 主程序框架

// 系统状态结构体
typedef struct {
float current_concentration;
float concentration_threshold;
bool alarm_status;
uint32_t sample_count;
char air_quality_level[20];
} AirQuality_Status_t;
// 主监控循环
void AirQuality_Monitor_Loop(void)
{
AirQuality_Status_t system_status = {0};
system_status.concentration_threshold = 100.0f;  // 设置默认阈值
printf(" MQ135空气质量监测系统启动\r\n");
printf("=================================\r\n");
while (1) {
// 读取当前气体浓度
system_status.current_concentration = Get_Gas_Concentration();
system_status.sample_count++;
// 更新空气质量等级
Update_Air_Quality_Level(&system_status);
// 检查数字输出状态
Monitor_DO_Output();
// 显示当前状态信息
Display_System_Status(&system_status);
// 数据记录
Log_Sensor_Data(&system_status);
// 等待下一次采样
HAL_Delay(2000);  // 2秒采样间隔
}
}
// 空气质量等级评估
void Update_Air_Quality_Level(AirQuality_Status_t *status)
{
float ppm = status->current_concentration;
if (ppm < 50.0f) {
strcpy(status->air_quality_level, "优");
} else if (ppm < 100.0f) {
strcpy(status->air_quality_level, "良");
} else if (ppm < 200.0f) {
strcpy(status->air_quality_level, "轻度污染");
} else if (ppm < 300.0f) {
strcpy(status->air_quality_level, "中度污染");
} else {
strcpy(status->air_quality_level, "重度污染");
}
}

5.2 数据显示与记录

// 系统状态显示
void Display_System_Status(AirQuality_Status_t *status)
{
printf("\r\n 空气质量监测报告\r\n");
printf("----------------------------\r\n");
printf("采样次数:%lu\r\n", status->sample_count);
printf("当前浓度:%.2f ppm\r\n", status->current_concentration);
printf("空气质量:%s\r\n", status->air_quality_level);
printf("报警状态:%s\r\n", status->alarm_status ? "触发" : "正常");
printf("----------------------------\r\n");
}
// 数据记录功能
void Log_Sensor_Data(AirQuality_Status_t *status)
{
// 在实际应用中,这里可以将数据保存到SD卡或发送到服务器
FILE *log_file = fopen("air_quality_log.csv", "a");
if (log_file != NULL) {
fprintf(log_file, "%lu,%.2f,%s,%d\r\n",
(unsigned long)time(NULL),
status->current_concentration,
status->air_quality_level,
status->alarm_status);
fclose(log_file);
}
}

MQ135空气质量检测传感器为环境监测提供了一个成本效益高、可靠性好的解决方案。通过本文介绍的硬件连接方法、软件实现方案以及数据处理算法,开发者可以快速构建一个功能完整的空气质量监测系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/979827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年销棒粉碎机厂商权威推荐榜单:钉盘磨/棒销磨/棒销式粉碎机源头厂家精选

在工业粉体加工与材料科学领域,销棒粉碎机作为实现超微超细粉碎的关键设备,其技术水平与工艺精度直接影响到成品粒度分布与生产效率。随着新材料、锂电池、精细化工等产业的快速发展,对高精度、高效率、无污染的粉碎…

2025年中国十大GEO全域搜索营销专业公司推荐:靠谱的GE

本榜单依托AI营销场景全维度调研与真实客户口碑反馈,深度筛选出十家在GEO全域搜索营销领域具备技术壁垒与实战成果的标杆企业,为企业解决获客难、成本高痛点提供客观选型依据,助力精准匹配适配的AI搜索优化服务伙伴…

2025年11月重庆保洁公司排名推荐:基于真实数据的客观评价

随着生活节奏加快和工作压力增大,越来越多的重庆家庭和企业开始将保洁服务纳入日常管理范畴。根据重庆市商务委2024年发布的居民服务消费数据显示,超过60%的城市家庭每月至少使用一次专业保洁服务,而企事业单位的保…

2025年度十大AI手机推荐,有高刷新率屏幕的AI手机、AI

在AI技术深度渗透智能终端的2025年,AI手机已从功能叠加转向场景重构,成为企业降本提效的数字化新载体。面对市场上品类繁杂的AI手机产品,如何精准匹配业务需求?以下结合有高刷新率屏幕的AI手机AI手机服务怎么联系A…

2025年11月电磁吸盘厂家推荐榜:五大厂家综合对比与权威评价

作为工业制造领域的关键设备,电磁吸盘广泛应用于机床加工、物流搬运、冶金等行业,其性能直接影响生产效率和安全性。许多用户在选购时面临厂家众多、参数复杂、服务质量参差不齐等问题。典型用户包括中小型机械加工企…

2025年WMS仓库管理系统选型指南(最新)

WMS仓库管理系统排名推荐:五大品牌对比分析国内WMS市场概况 随着数字经济与智能供应链的发展,仓库管理系统(WMS)已经成为企业降本增效、提升仓储管理效率的核心数字化基础设施。2024-2025年,中国WMS市场呈现高速增…

数组和张量

数组和张量Numpy和PyTorch的基础语法几乎一致,具体表现为:1 np对应torch2 数组array对应张量tensor3 Numpy的n维数组对应着PyTorch的n阶张量数组与张量之间可以相互转换:1 数组arr转为张量ts:ts = torch.tensor(arr…

2025年十大AI获客手机服务排行榜,新测评精选AI获客手机

为帮企业高效锁定适配自身需求的AI获客手机服务合作伙伴,避免选型走弯路,我们从技术落地能力(如功能完整性、系统稳定性)、场景适配广度(含行业针对性、多场景覆盖度)、服务质量(覆盖部署培训到后期运维)及真实…

涂鸦智能:宠物饮水机智能化的首选方案商!

智能宠物饮水机市场正以稳定的年增长率持续扩张,在这场技术革命中,一家物联网平台正凭借其雄厚的技术实力成为品牌商和制造商的秘密武器。 据统计,2024年全球智能宠物饮水机市场已达数十亿元人民币,并以稳定的年增…

2025年数字员工手机十大推荐:高性价比、抗摔能力与服务体验

在数字化劳动力快速渗透的2025年,数字员工手机作为实体员工+数字分身协同办公的核心终端,已成为企业降本提效的关键工具。面对市场上功能各异的产品,如何选择性价比高的、抗摔能力出色且服务响应及时的设备?以下结…

如何使用VBScript创建集合

在 VBScript 中,可以通过以下几种方式创建集合(Collection):1. 使用 Collection 对象(最常用) Collection 是 VBScript 内置的集合对象,可以存储任意类型的值,并支持按索引或键(Key)访问。 示例代码:创建…

布尔型数组

布尔型数组import numpy as nparr = np.arange(1,7).reshape(2,3)print(arr)print("数组与数字的比较" + "\n" + str(arr >= 4))arr1 = np.arange(2,8).reshape(2,3)print("同维数组的比较…

涂鸦智能:电壁炉智能化升级的核心“引擎”

预计到2027年,中国取暖电器行业市场规模将达到1274.5亿元,智能取暖正迎来高速发展期。 随着冬季取暖需求不断升级和“它经济”的持续升温,电壁炉已从单纯的取暖设备,逐渐转变为集家居装饰、智能控制、节能环保于一…

tabcontrol 动态添加用户页面

动态添加用户控件并选择最后一次添加的页面1 <TabControl ItemsSource="{Binding TabItems}" SelectedItem="{Binding SelectedTabItem}" >2 <!-- ItemTemplate定义选项卡头(He…

2025佛山桶装水配送公司TOP5权威推荐:佛山市水专家电子

桶装水作为家庭与企业日常饮水的核心选择,其配送服务的时效性、安全性、性价比直接影响用户体验。2024年佛山地区桶装水配送投诉数据显示,42%的纠纷集中在配送超时水质存疑服务不规范三大领域,用户常因临时缺水难补…

佛山口碑好的桶装水配送专业公司推荐:本地靠谱的桶装水配送品牌

本榜单依托佛山本地市场真实消费口碑、配送服务时效与水质安全检测数据,筛选出5家标杆桶装水配送企业,为家庭及企业用户提供客观选型参考,助力精准匹配品质+速度+信任兼备的服务伙伴。 TOP1 推荐:佛山市水专家电…

PostgreSQL里的JSONB到底怎么玩

最近PGSQL越来越火,不论是常用JSON的个人项目,还是某些需要国产数据库的项目(大多数是翻版的PGSQL)都和PGSQL脱不开关系。 先写一下json的一些规则:JSON的键名、字符串都只能是由" "包裹,不允许使用 ,…

视频融合平台EasyCVR通道快照获取与Base64转换问题排查实录

一、问题背景 近期,我们收到用户反馈,在调用EasyCVR平台接口获取通道实时快照后,将返回的数据放入在线转换工具中无法成功转换为图片。经过排查发现,返回的格式与常规转换工具要求的格式存在差异。以下是该问题的详…

2025 年 11 月薪酬体系设计咨询公司权威推荐榜:专业定制与高效落地服务口碑之选

2025 年 11 月薪酬体系设计咨询公司权威推荐榜:专业定制与高效落地服务口碑之选 随着企业竞争日益激烈,科学合理的薪酬体系已成为吸引和保留核心人才的关键要素。薪酬体系设计不仅涉及基础薪资结构,更需要与组织战略…

2025留学中介哪家比较靠谱

2025留学中介哪家比较靠谱一、2025留学中介哪家比较靠谱2025年10月24日,新一轮的留学申请季已经拉开帷幕。面对市场上众多的留学服务机构,许多学生和家长都会感到迷茫:究竟哪家留学中介更值得信赖?申请美国研究生是…