MQ_2烟雾传感器

本文围绕STM32和MQ-2烟雾传感器展开,介绍了MQ-2对多种气体灵敏度高,有数字和模拟两种输出方式。还阐述了使用ADC采集数据的配置流程,给出代码示例和电路原理图,并说明了求电压数值的计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

MQ_2功能

MQ-2烟雾传感器对液化气、天然气、城市煤气灵敏度较高。

引脚说明

MQ-2有两种输出方式:
1、数字量输出:通过板载电位器设定浓度阈值,当检测到环境气体浓度超过阈值时,通过数字引脚DOUT输出低电平。
2、模拟量输出:浓度越高,AOUT引脚输出的电压值越高,通过ADC采集的模拟值越高。

VCC——5V
GND——GND
DOUT——数字引脚(Arduino Uno的0-13引脚)
AOUT——模拟引脚(Arduino Uno的A0~A5)

使用ADC采集数据

配置流程

1.开启GPIO和ADC时钟 :RCC_APB2PeriphClockCmd
2.配置ADC分频:		RCC_ADCCLKConfig(RCC_PCLK2_Div6);						//6分频
3.初始化GPIO:GPIO_Init()
4.初始化ADC:ADC_Init()
5.配置通道信息:	                               //ADC_SQRx寄存器、(ADC_SMPRx)寄存器
	ADC_RegularChannelConfig(ADC1,ADC_Channel_13,1,ADC_SampleTime_239Cycles5);
	ADC1,通道13,转换顺序为第1个,采样时间为239.5周期
6.使能ADC:ADC_Cmd();
7.ADC校准
	ADC_ResetCalibration(ADC1);				//校准
	while(ADC_GetResetCalibrationStatus(ADC1));
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1));
8.开启软件转换:ADC_SoftwareStartConvCmd()
9.等待转换完成,读取ADC的数值,也可用作中断处理,,依照ADC框图中的7中的标志位
  使用的是软件触发,不配置中断,不使用中断服务函数。
	while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
	return ADC_GetConversionValue(ADC1);
 注:ADC_DMACmd()                      //ADC-DMA使能,在运用DMA时使用,此时不使用上面的第9个步骤

具体功能查看以下连接文章

ADC数模转换

代码示例

#include <stdio.h>
#include "stm32f10x.h"
#include "mq_2.h"
#include "string.h"
#include "delay.h"

ADC adcnum;
//PA1

void mq_2_init()
{
	GPIO_InitTypeDef  GPIOInitStrucTure;
	ADC_InitTypeDef		ADCInitDef;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	
	GPIOInitStrucTure.GPIO_Pin=GPIO_Pin_1;		//A1
	GPIOInitStrucTure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIOInitStrucTure.GPIO_Mode=GPIO_Mode_IPD;
	GPIO_Init(GPIOA, &GPIOInitStrucTure);	
	
	ADCInitDef.ADC_ContinuousConvMode=ENABLE;									//是否连续转换								
	ADCInitDef.ADC_DataAlign=ADC_DataAlign_Right;							//右对齐
	ADCInitDef.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
	ADCInitDef.ADC_Mode=ADC_Mode_Independent;								//独立模式1
	ADCInitDef.ADC_NbrOfChannel=1;														//2个通道
	ADCInitDef.ADC_ScanConvMode=ENABLE;
	ADC_Init(ADC1,&ADCInitDef);										//ADC初始化

	ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);
	
	ADC_Cmd(ADC1,ENABLE);
	
	ADC_ResetCalibration(ADC1);				//校准
	while(ADC_GetResetCalibrationStatus(ADC1));
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1));
	
}



u32 get_value(void)
{
	u16 adc_value = 0;
	u8 i = 0;
	
	for(i = 0; i < 10; i++)
	{ 
		//开始转换
		ADC_SoftwareStartConvCmd(ADC1,ENABLE);
		
		//转换是否结束
		while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) != SET);
		
		adc_value += ADC_GetConversionValue(ADC1);//读ADC中的值
	}
	
	return adc_value / 10;//取样10次的平均值
}



void get_power()
{
	u16 ad = 0;
	float power;
	float mq_2num;
	
		ad = get_value();
	
		power=3.3 * ad /4096*2; 			//先读取电压值(电路图分压)
		mq_2num=(power - 0.3)/0.1 * 200;		//获取烟雾浓度的值
		printf("电压值:%f\r\n",power);	
		printf("mq_2的值为%f:",mq_2num);	
		delay_ms(1000);

}

电路原理图

求电压的数值:
ADC读取的电压值为 A0到接地的一半。
ADC / R38 =3.3V / (R36+R38)
在这里插入图片描述

参考资源链接:[单片机实现的智能家居安全报警系统](https://wenku.csdn.net/doc/ds44et1xsc?utm_source=wenku_answer2doc_content) 结合《单片机实现的智能家居安全报警系统》一书,我们将具体阐述如何结合DYP-ME003人体红外感应模块、18B20温度传感器和MQ_2烟雾传感器搭建一个简易的智能家居防火防盗报警系统。首先,你需要掌握单片机编程和传感器数据采集的基本原理。 系统构建步骤如下: 1. 设计系统硬件架构:选择适合的单片机(例如Arduino或STM32)作为系统核心。将DYP-ME003人体红外感应模块、18B20温度传感器和MQ_2烟雾传感器连接到单片机上。确保传感器的电源和信号线连接正确,同时留出接口用于LED显示和声光报警模块。 2. 编写程序代码:通过编程语言(如C/C++或Python),编写代码以初始化各个传感器,并设置适当的读取频率。利用18B20温度传感器实时监控环境温度,通过MQ_2烟雾传感器检测火灾前兆,同时DYP-ME003模块负责侦测异常人体活动。 3. 实现数据处理:在单片机上编写算法以判断传感器数据是否超出正常范围。例如,设定一个温度阈值或烟雾浓度阈值,当读取的数据显示温度过高或烟雾浓度过大时,系统应判断为火灾风险;同样地,如果DYP-ME003检测到人体活动,且无人在家时,应判定为潜在的非法入侵。 4. 配置报警机制:一旦上述条件触发,系统应立即启动声光报警机制,以提醒用户采取行动。你也可以添加发送手机短信或远程通知的功能,使报警信息能够及时传送到用户的移动设备上。 5. 测试与调试:完成搭建和编码后,进行系统测试。模拟不同的安全风险场景,如人为触发红外传感器、加热环境模拟高温或使用烟雾发生器测试MQ_2传感器,以确保报警系统能够正确响应,并进行必要的参数调整。 通过这个过程,你不仅能掌握单片机与传感器集成的方法,还能学会如何处理传感器数据,并将其转化为实际的安全防范措施。《单片机实现的智能家居安全报警系统》一书提供了详尽的项目实例和故障排除方法,能帮助你更好地理解和应用相关技术。 参考资源链接:[单片机实现的智能家居安全报警系统](https://wenku.csdn.net/doc/ds44et1xsc?utm_source=wenku_answer2doc_content)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饮食有节起居有常

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值