精华内容
下载资源
问答
  • mq2烟雾传感器stm32代码
    万次阅读 多人点赞
    2021-07-03 20:05:36

    MQ2烟雾传感器的使用

    ADC的使用

    电压与浓度的转换

    定时器的使用

    ADC的使用

    利用mq2传感器对气体进行检测,无非就是利用传感器内部的电路以及材料在不同气体环境下有着不同的电阻值,通过对电阻电压的采集来检测相应气体浓度的变化。这时我们就可以利用ADC来对外部传感器的电压值进行采集,ADC呢就是将连续变量的模拟信号转换为离散的数字信号。ADC部分大家不了解可以去详细了解一下,大佬们写的都很好。
    接下来是代码部分:
    首先对io口进行配置,再对ADC的模式进行配置。

    void Adc_Init()//初始化函数
    { 
     GPIO_InitTypeDef GPIO_Initstructre;     
     ADC_InitTypeDef ADC_InitStruct;
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOARCC_APB2Periph_ADC1,ENABLE)//使能时钟
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能io口
     GPIO_Initstructre.GPIO_Mode=GPIO_Mode_AIN; 
     GPIO_Initstructre.GPIO_Pin=GPIO_Pin_1;
     GPIO_Initstructre.GPIO_Speed=GPIO_Speed_50MHz;
     GPIO_Init(GPIOA,&GPIO_Initstructre);
     GPIO_SetBits(GPIOA,GPIO_Pin_1);
     
     RCC_ADCCLKConfig(RCC_PCLK2_Div6);//保证不超过14M
     ADC_DeInit(ADC1);//复位ADC1
     ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;//不使能连续扫描
     ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;//数据右对齐
     ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//软件触发
     ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;//独立模式
     ADC_InitStruct.ADC_NbrOfChannel = 1;
     ADC_InitStruct.ADC_ScanConvMode = DISABLE;//不使用扫描模式
     ADC_Init(ADC1,&ADC_InitStruct);
     ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1
     ADC_ResetCalibration(ADC1);//使能复位校准  
      
     while(ADC_GetResetCalibrationStatus(ADC1));//等待复位校准结束
     
     ADC_StartCalibration(ADC1);//开启AD校准
     
     while(ADC_GetCalibrationStatus(ADC1));	 //等待校准结束
    }
    

    然后是ADC电压采集的相关函数

    u16 Get_Adc(u8 ch)
    {
     ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);//ADC1,通道1,配置采集周期
    
     ADC_SoftwareStartConvCmd(ADC1,ENABLE);//软件复位
    
     while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//状态发生改变
    
     return ADC_GetConversionValue(ADC1);//返回值	
    
    }
    

    利用上一个函数的返回值进一步进行数据计算

    u16 Get_Adc_Average(u8 ch,u8 times)//两个入口参数,通道,取平均值的次数
    {
     u32 temp_val=0;
     u8 t;
     for(t=0;t<times;t++)
      {
       temp_val+=Get_Adc(ch);
       delay_ms(5);
      }
     return temp_val/times;
    
    }
    

    然后是对气体PPM的转换

    void MQ2_cumlate(float RS)
    {
    		R0 = RS / pow(CAL_PPM / 613.9f, 1 / -2.074f);
    }
    
    float MQ2_GetPPM(void)
    {   
    	  u16 adcx;
    	  adcx=Get_Adc_Average(ADC_Channel_1,30);//ADC1,取30次的平均值
          float Vrl = 3.3f * adcx / 4096.f;//3.3v的参考电压,4096份
    	  Vrl = ( (float)( (int)( (Vrl+0.005)*100 ) ) )/100;
          float RS = (3.3f - Vrl) / Vrl * RL;
    	  
          if(times<6) // 获取系统执行时间,3s前进行校准,用到了定时器
           {
    		  R0 = RS / pow(CAL_PPM / 613.9f, 1 / -2.074f);//校准R0
           } 
    	  float ppm = 613.9f * pow(RS/R0, -2.074f);
    
          return  ppm;
    }
    
    

    接下来是定时器部分的代码,这一部分主要是为了上方用到的校准

    void TIM3_Int_Init(u16 arr,u16 psc)
    {
    	 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitSture;
    	 NVIC_InitTypeDef NVIC_InitStructure;
    
    	 
         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//定时器3,时钟
    	
    	 TIM_TimeBaseInitSture.TIM_Period = arr;//自动装载值
    	 TIM_TimeBaseInitSture.TIM_Prescaler = psc;//预分频系数
    	 TIM_TimeBaseInitSture.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
    	 TIM_TimeBaseInitSture.TIM_ClockDivision = TIM_CKD_DIV1;
    	
    	 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitSture);//定时器3
     
         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//定时器3,更新中断,使能
    
    	 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
    	 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
    	 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
    	 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
    	 NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
    
         TIM_Cmd(TIM3,ENABLE);
    }
    
    void TIM3_IRQHandler(void)//中断函数,0.5秒中断一次
    {
    	if(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET)//判断状态
    	 { 
    		 TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中断待处理位
    		 times++;
    	 }
    }
    	
    	
    

    最后我们可以通过串口助手,或者显示屏幕将数据进行显示,MQ系列的传感器主要就是ADC和相应的浓度转换。

    电压值转化部分参考了以下博主的代码😁

    https://blog.csdn.net/qq_41422043/article/details/89138213?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7

    若有错误,请大家指出。😉😉😉

    更多相关内容
  • MQ-2气体传感器: 应用:适用于家庭或工厂的...3、代码使用KEIL 开发,当前在STM32F103C8T6运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。 4、技术服务:349014857@qq.com
  • MQ2烟雾传感器源码.zip

    2020-03-01 11:12:41
    基于STM32F030开发板的MQ2烟雾传感器开发。MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用...
  • 基于STM32烟雾传感器代码,通过ADC转换,提取MQ-2数据
  • 自己整理的stm32使用MQ-2烟雾传感器的资料,内含传感器的使用资料,以及整理的一些代码,(51的也有)代码大同小异,只不过量化方式不同。了解ADC即可,适合初学者使用。
  • MQ-2烟雾浓度传感器STM32F103)

    万次阅读 多人点赞 2021-03-01 22:29:05
    MQ-2烟雾传感器属于二氧化锡半导体气敏材料,属于表面离子式N型半导体。处于200~3000摄氏度时,二氧化锡表面吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少,从面使其电阻值增加。当与烟雾接触时...

    本实验是通过串口调试助手显示STM32F103C8T6采集到MQ-2传感器的电压值。

    一、 概述

    1. 简介

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

    2. 工作原理

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

    3. MQ-2特点

    1. MQ-2烟雾传感器对液化气、天然气、城市煤气灵敏度较高。
    2. MQ-2型传感器具有良好的重复性和长期的稳定性。初始稳定,响应时间短,长时间工作性能好。需要注意的是:在使用之前必须加热一段时间,否则其输出的电阻和电压不准确。
    3. 其检测可燃气体与烟雾的范围是100~10000ppm(ppm为体积浓度。 1ppm=1立方厘米/1立方米)
    4. 双路信号输出(模拟量输出和数字量输出)。
    5. 当气体浓度未超过设定阈值时,数字接口DO口输出低电平,模拟接口A0电压基本为0v左右;当气体影响超过设定阈值时,模块数字接口D0输出高电平,模拟接口A0输出的电压会随着气体的影响慢慢增大。

    二、 实验材料

    1. 最小系统STM32F10SC8T6。
    2. MQ-2烟雾浓度传感器。
    3. 杜邦线若干。

    三、 硬件连接

    模块引脚GPIO
    VCCVCC
    GNDGND
    D0NC(空)
    A0PA0

    注:A0:模拟量输出接口;D0:数字量开关接口(0/1)。

    四、 实现程序

    1、 GPIO初始化

    void ADC_Pin_Init(void)
    {
    	GPIO_InitTypeDef GPIO_InitStruct;
    	ADC_InitTypeDef ADC_InitStruct;
    	
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
    						| RCC_APB2Periph_ADC1,ENABLE);
    	
    	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
    	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    	GPIO_Init(GPIOA,&GPIO_InitStruct);
    	
    	ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;//单次转换
    	ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐
    	ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;//独立模式
    	ADC_InitStruct.ADC_NbrOfChannel = 1;//转换总数
    	ADC_InitStruct.ADC_ScanConvMode = DISABLE;//单通道扫描
    	ADC_Init(ADC1,&ADC_InitStruct);
    	
    	//转换通道 第几次转换 采样时间
    	ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);
    	
    	ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);
    	
    	ADC_Cmd(ADC1,ENABLE);
    }
    

    2、 数据转换

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

    3、 主程序

    int main(void)
    {
    	u16 ad = 0;
    	
    	Sys_Delay_Init();
    	Usart1_Pin_Init(115200);
    	printf("初始化成功\r\n");
    	ADC_Pin_Init();
    	while(1)
    	{
    		ad = ADC_Trans();
    //		printf("电压值:%f\r\n",3.3/4095*ad);	//实际电压值	
    		printf("%.2f\r\n",ad * 99 / 4096.0);//把AD值转换成百分比0~99
    		delay_ms(1000);
    
    	}
    }
    

    五、 实验效果

    串口工具会一直打印电压值或百分比。
    在这里插入图片描述

    完整程序及相关资料:
    链接:https://pan.baidu.com/s/1G-Xl3c6kYr9eU48Gt0EKAg
    提取码:9owd

    如有错误还望指出,谢谢!

    展开全文
  • 基于MQ2烟雾传感器STM32F103程序,通过测试MQ2在烟雾中,转换得到电压值,通过串口显示在串口调试助手上
  • 代码是基于STM32F407系列单片机,主要是通过配置ADC采样,获得MQ-2的数字量,从而达到监测的效果。
  • stm8s系列接受烟雾传感器的数据,并将其发送到OLED显示器进行显示用
  • 文件包括利用Keil5编写的MQ-2烟雾传感器代码还有其他的有关资料介绍,下载到STM32单片机上可以使用,同时已经配置好了串口,可以结合ZigBee或者蓝牙与电脑进行通信;
  • 基于STM32的气体传感器实验,基于STM32MQ-2烟雾气体传感器实验 STM32,气体传感器,源程序 ,代码,带说明。 程序,资料,接线,说明,齐
  • 代码是基于stm32平台,通过ADC读取MQ-2烟雾传感器代码,可直接修改引脚使用,适合初学者。
  • STM32F103C8T6通过串口读取MQ-2烟雾传感器数据,可通过串口助手实时打印数据
  • MQ-2烟雾传感器模块以及TTL输出测试程序和模拟量测试参考程序以及MQ-2开发文档。 经过亲自测试,实测程序可用。
  • stm32f407ze串口usart连接Z-MQ-1,带传感器使用说明书。原工程用keil5运行,用flymcu下载,串口调试助手接收烟雾传感器数值。
  • stm32f407使用温湿度,光照,烟雾传感器,以及使用WiFi进行传输数据,温湿度的引脚为pg9,光照的为pf7,烟雾的为pa5
  • CC2530传感器组网实验代码教程 烟雾传感器.rar
  • 基于STM32环境检测DHT11温湿度传感器+MQ-2烟雾传感器+光敏电阻(包含原理图源程序文件)
  • 电子-MQ2烟雾传感器模块.zip,单片机/嵌入式STM32-F0/F1/F2
  • 基于STM32的智能家居项目:通过lcd采集温湿度和MQ-2烟雾传感器的数据实时显示到0.9寸液晶屏上,并且当温度或者烟雾浓度达到阈值蜂鸣器报警
  • 基于智能小车的安卓与STM32的keil代码。实现wifi与安卓端的数据传输。开发板可采集温度湿度烟雾浓度,开发板倾斜角度等功能,代码清晰简单,注释完整。
  • 一份用STM32实现MQ-5烟雾模块和DS18b20的数据读取,并在OLED上显示,超过设定限制,实现语音报警。
  • STM32单片机WIFI物联网可燃气烟雾报警监控系统MQ4MQ2,关键词:STM32单片机物联网可燃气报警,STM32单片机物联网可燃气烟雾报警

    实践制作DIY- GC0019-WIFI物联网可燃气烟雾报警监控系统

    一、功能说明:

    基于STM32单片机设计-WIFI物联网可燃气烟雾报警监控系统

    • 功能介绍:

    1.基于STM32F103C系列单片机,继电器模拟阀门,MQ-2烟雾传感器,MQ-4然气传感器,LCD1602显示器,ESP8266-WIFI模块,蜂鸣器

    2.有安卓手机APP通过WIFI连接值电路板WIFI模块实现数据交互。

    3.有手动和自动模式,手动模式下可以通过APP开关电磁阀,自动模式下烟雾、燃气任意一个值超过设定值则报警关闭继电器。不超过则打开继电器。

    4.特殊功能,自动模式下,也可以通过APP关闭电磁阀,但是不可以打开电磁阀。

    5.特殊功能,手动模式下,烟雾、燃气任意一个值超过设定值则报警关闭继电器并且报警。但是正常后不会自动打开继电器。三、详情介绍:

    视频讲解:哔哩哔哩搜索UP主“爱搞单片机”在其空间搜索关键词WIFI物联网可燃气烟雾报警监控系统观看该视频详解讲解

     

    功能演示操作

    这是一款基于STM32单片机WIFI物联网可燃气烟雾报警监控系统采用STM32F103C系列单片机,继电器模拟阀门,MQ-2烟雾传感器,MQ-4然气传感器,LCD1602显示器,ESP8266-WIFI模块,蜂鸣器采用安卓手机APP通过WIFI连接值电路板WIFI模块实现数据交互。有手动和自动模式,手动模式下可以通过APP开关电磁阀,自动模式下烟雾、燃气任意一个值超过设定值则报警关闭继电器。不超过则打开继电器。特殊功能,自动模式下,也可以通过APP关闭电磁阀,但是不可以打开电磁阀。特殊功能,手动模式下,烟雾、燃气任意一个值超过设定值则报警关闭继电器并且报警。但是正常后不会自动打开继电器。

    具体测试方法观看视频详细介绍。。。

     

    了解更多尽请观看视频讲解。。。

    展开全文
  • 基于STM32F030开发板的MQ7传感器开发。MQ-7气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。采用高低温循环检测方式低温(1.5v加热)检测一氧化碳,高温(5.0v加热)清洗低温时吸附的杂散...
  • MQ2烟雾传感器

    万次阅读 多人点赞 2019-04-09 10:59:56
    1、MQ-2气体传感器所使用的气敏材料是在...MQ-2气体传感器可用于家庭和工厂的气体泄漏检测,适宜对液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等的探测,对天然气和其它可燃蒸汽的检测也很理想。这种传感器可检测多...

     1、MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。MQ-2气体传感器可用于家庭和工厂的气体泄漏检测,适宜对液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等的探测,对天然气和其它可燃蒸汽的检测也很理想。这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器。

    2、MQ-2标准工作条件:

     MQ-2传感器原理图:

     3、MQ-2烟雾传感器模块特点:

    • 具有信号输出指示。
    • 双路信号输出(模拟量输出及TTL电平输出)。
    • TTL输出有效信号为低电平。(当输出低电平时信号灯亮,可直接接单片机)
    • 模拟量输出0~5V电压,浓度越高电压越高。
    • 对液化气,天然气,城市煤气有较好的灵敏度。
    • 结果受温湿度影响。

    4、MQ-2灵敏度特性曲线:

     

    我们以LPG曲线为例,根据曲线图可以列出部分Rs/R0与ppm的对应值,如下:

    Rs/R0

    1.651428

    1.437143

    1.257143

    1.137143

    1

    0.574393

    0.415581

    0.305119

    0.254795

    ppm

    200

    300

    400

    500

    600

    2000

    4000

    7000

    10000

    根据以上对应值可以求出Rs/R0与ppm的计算公式,如下(使用Excel生成的公式):

                                                                 ppm = 613.9f * pow(RS/R0, -2.074f)

    ppm:为可燃气体的浓度。

    VRL:电压输出值。

    Rs:器件在不同气体,不同浓度下的电阻值。

    R0:器件在洁净空气中的电阻值。

    RL:负载电阻阻值。

    特别提醒:传感器通电后,需要预热20s左右,测量的数据才稳定,传感器发热属于正常现象,因为内部有电热丝,如果烫手就不正常了。

    5、Sensor_Smoke.c文件

    #define CAL_PPM 20  // 校准环境中PPM值
    #define RL			5		// RL阻值
    static float R0; // 元件在洁净空气中的阻值
    
     // 传感器初始化
    void MQ2_Init(void)
    {
        GPIO_InitTypeDef GPIO_InitStruct; // 定义 GPIO 初始化结构体变量
        ADC_InitTypeDef ADC_InitStruct; // 定义 ADC初始化结构体变量
        DMA_InitTypeDef DMA_InitStruct; // 定义DMA初始化结构体变量	
    
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE); // 使能 GPIOA 时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); // 使能 ADC1 时钟
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // 使能DMA时钟
    	
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN; // 模拟输入
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;	// ADC通道引脚
        GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; // 上拉
        GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化
    	
        ADC_DeInit(ADC1);  // 复位 ADC
        ADC_StructInit(&ADC_InitStruct); // 使用默认值填充 ADC_InitStruct成员
        ADC_InitStruct.ADC_ContinuousConvMode = ENABLE; // 连续转换模式
        ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; // 数据对齐
        ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; // 禁止触发检测,使用软件触发
        ADC_InitStruct.ADC_ScanDirection = ADC_ScanDirection_Upward; // 启动向上扫描模式 (from CHSEL0 to CHSEL17)
        ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b; // 12 位模式
        ADC_Init(ADC1,&ADC_InitStruct); // ADC 初始化
    	
        ADC_ChannelConfig(ADC1,ADC_Channel_0,ADC_SampleTime_239_5Cycles); // 配置ADC注入通道0及周期采样时间
    	
        ADC_GetCalibrationFactor(ADC1);  // 校准 ADC
        ADC_Cmd(ADC1,ENABLE); // ADC 使能 	
    	
        DMA_DeInit(DMA1_Channel1); // 复位
        DMA_StructInit(&DMA_InitStruct);	
        DMA_InitStruct.DMA_BufferSize = 1; // 整体的数据个数
        DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC; // 指定外设为发送源
        DMA_InitStruct.DMA_M2M = DMA_M2M_Disable; // 关闭两个存储区互相访问
        DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t)&ADC_Value; // 存储区基地址
        DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; // 存储区每次接收两个字节
        DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable; // 存储区地址自增
        DMA_InitStruct.DMA_Mode = DMA_Mode_Circular; // 开启循环模式
        DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; // 外设地址
        DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // 外设每次传输两个字节
        DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外设地址不自增
        DMA_InitStruct.DMA_Priority = DMA_Priority_High; // 设置通道转换优先级
        DMA_Init(DMA1_Channel1, &DMA_InitStruct); // 初始化
    	
        ADC_DMARequestModeConfig(ADC1,ADC_DMAMode_Circular); // 使能ADC的DMA循环转换模式
    	
        DMA_Cmd(DMA1_Channel1, ENABLE); //DMA 使能	
        ADC_DMACmd(ADC1, ENABLE); // ADC DMA 使能	
        ADC_StartOfConversion(ADC1); // 开始 ADC1 转换
    
    }
    /********************************************
     * 1.651428	          200               *
     * 1.437143	          300               *
     * 1.257143	          400               *
     * 1.137143	          500               *
     * 1		          600               *
     * 0.928704	          700               *
     * 0.871296	          800               *
     * 0.816667	          900               *
     * 0.785714	          1000              *
     * 0.574393	          2000              *
     * 0.466047	          3000              *
     * 0.415581	          4000              *
     * 0.370478	          5000              *
     * 0.337031	          6000              *
     * 0.305119	          7000              *
     * 0.288169	          8000              *
     * 0.272727	          9000              *
     * 0.254795	          10000             *
     *                                      *
     * ppm = 613.9f * pow(RS/RL, -2.074f)   *
     ***************************************/
    
     // 传感器校准函数
    void MQ2_PPM_Calibration(float RS)
    {
        R0 = RS / pow(CAL_PPM / 613.9f, 1 / -2.074f);
    }
     
     // MQ2传感器数据处理
    float MQ2_GetPPM(void)
    {
        float Vrl = 3.3f * ADC_Value / 4095.f;
        float RS = (3.3f - Vrl) / Vrl * RL; 
        if(boot_time_ms < 3000) // 获取系统执行时间,3s前进行校准
        {
    	MQ2_PPM_Calibration(RS);
        }
        float ppm = 613.9f * pow(RS/R0, -2.074f);
        return  ppm;
    }
    

    6、Sensor_human.h文件

    #ifndef _SENSOR_SMOKE_H_
    #define _SENSOR_SMOKE_H_
    
    #include "stm32f0xx.h"
    	
    void   MQ2_Init(void);
    float MQ2_GetPPM(void);
    
    #endif
    
    

    7、主函数

    int main()
    {
        MQ2_Init(); // 传感器初始化
        USART1_Init(); // 串口初始化
        SYSTICK_Init(1); // 滴答定时器初始化
        while(1)
        {
    	printf("smoke:%.2f ppm\n", MQ2_GetPPM());//计算烟雾浓度并通过串口打印
    	SYSTICK_DelayMs(100);
        }
    }

    源码下载链接:https://download.csdn.net/download/qq_41422043/12202498

    展开全文
  • 可燃气体检测,没有测到可燃气体时,开发板LED灯亮,MQ-2烟雾传感器上的LED灯灭,表示安全;检测到可燃气体,MQ-2烟雾传感器上的LED灯亮,开发板上的LED灯灭。表示危险。
  • 智能安全辅助驾驶系统 、STM32MQ3酒精传感器、HAL库、ADC、外部中断、USART
  • 代码stm32f103使用烟雾mq2,火焰传感器,继电器可以外控电器,通过检测烟雾浓度和是否有火焰来判断断开和闭合继电器
  • 使用32单片机和烟雾传感器模块检测空气中的烟雾浓度,并完成报警。实验使用MQ-2模块的DO输出端,通过读取I/O口电平判断是否检测到烟雾的存在。
  • [单片机][STM32][HAL][MQ2]烟雾报警

    千次阅读 2020-04-12 20:15:09
    /****************** 函数名:Mq2_State 功能:获取MQ2烟雾报警模块的状态 *******************/ void Mq2_State(void) { if(HAL_GPIO_ReadPin(MQ_2_GPIO_Port, MQ_2_Pin) == GPIO_PIN_RESET) //读取引脚电平是否为...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 221
精华内容 88
热门标签
关键字:

mq2烟雾传感器stm32代码