MQ-2烟雾传感器详解

2024/12/21 23:03:03

本文主要是介绍MQ-2烟雾传感器详解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

今天我要向大家介绍一款常用的气体传感器模块——MQ-2,烟雾传感器模块。如果您对于检测可燃性气体、烟雾和一氧化碳等有害气体感兴趣,那么 MQ-2 模块将成为您的得力助手。

MQ-2 传感器模块基于半导体传感技术,能够高度敏感地检测到目标气体的存在并产生相应的电信号。在接下来的文章中,我们将深入了解 MQ-2 模块的特点、工作原理以及如何正确使用和应用它。无论是家庭安全监测、工业环境监测还是个人健康管理,MQ-2 模块都将为您提供准确可靠的气体检测功能。

让我们一起开始探索这个小巧而强大的气体传感器模块吧!

1. 源码下载及前置阅读

本文首发 良许嵌入式网 :https://www.lxlinux.net/e/ ,欢迎关注!

本文所涉及的源码及安装包如下(由于平台限制,请点击以下链接阅读原文下载):

https://www.lxlinux.net/e/stm32/mq-2-tutorial.html

如果你是嵌入式开发小白,那么建议你先读读下面几篇文章。

  • 手把手教你安装和使用STM32CubeMX:一文教你使用STM32CubeMX开发工具
  • 使用接收中断+超时判断完成不定长数据的接收:STM32串口接收不定长数据(空闲中断+DMA)
  • 通俗易懂的 GPIO 介绍与实践:如何快速成为点灯大师?

往期教程,有兴趣的小伙伴可以看看。

  • ESP8266详解,助你成为物联网应用的专家:手把手教你玩转ESP8266(原理+驱动)
  • 蓝牙模块详解,轻松掌握一种无线通信技术:手把手教你玩转蓝牙模块(原理+驱动)
  • 如果想知道自己对嵌入式知识掌握程度:嵌入式自测题
作者简介
大家好,我是良许,博客里所有的文章皆为我的原创。
下面是我的一些个人介绍,欢迎交个朋友:
· 211工科硕士,国家奖学金获得者;
· 深耕嵌入式11年,前世界500强外企高级嵌入式工程师;
· 书籍《速学Linux作者》,机械工业出版社专家委员会成员;
· 全网60W粉丝,博客分享大量原创成体系文章,全网阅读量累计超4000万;
· 靠自媒体连续年入百万,靠自己买房买车。

我本科及硕士都是学机械,通过自学成功进入世界500强外企。我已经将自己的学习经验写成了一本电子书,超千人通过此书学习并转行成功。现在将这本电子书免费分享给大家,希望对你们有帮助:

电子书链接:https://www.lxlinux.net/1024.html

2. MQ-2介绍

MQ 系列模块是一个广泛应用于气体检测领域的大家族。MQ 代表着"Metal Oxide"(金属氧化物),这是指该系列模块中所采用的传感器原理。

MQ 系列长相相似,但是可以按照传感器上的编号区分它们,每个成员都有自己检测的气体,真是术业有专攻呢。

当然,我们今天的主角是 MQ-2。

2.1 MQ-2型号介绍

MQ-2,烟雾传感器模块,也叫可燃气体检测模块。

(有的小伙伴可能不理解为什么烟雾和可燃气体扯在一起了,这里给大家回忆一下烟雾的化学定义:雾是指空气中漂浮的小液滴,烟是可燃物在没有完全燃烧的情况下产生的悬浮在空气中的可见微粒,也就是固体小颗粒。所以烟雾就是指小液滴和固体小颗粒了。燃烧时产生烟雾的一个原因是没有完全燃烧,产生的固体小颗粒与空气中的小液滴结合形成了烟雾。)

MQ-2 可用于家庭和工厂的气体泄漏监装置,适宜于液化气、丁烷、丙烷、甲烷、酒精、烟雾等多种可燃性气体的探测。它的优点是灵敏度高、响应快、稳定性好、寿命长、驱动电路简单以及方便安装。

2.2 MQ-2工作参数及引脚介绍

MQ-2 工作参数:

  • 工作电压:DC 5V
  • 工作温度:-10 ~ +50℃

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

上电后电源指示灯亮。

当烟雾超过阈值,DO 输出指示灯亮。

接线如下:

MQ-2 STM32 备注
VCC 3.3/5V 电源正极
GND GND 电源负极
D0 任意 GPIO 口 数字输出(小于阈值输出高电平,大于阈值输出低电平)
A0 有 ADC 功能的引脚 模拟输出(0.1V-0.5V 正常,2V 左右浓度高)

模块通电后需要预热一分钟,稳定后数据才准确,传感器发热是正常现象因为内部有电热丝,如果烫手那就有问题了。

ADC 和引脚对应关系如下:

3. MQ-2工作原理

MQ-2 烟雾传感器采用在清洁空气中电导率较低的二氧化锡,属于表面离子式N型半导体。当 MQ-2 烟雾传感器在200到300摄氏度环境时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从而使其电阻值增加。当与烟雾接触时,如果晶粒间界处的势垒收到烟雾的调至而变化,就会引起表面导电率的变化。利用这一点就可以获得这种烟雾存在的信息,烟雾的浓度越大,导电率越大,输出电阻越低,则输出的模拟信号就越大。

