详解MQ2气体传感器的工作原理以及与Arduino开发板的连接方式
通过使用MQ2气体传感器模块,让您的下一个Arduino项目感知气体。它是一种多功能传感器,可以检测空气中的液化石油气、烟雾、酒精、丙烷、氢气、甲烷和一氧化碳浓度。
这使得MQ2气体传感器模块成为构建室内空气质量监测系统、呼气酒精测试仪或早期火灾探测系统的绝佳选择。
MQ2气体传感器
MQ2传感器是MQ传感器系列中使用最广泛的传感器之一。它是一种 MOS(金属氧化物半导体)传感器。 金属氧化物传感器也称为化学电阻器,因为传感是基于传感材料暴露于气体时电阻的变化。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-53.png)
MQ2气体传感器工作在5V,功耗约为800mW。 它可以检测浓度范围为200至10000ppm的液化石油气、烟雾、酒精、丙烷、氢气、甲烷和一氧化碳。
MQ2气体传感器内部结构
MQ2是一个加热器驱动的传感器。 因此,它覆盖着两层被称为“防爆网”的精细不锈钢网。 它确保传感器内部的加热元件不会因为我们感应的是易燃气体而引起爆炸。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-54.png)
它还可以保护传感器并过滤掉悬浮颗粒,只允许气态元素通过腔室。镀铜夹紧环将网固定到其余部分。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-55.png)
移除外网后,传感器看起来像这样。 传感元件和六个延伸到胶木底座之外的连接腿形成星形结构。六个引线中的两个 (H) 负责加热传感元件,并通过镍铬线圈(一种众所周知的导电合金)连接在一起。
其余四根信号导线(A 和 B)用铂丝连接。 这些电线连接到传感元件的主体,并传递流过传感元件的电流的微小变化。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-56.png)
管状传感元件由氧化铝 (AL2O3) 基陶瓷和二氧化锡涂层 (SnO2) 制成。 二氧化锡是最重要的材料,因为它对可燃气体很敏感。 另一方面,陶瓷基板提高了加热效率,确保传感器区域持续加热到工作温度。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-57.png)
总而言之,加热系统由镍铬线圈和氧化铝基陶瓷组成,而传感系统由铂丝和二氧化锡涂层组成。
MQ2气体传感器模块硬件概述
MQ2气体传感器使用简单,具有两种不同的输出。它不仅提供了可燃气体存在的二进制指示,而且还提供了它们在空气中浓度的模拟表示。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-58.png)
传感器的模拟输出电压(在 A0 引脚处)与烟雾/气体的浓度成比例变化。 浓度越高,输出电压越高; 浓度越低,输出电压越低。 下面的动画显示了气体浓度和输出电压之间的关系。
![](https://www.geediy.net/wp-content/uploads/2024/06/104520jqmm4m8qq03z10jm.gif)
该模拟信号由LM393高精度比较器数字化,并在数字输出 (D0) 引脚提供。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-60.png)
该模块包括一个电位器,用于调节数字输出 (D0) 的灵敏度。 您可以使用它来设置一个阈值,以便当气体浓度超过阈值时,模块输出低电平,否则输出高电平。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-61.png)
此外,该模块还有两个LED。当模块通电后电源LED亮起,当气体浓度超过阈值时状态LED亮起。
MQ2气体传感器模块的引脚排列
现在让我们看一下引脚排列。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-62.png)
VCC 为模块供电。将它连接到Arduino的5V输出。
GND 是接地引脚。
D0 表示存在可燃气体。当气体浓度超过阈值时,D0 变为低电平,否则变为高电平。
A0 产生与气体浓度成正比的模拟输出电压,因此浓度越高,电压越高,浓度越低,电压越低。
校准MQ2气体传感器
由于MQ2是一个加热器驱动的传感器,如果长时间存放,传感器的校准可能会漂移。
长时间存放后首次使用时,传感器必须充分预热24-48小时以确保最大精度。
如果最近使用过传感器,则只需5-10分钟即可完全预热。 在预热期间,传感器读数通常很高,然后逐渐降低直到稳定。
实验1 – 使用模拟输出 (A0) 测量气体浓度
在第一个实验中,我们将读取模拟输出以确定气体的浓度并查看它是否在可接受的范围内。
硬件接线
让我们将MQ2气体传感器连接到Arduino开发板。
首先将VCC引脚连接到Arduino的5V引脚,将GND引脚连接到Arduino的接地引脚。最后,将模块的A0输出引脚连接到Arduino上的模拟引脚#0。
下图显示了接线。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-63.png)
找到阈值
要确定气体浓度是否在可接受的范围内,您需要记录传感器在暴露于各种烟雾/气体时的输出值。
只需运行下面的草图并获取读数。
#define MQ2pin 0
float sensorValue; //variable to store sensor value
void setup() {
Serial.begin(9600); // sets the serial port to 9600
Serial.println("MQ2 warming up!");
delay(20000); // allow the MQ2 to warm up
}
void loop() {
sensorValue = analogRead(MQ2pin); // read analog input pin 0
Serial.print("Sensor Value: ");
Serial.println(sensorValue);
delay(2000); // wait 2s for next reading
}
运行草图时,您应该会看到类似于以下内容的读数:
● 在没有烟雾/气体的情况下(大约 100)
● 存在烟雾/气体的情况下(约 400)
![](https://www.geediy.net/wp-content/uploads/2024/06/image-64.png)
此测试可能需要反复试验。 获得读数后,您可以将它们用作触发动作的阈值。
Arduino代码
下面的草图确定气体浓度是否在可接受的范围内。
* Change the threshold value with your own reading */
#define Threshold 400
#define MQ2pin 0
float sensorValue; //variable to store sensor value
void setup() {
Serial.begin(9600); // sets the serial port to 9600
Serial.println("MQ2 warming up!");
delay(20000); // allow the MQ2 to warm up
}
void loop() {
sensorValue = analogRead(MQ2pin); // read analog input pin 0
Serial.print("Sensor Value: ");
Serial.print(sensorValue);
if(sensorValue > Threshold)
{
Serial.print(" | Smoke detected!");
}
Serial.println("");
delay(2000); // wait 2s for next reading
}
如果一切正常,您应该会在串口监视器上看到类似的内容。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-66.png)
实验2 – 使用数字输出 (D0) 检测烟雾/气体的存在
在第二个实验中,我们将使用数字输出来检测烟雾/气体的存在。
硬件接线
我们将重复使用之前实验的电路。只需断开与ADC引脚的连接,并将模块上的D0引脚连接到Arduino的数字引脚#8。
下图显示了接线。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-67.png)
设置阈值
该模块有一个内置电位器,用于设置气体浓度阈值,高于该阈值模块输出低电平,状态 LED 亮起。
现在,要设置阈值,请将气体传感器放在要检测的烟雾/气体附近,然后转动电位器,直到状态LED亮起。 然后,以反方向转动电位器,直到LED熄灭。
Arduino代码
现在,将下面的草图上传到您的 Arduino。
#define MQ2pin 8
int sensorValue; //variable to store sensor value
void setup() {
Serial.begin(9600); // sets the serial port to 9600
Serial.println("MQ2 warming up!");
delay(20000); // allow the MQ2 to warm up
}
void loop() {
sensorValue = digitalRead(MQ2pin); // read digital output pin
Serial.print("Digital Output: ");
Serial.print(sensorValue);
// Determine the status
if (sensorValue) {
Serial.println(" | Smoke: -");
} else {
Serial.println(" | Smoke: Detected!");
}
delay(2000); // wait 2s for next reading
}
您可以在串口监视器上看到类似的输出
![](https://www.geediy.net/wp-content/uploads/2024/06/image-68.png)