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

MQ-135空气质量传感器(STM32)

目录

一、介绍

二、传感器原理

1.原理图

2.引脚描述

3.工作原理介绍

三、程序设计

main.c文件

mq135.h文件

mq135.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

        MQ-135空气质量传感器属于MQ系列气体传感器,广泛用于检测有害气体、新鲜空气中的烟雾等。可检测或测量氨气、苯、硫磺、二氧化碳、烟等有害气体。工作原理是基于半导体气敏元件的电阻变化。当气体进入传感器时,它会与气敏元件表面的敏感材料发生化学反应,导致电阻值发生变化。通过测量电阻值的变化,可以推断出污染气体浓度的大小

以下是MQ-135空气质量传感器的参数:

型号

MQ-135

工作电压

DC 5V

工作电流

150mA

检测气体

NH3、酒精、NOx、苯、CO2

检测浓度

300~10000ppm(可燃气体)

输出

AO/DO

哔哩哔哩视频链接:

MQ-135空气质量传感器(STM32)

(资料分享见文末) 

二、传感器原理

1.原理图

DO输出: TTL数字量0和1(0.1和5V)

AO输出: 0.1-0.3V(相对无污染),高浓度电压4V左右

 : DO有效信号为低电平,输出有效时信号指示灯亮起

2.引脚描述

 模块中蓝色的电位器是用于调节阀值,顺时针旋转,阈值会越大,逆时针越小

引脚名称

描述

VCC

供给电压DC 5V

GND

地线

DO

开关信号

AO

模拟信号

3.工作原理介绍

    使用MQ-135型空气质量传感器属于二氧化锡(SnO2)半导体气敏材料,属于表面离子式N型半导体。处于200~3000摄氏度时,二氧化锡表面吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从面使其电阻值增加。当与敏感气体接触时,如果晶粒间界处的势垒收到调至面变化,就会引起表面导电率的变化。利用这一点就可以获得空气质量的信息。污染气体浓度越大导电率越大,输出电阻越低,则输出的模拟信号就越大。

主要应用:

家庭用气体泄漏报警器
工业用可燃气体报警器
便携式危险气体检测器

三、程序设计

1.使用STM32F103C8T6读取MQ-135空气质量传感器采集的数据,通过串口发送至电脑

2.将读取得到的空气质量信息数据同时在OLED上显示

MQ-135

PA0

OLED_SCL

PB11

OLED_SDA

PB10

串口

串口1

注意:传感器通电后,需要先预热约60s后测量的数据才稳定。通电后a感器会出现正常的轻度发热现象,因为内部有电热丝。

