MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中

存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的

变化转换为与该气体浓度相对应的输出信号。

MQ-2气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。这种传

感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器

传感器电路板如图所示

电位计用于设置TTL电平输出端的阈值,当传感器感应到的烟雾浓度大于该阈值时,TTL输出低电平,平时为高电平,模块电路图如下所示

U1A是一个比较器,RP电阻越大,阈值越低,也就是说,顺时针调节电阻器,阈值降低,逆时针调节,阈值升高,AOUT输出的是模拟值,0-VCC

注意该传感器使用之前需要20s的预热时间

MQ12的驱动有两种,一是检测IO口,二是检测AD口的电压,电平检测就不用说了,说下AD检测

//初始化ADC

//这里我们仅以规则通道为例

//我们默认将开启通道0~3

void  Adc_Init(void)

{

ADC_InitTypeDef ADC_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE );   //使能ADC1通道时钟

RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M

//PA1 作为模拟通道输入引脚

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚

GPIO_Init(GPIOA, &GPIO_InitStructure);

ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式

ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式

ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐

ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目

ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器

ADC_Cmd(ADC1, ENABLE);         //使能指定的ADC1

ADC_ResetCalibration(ADC1); //使能复位校准

while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束

ADC_StartCalibration(ADC1);  //开启AD校准

while(ADC_GetCalibrationStatus(ADC1));  //等待校准结束

// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能

}

//获得ADC值

//ch:通道值 0~3

u16 Get_Adc(u8 ch)

{

//设置指定ADC的规则组通道,一个序列,采样时间

ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期

ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能

while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

return ADC_GetConversionValue(ADC1); //返回最近一次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);

delayMs(5);

}

return temp_val/times;

}

void Mq2Init(void)

{

Adc_Init();

}

//直接返回ADC的值

u16 GetMq2SingleValue(void)

{

return Get_Adc(ADC_Channel_1);

}

//多次获取平均值

u16 GetMq2AverageValue(u8 times)

{

return Get_Adc_Average(ADC_Channel_1,times);

}

#ifndef __MQ2_H

#define __MQ2_H

#include "stm32f10x.h"

#include "adc.h"

//初始化

void Mq2Init(void);

//获取MQ2的值

u16 GetMq2SingleValue(void);

//多次获取平均值

u16 GetMq2AverageValue(u8 times);

//使用PA1作为ADC通道转换,可以使用其他值

#endif

获取到ADC值之后通过与系统预设值进行比对就可以进行烟雾报警了

MQ-2烟雾传感器启动相关推荐

  1. artemis mq配置开机启动 (centos7)(artemis Init Script)

    参考activemq的:https://blog.csdn.net/u012249177/article/details/81322874?utm_medium=distribute.pc_relev ...

  2. Zipkin 基于MQ存 储链路信息至 MySQL

    RabbitMQ 最新版安装 (Linux环境) https://gblfy.blog.csdn.net/article/details/120498390 启动rabbitmq 队列是空的 数据库表 ...

  3. 企业实战01_Linux下安装ActiveMQ并设置开机启动

    文章目录 一.MQ常用命令 二.防火墙常用命令 三.MQ安装 3.1. 在root权限下操作,赋予目录权限 3.2. 给运行程序赋予可执行权限 3.3. 配置环境变量 四.MQ添加开机启动 4.1. ...

  4. IBM MQ 创建以及常见问题

    消息队列+发送队列+消息通道 接收通道名称与发送端的发送通道名称要一致,修改通道信息后要执行 start channle(chlname) 重启通道. 常用的MQ命令  66.0.42.240 用户 ...

  5. rocket mq 监听端口_如何使用Jmeter实现MQ数据的发送和接收?性能测试实战篇

    JMeter是性能测试中被普遍使用的一种工具,常用于压力测试.该工具具有丰富的扩展插件用以满足不同情况下性能测试的需求.消息队列(Message Queue)简称为MQ,作为目前的主流中间件,在很多软 ...

  6. 兔子mq框架_春天兔子MQ

    兔子mq框架 Spring RabbitMQ is the message broker based on Spring AMQP protocol implementation. Spring Ra ...

  7. ibm mq安装配置_在IBM Integration Bus v10和IBM MQ v8之间配置MQ连接

    ibm mq安装配置 在IBM Integration Bus v10之前,Integration节点依靠队列管理器来连接到IBM MQ. 如果Integration节点必须处理发送到队列管理器的消息 ...

  8. 【mq】从零开始实现 mq-09-消费者拉取消息 pull message

    前景回顾 [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]从零开始实现 mq-02-如何实现生产者调用消费者? [mq]从零开始实现 mq-03-引入 broker 中间人 [mq]从零 ...

  9. IBM MQ简单开发和应用

    IBM MQ经常被一些政府公共部门,银行等企业用来做数据传输和报文收发,在互联网应用的开发中较少见到,属于一种比较老旧的应用.这里以IBM Websphere MQ 7.5版本为例介绍一下MQ的的简单 ...

最新文章

  1. Nginx HTTP 负载均衡和反向代理
  2. linux 如何运行r脚本,Linux系统下如何debug R脚本
  3. 37条常用Linux Shell命令组合
  4. pt-table-checksum与pt-table-sync使用实践
  5. OC之OBJC2_UNAVAILABLE
  6. 安卓模拟器 Genymotion 安装
  7. java 参数内存释放_JNI创建变量和释放变量
  8. VMware NSX组件构建矩阵
  9. 谷歌大脑AutoML最新进展:不断进化的阿米巴网络
  10. linux emacs 快捷键,emacs常用快捷键
  11. 软件设计师历年真题及答案2009-2017
  12. jsonrpc4j android,jsonrpc-4j代码解析
  13. linux打开txt文件命令_Linux文件操作,这些命令可以搞定
  14. 学校计算机教学楼命名大全,给学校楼起名字(给教学楼起名字与内涵)
  15. 纪念三毛辞世20周年——《三毛经典语录》
  16. 锤子T1(Smartisan T1 4G)版刷成3G版,即sm705运行sm701的CM11 Android 4.4.4ROM 1
  17. Android手机投屏后没有声音,乐播投屏电视没有声音怎么办_乐播投屏电视没有声音手机有声音解决办法_3DM手游...
  18. Linux -- 手动配置静态IP
  19. 对比学习Contrastive Learning
  20. java 生产者消费者模式_聊聊并发(十)生产者消费者模式

热门文章

  1. 并不对劲的[Noi2008]道路设计
  2. matlab计算空间桁架,基于matlab的空间三维桁架结构受力分析通用程序设计
  3. 华为宿舍租金涨价 数千员工群情激昂
  4. 环信服务器发送消息ext,发送消息
  5. 荐书:《计算机视觉:模型、学习和推理》
  6. 《五轮书》和丰田生产方式
  7. python脚本,检测域名是否被注册
  8. 程序员眼睛的保护(爱护眼睛,你我做起)
  9. 双尺度与多尺度图像细节提升
  10. 删除linux后,修复windows的启动项:MBRFix工具