当前位置:网站首页>【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
【MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用】
2022-08-02 03:28:00 【WENJIE科技】
MQ-2 可燃气体和烟雾传感器与 Arduino 配合使用
前言
如今,传感器通过检测烟雾、火灾或气体并向相关人员发出警报,在许多不同的公寓、家庭和办公室的安全和安保中发挥着重要作用。这就是为什么在今天的文章中,我们将讨论一种常用于烟雾和气体探测器的传感器,即MQ-2 可燃气体和烟雾传感器。不要被名字骗了,因为这个传感器不仅可以检测气体或烟雾,还可以检测液化石油气、酒精、丙烷、氢气、甲烷和一氧化碳。
MQ-2 气体传感器引脚
MQ-2 气体检测传感器模块有四个引脚 VCC、GND、Aout 和 Dout,可用于从传感器中获取需要的信息,MQ-2 气体检测传感器的引脚分配如下:VCC==》是气体检测传感器的电源引脚,可连接到 5V 电源。
GND==》是电路板的接地引脚,它应该连接到 Arduino 的接地引脚。
DO==》是电路板的数字输出引脚,输出低表示大气中不存在气体或烟雾,输出高表示大气中存在气体或烟雾。
AO==》是电路板的模拟输出引脚,它将为我们提供一个模拟信号,该信号将根据检测到的气体水平在 vcc 和地之间变化。
MQ-2 气体和烟雾传感器模块组成
在大多数Arduino 项目中,MQ-2 传感器用于检测危险或易燃气体或烟雾,因此该传感器在初学者中很受欢迎。这些也是低成本、易于使用的传感器,具有广泛的感应范围,可以通过微调来调整灵敏度。MQ-2 气体传感器的零件标记如下-
与所有其他基本传感器模块一样,这款 MQ-2 气体和烟雾传感器模块有四个引脚,其中两个用于 VCC 和 Gnd,另外两个可以同时输出模拟和数字数据。为了给电路供电,我们使用了 arduino 的 5V 引脚,因为该模块的工作电压范围为 5V,容差为 ±0.1%。如上图所示,模块有两个板载 LED。电路板通电时电源 LED 亮起,达到电位器设置的触发值时 Dout LED 亮起。该板还具有板载比较器运算放大器,负责将来自气体传感器的输入模拟信号转换为数字信号。我们还有一个灵敏度调整微调器,我们可以调整设备的灵敏度。
MQ-2 气体传感器模块如何工作?
MQ-2 气体传感器需要一个加热元件才能正确检测可燃玻璃,但靠近可燃气体的加热元件可能是灾难性的,因此该传感器采用由两层不锈钢薄层制成的防爆网络制造网格,如下图所示。加热元件放置在这个不锈钢网内这种网状结构还提供了对灰尘和其他悬浮物的抵抗力,它只让大气中的气态元素进入。如果我们打开传感器,我们可以看到传感器由两个主要元素组成。第一个是由镍铬合金丝制成的加热元件,另一个是由带有二氧化锡涂层的铂丝制成的传感元件。现在我们不希望您切割和损坏您的传感器,所以我们已经为您做到了,下图显示了从实际传感器上取下的网格
移除网格后,传感器看起来像这样。正如您在上图中所见,我们已经切割了不锈钢网并将其放置在传感器的一侧。现在您也可以看到我们之前谈到的传感元件。传感器的星形引脚是由于实际传感和加热元件的结构以及它连接到传感器的六个腿而形成的。您还可以看到由电木制成的传感器的黑色底座,以提高导热性。
MQ-2 气体传感器的预热时间:
当您使用这种类型的气体传感器时,该设备需要一段预热时间或稳定时间才能正常工作。如果您查看设备的数据表,您会看到它说需要 24 小时的预热时间。那么,这是否意味着它需要24小时不间断的通电才能使用呢?
这个问题的明显答案是一个很大的NO。它只是意味着要获得数据表中显示的典型性能数据,您需要连续运行 24 小时。它是在他们的实验室 24 小时后测量的。因此,如果您想在规格范围内,您必须遵守 24 小时预热时间。鉴于传感器尺寸小,热平衡几乎肯定会在 30 分钟内达到。并且可能只需要几分钟就可以达到数据表提供的数据的百分之几。
仅当您想要非常准确地测量气体浓度时,24 小时预热时间才重要,并且您还必须对传感器进行良好校准,以及一些补偿其他环境因素(如温度、湿度等)的方法。
MQ-2 气体传感器既可用于检测气体,也可用于测量 PPM 中的丁烷和氢气水平。请注意,检测气体和测量其在 PPM 中的浓度是完全不同的两件事。本文主要侧重于检测气体水平及其浓度的增加。如果您想精确计算 PPM 中的气体水平,则程序会有所不同,但我们也会稍微触及它。
如何使用 MQ-2 气体传感器检测 LPG、丁烷或氢气正如您在上面的 gif 中看到的那样,我们有一个装有 LPG 气体的罐子,当喷射气体时,周围的气体浓度会增加,而当我们第二次和第三次喷射气体时,气体浓度会再次增加。当气体浓度增加时,传感器的输出电压也会增加,您可以在万用表中观察到这一点。当它达到某个阈值(可以通过电位器设置)时,模块上的绿色 LED 会亮起。您可以在我们为演示而附加的模块的背面图像中观察到这一点。
如何使用 MQ-2 传感器测量 PPM 中的 LPG、丁烷或氢气浓度?
这是一个非常精确的传感器,经过校准可以测量大气中存在的特定气体的 PPM,为此,您首先需要了解MQ-2 气体传感器的灵敏度特性,您可以在数据表中找到它,它看起来如下所示。在对数图中,RS 是特定气体存在期间的传感电阻。而 R0 是洁净空气中的感应电阻。该传感器设计用于检测 H2、LPG、CH4、CO,因此该传感器电阻将根据大气中 H2 或 LPG 的浓度而变化。
让我们以粉红色的 LPG 曲线为例,看看我们如何计算曲线的斜率,因为让我们从大约 200 和 1.8 的 X 和 Y 坐标开始 所以,对数的第一个数据点比例为 (log200, log2),即 (2.3,0.0.255)。结束曲线的点是 X1 和 Y1,即 1000 和 0.18 变为(log1000,log0.18),因此变为(4,-0.744)。为了得到曲线的斜率,公式为
=(Y1-Y)/(X1-X)
= (-0.744 - 0.255) / (4 - 2.3)
=-0.587
MQ-2 可燃气体传感器模块常见问题
如何选择气体传感器?
市场上有许多不同类型的气体和烟雾传感器。要选择一个,您需要参考其数据表并检查该特定传感器是否满足您的要求。
我可以使用 MQ-2 气体传感器检测哪些类型的气体?
如果您查看设备的数据表,您会发现该传感器可以测量许多不同类型的气体,例如液化石油气 (LPG)、 甲烷 (CH4)、一氧化碳 (CO)、酒精、烟雾 (CO2)和丙烷但是这个传感器对氢气很敏感。
什么是气体的 ppm?
百万分之几或“ppm”通常用作浓度的分数测量单位。例如,2% 的甲烷(分子)浓度意味着每 100 个空气分子中有 2 个是甲烷。同样,2 ppm 的甲烷浓度意味着每 100 万个空气分子中有 2 个是甲烷。
MQ-2 可以检测二氧化碳吗?
对这个问题的简短回答是肯定的,它可以检测二氧化碳。但在使用此传感器进行任何项目之前,请参阅模块的数据表以了解测量 CO2 所需的所有外部参数和条件。
MQ-2 和 MQ-5 有什么区别?
MQ-2 可以检测高达 20000 ppm 的甲烷 (CH4),而 MQ5 只能检测高达 10000 ppm 的甲烷 (CH4)。
这个气体传感器是模拟的还是数字的?
市场上可用的大多数气体传感器大多是模拟的,但它可以通过运算放大器 IC 和少数数字元件制成数字。您可以查看下面的示意图以获得更多说明。
MQ-2 气体传感器模块的内部原理图
MQ-2 气体和烟雾检测传感器模块的电路图如下所示。这个模块的原理图非常简单,需要一些组件来构建。如果您急于构建此电路,下面显示的原理图将派上用场-在原理图中,我们有一个 LM393 运算放大器,它是一种低功耗低失调电压运算放大器,可以由 +5V 电源供电。但是用 3.3V 为电路供电不是一个选项,因为这个 MQ-2 传感器的最小工作电压是 5V。该运算放大器的主要工作是将输入的模拟信号转换为数字信号。除此之外,我们还有一个板载 10K 电位器,用于调节 MQ-2 气体传感器模块的灵敏度或模块的触发电压。除此之外,我们还有两个 LED。第一个是电源 LED,另一个是触发 LED。电路板通电时电源 LED 亮起,达到某个设定阈值时触发 LED 亮起。最后,我们有两个去耦电容器,用于降低电路板中的噪声。
Arduino UNO -MQ-2 可燃气体传感器 - 连接图
现在我们已经完全了解了 MQ-2 气体传感器的工作原理,我们可以将所有必需的电线连接到 Arduino uno。这部分文章将分为两部分,一个显示模拟输出,另一个显示数字输出。让我们从模拟电路开始
要使用传感器,我们首先需要为传感器供电,因为我们使用的是 Arduino UNO 板的 5V 和 GND 引脚,并且我们将传感器的输出引脚连接到 Arduino 的 A0 引脚。如上图所示,我们将一个 LED 连接到 Arduino 的数字引脚 6,模拟引脚连接到 arduino 的 A0 引脚,接地引脚在 LED 和传感器之间是通用的。我们将对Arduino 进行编程,以便 LED 的亮度将根据大气中存在的气体浓度而变化。
Arduino 代码
Arduino mq-2 气体传感器模块的代码非常简单易懂。我们只是从传感器中读取模拟数据,并根据接收到的数据改变 LED 的亮度。请记住,我们只处理来自传感器的模拟数据,您可以看到模块中的板载 LED 亮起的数字数据。
我们通过声明两个宏来初始化我们的代码,第一个是用于连接 LED 的 LED,第二个是用于读取传感器数据的 sensorPin。
// Sensor pins pin D6 LED output, pin A0 analog Input
#define ledPin 6
#define sensorPin A0
接下来,我们有我们的setup()函数。在 setup 函数中,我们用 9600 波特初始化串口。我们还将 ledPin 设置为输出,并将引脚设为低电平。这样,引脚将不会浮动并打开 LED。
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
}
接下来,我们有我们的loop()函数,在循环函数中,我们在串行监视器窗口上打印“模拟输出:”作为文本,然后我们在Serial.println()函数中调用 readSensor() 函数,这样一旦readSensor ()函数被执行,它返回数据并打印在串行监视器窗口上,
void loop() {
Serial.print("Analog output: ");
Serial.println(readSensor());
delay(500);
}
最后,我们有自定义的readSensor()函数,它返回通过 Arduino 的 A0 引脚读取的模拟值。在该函数的第一行,我们声明并定义了一个名为 sensorValue 的变量,我们将通过 A0 读取的原始数据放入 Arduino 中。该数据为 10 位格式,范围为 0 -1023,以便将 10 位数据转换为 8 位数据。这就是我们使用 map 函数的原因,一旦 map 函数输出数据,我们就会启动另一个变量 outputValue 并将映射的数据放入该变量中。最后,我们使用了Arduino内置的analogWrite(ledPin, outputValue)函数来生成一个PWM信号,该信号与arduino的ADC读取的输入数据成正比
// This function returns the analog data to calling function
int readSensor() {
unsigned int sensorValue = analogRead(sensorPin); // Read the analog value from sensor
unsigned int outputValue = map(sensorValue, 0, 1023, 0, 255); // map the 10-bit data to 8-bit data
if (outputValue > 65)
analogWrite(ledPin, outputValue); // generate PWM signal
else
digitalWrite(ledPin, LOW);
return outputValue; // Return analog moisture value
}
注意:请注意,代码是这样编写的,当达到一定值后,led 会触发,但如果您的应用程序需要关闭此功能,那么您只需删除if…else中的模拟写入功能即可陈述。
MQ-2 气体传感器模块的工作
下面的 gif 显示了工作中的 MQ-2 气体传感器。一开始,你可以看到面包板上的 LED 强度很低,但是当锅里加一点水时,LED 的强度会增加,然后模块的板载 LED 也会亮起。
完整代码
// Sensor pins pin D6 LED output, pin A0 analog Input
#define ledPin 6
#define sensorPin A0
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
}
void loop()
{
Serial.print("Analog output: ");
Serial.println(readSensor());
delay(500);
}
// This function returns the analog data to calling function
int readSensor()
{
unsigned int sensorValue = analogRead(sensorPin); // Read the analog value from sensor
unsigned int outputValue = map(sensorValue, 0, 1023, 0, 255); // map the 10-bit data to 8-bit data
if (outputValue > 65)
analogWrite(ledPin, outputValue); // generate PWM signal
else
digitalWrite(ledPin, LOW);
return outputValue; // Return analog moisture value
}
边栏推荐
猜你喜欢
ontop-vkg 学习1
OpenCore 黑苹果安装教程
Larave 自定义公共函数以及引入使用
VS2017报错:LNK1120 1 个无法解析的外部命令
Windows下MySQL数据库报“ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost:8000‘ (10061)”错误解决
解决flex布局warp自动换行下最后一行居中问题
Dcat Admin 关闭代码生成器 登录指定地址
保证接口数据安全的10种方案
Temporal action localization in untrimmed videos via Multi-stage CNNs SCNN论文阅读笔记
阿里技术官手码12W字面试小册
随机推荐
Temporal Segment Networks:Towards Good Practices for Deep TSN论文精读笔记
3D建模作品
Out of memory error on GPU 0. Cannot allocate xxxGB memory on GPU 0, available memory is only xxx
机器学习预备知识
Laravel 验证唯一时排除修改时的数据
面试知识点整理:Skia 架构的场景渲染
ontop-vkg 学习1
关于我的项目-实现一个数据库~
mysql 原生语句点滴学习记录
Gradle源码解析:生命周期的三个阶段
关于我的专利、软著~
关于我的大创、论文~
保证接口数据安全的10种方案
关于我的项目-微信公众号~
18张图,直观理解神经网络、流形和拓扑
Vision Transformer(ViT)论文精读和Pytorch实现代码解析
帧动画和补间动画的使用
【一句话攻略】彻底理解JS中的回调(Callback)函数
无源域适应(SFDA)方向的领域探究和论文复现(第二部分)
RecyclerView使用和原理解析