简单来说就是通过测量电阻变化来检测可燃气体和烟雾的存在,浓度越高电压越高。

4. 编程实战

本次实战的目标是用串口助手将气体浓度的数值实时打印出来。

在此之前,我们要知道 MQ-2 的模拟输出信号电压范围为0到5V,并且与气体浓度成正比关系。通过将 MQ-2 的模拟输出信号接入处理器的 ADC(模数转换)管脚进行转换,我们可以获取 MQ-2 传感器输出电压值。由于该输出电压与电阻值成反比关系,而电阻值又与气体浓度呈一定的线性关系,因此通过测量 MQ-2 传感器的输出电压值,我们能够推导出气体的浓度水平

4.1 硬件接线

本教程使用的硬件如下:

  • 单片机:STM32F103C8T6

  • 烟雾传感器模块:MQ-2

  • 串口:USB 转 TTL

  • 烧录器:ST-LINK V2

MQ-2 STM32 USB 转 TTL
VCC 5V
GND G
DO 悬空
AO A0
A10 TX
A9 RX
G GND

烧录的时候接线如下表,如果不会烧录的话可以看我之前的文章【STM32下载程序的五种方法】。

ST-Link V2 STM32
SWCLK SWCLK
SWDIO SWDIO
GND GND
3.3V 3V3

接好如下图:

4.2 ADC初始化

ADC初始化代码如下,我们用 A0 引脚,对应的是 ADC1,通道0。

ADC_HandleTypeDef hadc1;                                //ADC句柄

void ADC1_Init(void)
{
    ADC_ChannelConfTypeDef sConfig = {0};

    hadc1.Instance = ADC1;                              //ADC1
    hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;         //不扫描,仅用到一个通道
    hadc1.Init.ContinuousConvMode = DISABLE;            //关闭连续转换模式
    hadc1.Init.DiscontinuousConvMode = DISABLE;         //禁止规则通道组间断模式
    hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;   //软件触发
    hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;         //数据右对齐
    hadc1.Init.NbrOfConversion = 1;                     //1个规则通道序列
    HAL_ADC_Init(&hadc1);                               //初始化

    sConfig.Channel = ADC_CHANNEL_0;                    //通道0
    sConfig.Rank = ADC_REGULAR_RANK_1;                  //rank1
    sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;     //1.5个周期
    HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

4.3 复写ADC初始化

复写 HAL 库的 ADC初始化,引脚配置,时钟使能,此函数会被 HAL_ADC_Init() 调用

void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    if(adcHandle->Instance==ADC1)
    {
        /* ADC1 时钟使能 */
        __HAL_RCC_ADC1_CLK_ENABLE();

        __HAL_RCC_GPIOA_CLK_ENABLE();
        /* PA0 对应 ADC1_IN0 */
        GPIO_InitStruct.Pin = GPIO_PIN_0;
        GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;        //模拟
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    }
}

4.4 主函数

因为电压范围是 0~3.3V,这个范围被分为4096(2的12次方)个刻度。

所以烟雾值 = 电压值 = 3.3 / 4096 × smoke_value(模拟输出值)。

int main(void)
{
    HAL_Init();                             /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    delay_init(72);                         /* 延时初始化 */
    usart_init(115200);                     /* 波特率设为115200 */
    ADC1_Init();                            /* ADC1初始化 */

    printf("烟雾传感器实验:\r\n");
    while(1)
    { 
        HAL_ADC_Start(&hadc1);                          // 启动ADC1转换
        HAL_ADC_PollForConversion(&hadc1, 50);          // 等待ADC1转换完成
        smoke_value = HAL_ADC_GetValue(&hadc1);         // 获取ADC1转换结果
        printf("烟雾值 = %f\r\n\r\n", 3.3/4096 * smoke_value);
        HAL_Delay(1000);
    }
}

4.5 最终效果

测试的时候大家可以:

  1. 可燃气体:拿一个普通打火机(防风的不行),打着,吹灭,手按住开关,就有可燃气体出来了,可以对着 MQ-2 做测试啦。
  2. 烟雾:小心地点燃一根牙签,吹灭,就有一缕烟啦,可以对着 MQ-2 做测试啦。

注意安全噢。

串口输出如下,0.1 到 0.5 正常;2 左右浓度高。

正常情况的串口输出:

有烟雾的串口输出:

5. 小结

MQ-2 广泛应用于家庭用气体泄漏报警器、工业用可燃气体报警器以及便携式气体检测仪器等领域。它的高灵敏度和快速响应使得它成为了气体检测的优选之一。

通过本文的介绍,希望能够为您提供全面而清晰的指导,让您对 MQ-2 烟雾传感器模块的原理和功能有更深入的了解。感谢各位看官,peace and love!

另外,想进大厂的同学,一定要好好学算法,这是面试必备的。这里准备了一份 BAT 大佬总结的 LeetCode 刷题宝典,很多人靠它们进了大厂。

刷题 | LeetCode算法刷题神器,看完 BAT 随你挑!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

  • 程序员必备编程资料大全
  • 程序员必备软件资源

欢迎关注我的博客:良许嵌入式教程网,满满都是干货!



这篇关于MQ-2烟雾传感器详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程