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系列气体传感器,广泛用于检测有害气体、新鲜空气中的烟…...

动手学深度学习(pytorch)学习记录27-深度卷积神经网络(AlexNet)[学习记录]
目录 创建模型读取数据集训练AlexNet AlexNet 是由 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 在 2012 年提出的深度卷积神经网络,它在当年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中取得了显著的成绩,从而引起了深度…...

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

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

构建安全畅通的道路网络:EasyCVR视频汇聚平台在道路监控中的创新应用
随着城市化进程的加速和交通流量的不断增加,道路监控已成为确保交通安全、维护社会秩序的重要手段。道路上的监控摄像头多种多样,大致可以分为这几类:交通道路监控、治安监控、路口违章监控,以及车辆测速监控等。基于智慧交通的需…...

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

shader 案例学习笔记之绘制圆
环境搭建:参考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模板编程技术及其发展历程 一、早期阶段(C98及之前) 在C98标准中,模板是首次被引入的关键特性之一。模板允许开发人员编写参数化的类型或函数,从而创建通用的算法和数据结构。这种通用性不仅提高了代码的复用性,还确…...
Unity 一个比较适合学习的FSM状态机(汉化和功能简述)
该轮子由网络资源而来,遵从作者开源意愿,仅作免费学习和分享,不作任何商业行为 ,本文不支持任何交易行为,侵权删!!! 至于我为什么不将此文章设置为转载,是因为该代码所在…...

25、Wpf之App资源应用
开发平台:Win10 64位 开发环境:VS2022(64位) Preview .NET Framework:.NET 6 文章目录 一 Resources1.1 Application中定义资源1.2 样式(Styles)1.3 模板(Templates)1.4 数据转换器(…...
【深度好文】反模式:10种滥用设计模式案例分析
Hello,大家好,我是V哥。很多文章都在介绍设计模式怎么用,讲解设计模式的原理等等,设计模式的思想是编程中的精髓,用好了可以让代码结构利于维护和扩展,同时代码风格也更加优雅,V 哥也写过这样一…...
OkHttp Interceptor日志上报
最近为了做一些网络上的优化,所以就得提前埋点,为后续网络优化提供数据支持。 主要是对发起请求埋点,请求错误埋点,客户端请求耗时埋点。 事件上报到阿里云,接入的是阿里的应用实时监控服务。 网络请求使用的是OhHttp…...

高性能反向代理--HAProxy
文章目录 Web架构负载均衡介绍为什么使用负载均衡负载均衡类型 HAProxy简介应用场景HAProxy是什么HAProxy功能 脚本安装HAProxy基础配置global多进程和线程HAProxy日志配置项 Proxies配置-listen-frontend-backendserver配置 frontendbackend配置实例子配置文件 HAProxy调度算法…...
数据结构应用实例(四)——最小生成树
Content: 一、问题描述二、算法思想三、代码实现四、两种算法的比较五、小结 一、问题描述 利用 prim 算法和 kruskal 算法实现最小生成树问题; 二、算法思想 首先判断图是否连通,只有在连通的情况下才进行最小树的生成; 三、代…...

为OneAPI配置MySQL数据库及设置开机启动
OneAPI启动时,如果发现没有数据库他会在项目根目录自动创建SqlLit,为提高OneAPI的性能及管理,这里给出一个使用MySQL数据库的案例,同时本文介绍如何在源码部署的情况下,设置OneAPI的开机自动启动。 OneAPI的源代码安装…...
完整的k8s搭建服务器流程
一、准备 1、禁用selinux #临时禁用 setenforce 0 #永久禁用 sed -i s/enforcing/disabled/ /etc/selinux/config #检查selinux是否已禁用 sestatus 2、禁用交换分区 #命令行临时禁用 swapoff -a #永久禁用 vim /etc/fstab 注释掉有swap字样的那行,重启 3、允许…...

【Petri网导论学习笔记】Petri网导论入门学习(一)
Petri 网导论 如需学习转载请注明原作者并附本帖链接!!! 如需学习转载请注明原作者并附本帖链接!!! 如需学习转载请注明原作者并附本帖链接!!! 发现网上关于Petri网的学习…...

Zabbix监控自动化
监控在运维工作中所占的比例为 30%左右,监控做得好,会省很多事,让工作能有序地进行。理想的监控应该是自动化的,只需要配置规则,即可自动完成所有的事情,比如主机的自动添加和注册、模板的自动添加、分组的…...
pytorch pyro 贝叶斯神经网络 bnn beyesean neure network svi 定制SVI目标和培训循环,变更推理
定制SVI目标和培训循环 Pyro支持各种基于优化的贝叶斯推理方法,包括Trace_ELBO作为SVI(随机变分推理)的基本实现。参见文件(documents的简写)有关各种SVI实现和SVI教程的更多信息I, 二,以及罗马数字3了解SVI的背景。 在本教程中…...

Openeuler22 部署 RackTables0.22.0
目录 0、前言 一、部署lamp环境,lamp环境测试 1、部署Apache,apache环境测试 2、部署php、mysql,php环境测试 二、放文件 三、配置mysql 四、安装racktables 第一步、点击proceed继续 第二步、点击proceed 第三步、根据提示进行操作…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...