main.c文件

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "mq135.h"
#include "adcx.h"/*****************辰哥单片机设计******************STM32* 项目			:	MQ-135空气质量传感器实验                     * 版本			: V1.0* 日期			: 2024.8.23* MCU			:	STM32F103C8T6* 接口			:	参看mq135.h							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥 **********************BEGIN***********************/u16 value;
u8 buff[30];//参数显示缓存数组
float ppm;int main(void)
{ SystemInit();//配置系统时钟为72M	delay_init(72);LED_Init();LED_On();MQ135_Init();USART1_Config();//串口初始化OLED_Init();printf("Start \n");delay_ms(1000);OLED_Clear();//显示“空气质量:”OLED_ShowChinese(0,0,0,16,1);OLED_ShowChinese(16,0,1,16,1);OLED_ShowChinese(32,0,2,16,1);OLED_ShowChinese(48,0,3,16,1);OLED_ShowChar(64,0,':',16,1);while (1){LED_Toggle();value = MQ135_GetData();  printf("空气质量: %d\r\n",value);OLED_ShowNum(80,0,value,4,16,1);ppm = MQ135_GetData_PPM();sprintf((char*)buff, "%.2fppm    ",ppm);OLED_ShowString(48,16,buff,16,1);//		if(value)
//		{
//			OLED_ShowChinese(48,32,4,16,1);	//异
//			OLED_ShowChinese(64,32,6,16,1);	//常
//		}
//		else
//		{
//			OLED_ShowChinese(48,32,5,16,1);	//正
//			OLED_ShowChinese(64,32,6,16,1);	//常
//		}delay_ms(200);}}

mq135.h文件

#ifndef __MQ135_H
#define	__MQ135_H
#include "stm32f10x.h"
#include "adcx.h"
#include "delay.h"
#include "math.h"/*****************辰哥单片机设计******************STM32* 文件			:	MQ-135空气质量传感器h文件                   * 版本			: V1.0* 日期			: 2024.8.23* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥**********************BEGIN***********************/#define MQ135_READ_TIMES	10  //MQ-135传感器ADC循环读取次数//模式选择	
//模拟AO:	1
//数字DO:	0
#define	MODE 	1/***************根据自己需求更改****************/
// MQ-135 GPIO宏定义
#if MODE
#define		MQ135_AO_GPIO_CLK								RCC_APB2Periph_GPIOA
#define 	MQ135_AO_GPIO_PORT							GPIOA
#define 	MQ135_AO_GPIO_PIN								GPIO_Pin_0
#define   ADC_CHANNEL               			ADC_Channel_0	// ADC 通道宏定义#else
#define		MQ135_DO_GPIO_CLK								RCC_APB2Periph_GPIOA
#define 	MQ135_DO_GPIO_PORT							GPIOA
#define 	MQ135_DO_GPIO_PIN								GPIO_Pin_1			#endif
/*********************END**********************/void MQ135_Init(void);
uint16_t MQ135_GetData(void);
float MQ135_GetData_PPM(void);#endif /* __ADC_H */

mq135.c文件

#include "mq135.h"/*****************辰哥单片机设计******************STM32* 文件			:	MQ-135空气质量传感器c文件                   * 版本			: V1.0* 日期			: 2024.8.23* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	:	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥**********************BEGIN***********************/void MQ135_Init(void)
{#if MODE{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd (MQ135_AO_GPIO_CLK, ENABLE );	// 打开 ADC IO端口时钟GPIO_InitStructure.GPIO_Pin = MQ135_AO_GPIO_PIN;					// 配置 ADC IO 引脚模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		// 设置为模拟输入GPIO_Init(MQ135_AO_GPIO_PORT, &GPIO_InitStructure);				// 初始化 ADC IOADCx_Init();}#else{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd (MQ135_DO_GPIO_CLK, ENABLE );	// 打开连接 传感器DO 的单片机引脚端口时钟GPIO_InitStructure.GPIO_Pin = MQ135_DO_GPIO_PIN;			// 配置连接 传感器DO 的单片机引脚模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;			// 设置为上拉输入GPIO_Init(MQ135_DO_GPIO_PORT, &GPIO_InitStructure);				// 初始化 }#endif}#if MODE
uint16_t MQ135_ADC_Read(void)
{//设置指定ADC的规则组通道,采样时间return ADC_GetValue(ADC_CHANNEL, ADC_SampleTime_55Cycles5);
}
#endifuint16_t MQ135_GetData(void)
{#if MODEuint32_t  tempData = 0;for (uint8_t i = 0; i < MQ135_READ_TIMES; i++){tempData += MQ135_ADC_Read();delay_ms(5);}tempData /= MQ135_READ_TIMES;return tempData;#elseuint16_t tempData;tempData = !GPIO_ReadInputDataBit(MQ135_DO_GPIO_PORT, MQ135_DO_GPIO_PIN);return tempData;#endif
}float MQ135_GetData_PPM(void)
{#if MODEfloat  tempData = 0;for (uint8_t i = 0; i < MQ135_READ_TIMES; i++){tempData += MQ135_ADC_Read();delay_ms(5);}tempData /= MQ135_READ_TIMES;float Vol = (tempData*5/4096);float RS = (5-Vol)/(Vol*0.5);float R0=6.64;float ppm = pow(11.5428*R0/RS, 0.6549f);return ppm;#endif
}

四、实验效果 

五、资料获取

项目分享

相关文章:

MQ-135空气质量传感器(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 mq135.h文件 mq135.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 MQ-135空气质量传感器属于MQ系列气体传感器&#xff0c;广泛用于检测有害气体、新鲜空气中的烟…...

动手学深度学习(pytorch)学习记录27-深度卷积神经网络(AlexNet)[学习记录]

目录 创建模型读取数据集训练AlexNet AlexNet 是由 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 在 2012 年提出的深度卷积神经网络&#xff0c;它在当年的 ImageNet 大规模视觉识别挑战赛&#xff08;ILSVRC&#xff09;中取得了显著的成绩&#xff0c;从而引起了深度…...

zookeeper是啥?在kafka中有什么作用

一、Zookeeper是啥 问AI&#xff0c;它是这么说&#xff1a; ZooKeeper是一个开源的分布式协调服务。 ZooKeeper最初由雅虎研究院开发&#xff0c;用于解决大型分布式系统中的协调问题&#xff0c;特别是为了避免分布式单点故障。它被设计成一个简单易用的接口集&#xff0c;封…...

华为手机集大成之作?带你看全球首款三折叠手机 Mate XT 非凡大师

北京时间9月10日14:30分&#xff0c;华为终端在深圳召开了华为见证非凡品牌盛典及鸿蒙智行新品发布会。这次发布会最受瞩目的莫过于非凡大师系列的新品、全球首款三折叠手机Mate XT 非凡大师。 三折叠形态&#xff0c;内外铰链存于一体 尽管三折叠的概念被提出来的时间并不算…...

构建安全畅通的道路网络:EasyCVR视频汇聚平台在道路监控中的创新应用

随着城市化进程的加速和交通流量的不断增加&#xff0c;道路监控已成为确保交通安全、维护社会秩序的重要手段。道路上的监控摄像头多种多样&#xff0c;大致可以分为这几类&#xff1a;交通道路监控、治安监控、路口违章监控&#xff0c;以及车辆测速监控等。基于智慧交通的需…...

Mac M1安装Hive

一、下载解压Hive 1.官网地址 https://dlcdn.apache.org/hive/ 2.选择对应版本进行下载&#xff0c;这里我以3.1.3为例&#xff1b; 3.下载好后&#xff0c;进行解压&#xff0c;并重命名为hive-3.1.3&#xff0c;放到资源库目录下&#xff1b; 二、配置系统环境 1.打开~/…...

shader 案例学习笔记之绘制圆

环境搭建&#xff1a;参考glsl vscode环境搭建 先上代码 #ifdef GL_ES precision mediump float; #endifuniform vec2 u_resolution;void main(){vec2 st gl_FragCoord.xy/u_resolution.xy;st - 0.5;st.x * u_resolution.x/u_resolution.y;float r length(st);float d ste…...

c++的模板编程技术及其发展历程

C模板编程技术及其发展历程 一、早期阶段&#xff08;C98及之前&#xff09; 在C98标准中&#xff0c;模板是首次被引入的关键特性之一。模板允许开发人员编写参数化的类型或函数&#xff0c;从而创建通用的算法和数据结构。这种通用性不仅提高了代码的复用性&#xff0c;还确…...

Unity 一个比较适合学习的FSM状态机(汉化和功能简述)

该轮子由网络资源而来&#xff0c;遵从作者开源意愿&#xff0c;仅作免费学习和分享&#xff0c;不作任何商业行为 &#xff0c;本文不支持任何交易行为&#xff0c;侵权删&#xff01;&#xff01;&#xff01; 至于我为什么不将此文章设置为转载&#xff0c;是因为该代码所在…...

25、Wpf之App资源应用

开发平台&#xff1a;Win10 64位 开发环境&#xff1a;VS2022(64位) Preview .NET Framework&#xff1a;.NET 6 文章目录 一 Resources1.1 Application中定义资源1.2 样式&#xff08;Styles&#xff09;1.3 模板&#xff08;Templates&#xff09;1.4 数据转换器&#xff08;…...

【深度好文】反模式:10种滥用设计模式案例分析

Hello&#xff0c;大家好&#xff0c;我是V哥。很多文章都在介绍设计模式怎么用&#xff0c;讲解设计模式的原理等等&#xff0c;设计模式的思想是编程中的精髓&#xff0c;用好了可以让代码结构利于维护和扩展&#xff0c;同时代码风格也更加优雅&#xff0c;V 哥也写过这样一…...

OkHttp Interceptor日志上报

最近为了做一些网络上的优化&#xff0c;所以就得提前埋点&#xff0c;为后续网络优化提供数据支持。 主要是对发起请求埋点&#xff0c;请求错误埋点&#xff0c;客户端请求耗时埋点。 事件上报到阿里云&#xff0c;接入的是阿里的应用实时监控服务。 网络请求使用的是OhHttp…...

高性能反向代理--HAProxy

文章目录 Web架构负载均衡介绍为什么使用负载均衡负载均衡类型 HAProxy简介应用场景HAProxy是什么HAProxy功能 脚本安装HAProxy基础配置global多进程和线程HAProxy日志配置项 Proxies配置-listen-frontend-backendserver配置 frontendbackend配置实例子配置文件 HAProxy调度算法…...

数据结构应用实例(四)——最小生成树

Content&#xff1a; 一、问题描述二、算法思想三、代码实现四、两种算法的比较五、小结 一、问题描述 利用 prim 算法和 kruskal 算法实现最小生成树问题&#xff1b; 二、算法思想 首先判断图是否连通&#xff0c;只有在连通的情况下才进行最小树的生成&#xff1b; 三、代…...

为OneAPI配置MySQL数据库及设置开机启动

OneAPI启动时&#xff0c;如果发现没有数据库他会在项目根目录自动创建SqlLit&#xff0c;为提高OneAPI的性能及管理&#xff0c;这里给出一个使用MySQL数据库的案例&#xff0c;同时本文介绍如何在源码部署的情况下&#xff0c;设置OneAPI的开机自动启动。 OneAPI的源代码安装…...

完整的k8s搭建服务器流程

一、准备 1、禁用selinux #临时禁用 setenforce 0 #永久禁用 sed -i s/enforcing/disabled/ /etc/selinux/config #检查selinux是否已禁用 sestatus 2、禁用交换分区 #命令行临时禁用 swapoff -a #永久禁用 vim /etc/fstab 注释掉有swap字样的那行&#xff0c;重启 3、允许…...

【Petri网导论学习笔记】Petri网导论入门学习(一)

Petri 网导论 如需学习转载请注明原作者并附本帖链接&#xff01;&#xff01;&#xff01; 如需学习转载请注明原作者并附本帖链接&#xff01;&#xff01;&#xff01; 如需学习转载请注明原作者并附本帖链接&#xff01;&#xff01;&#xff01; 发现网上关于Petri网的学习…...

Zabbix监控自动化

监控在运维工作中所占的比例为 30%左右&#xff0c;监控做得好&#xff0c;会省很多事&#xff0c;让工作能有序地进行。理想的监控应该是自动化的&#xff0c;只需要配置规则&#xff0c;即可自动完成所有的事情&#xff0c;比如主机的自动添加和注册、模板的自动添加、分组的…...

pytorch pyro 贝叶斯神经网络 bnn beyesean neure network svi ​定制SVI目标和培训循环,变更推理

定制SVI目标和培训循环 Pyro支持各种基于优化的贝叶斯推理方法&#xff0c;包括Trace_ELBO作为SVI(随机变分推理)的基本实现。参见文件&#xff08;documents的简写&#xff09;有关各种SVI实现和SVI教程的更多信息I, 二&#xff0c;以及罗马数字3了解SVI的背景。 在本教程中…...

Openeuler22 部署 RackTables0.22.0

目录 0、前言 一、部署lamp环境&#xff0c;lamp环境测试 1、部署Apache&#xff0c;apache环境测试 2、部署php、mysql&#xff0c;php环境测试 二、放文件 三、配置mysql 四、安装racktables 第一步、点击proceed继续 第二步、点击proceed 第三步、根据提示进行操作…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...