arduino 读取模拟电压_MQ2气体/烟雾传感器如何工作及其与Arduino接口
arduino 读取模拟电压_MQ2气体/烟雾传感器如何工作及其与Arduino接口
使用MQ2气体传感器模块,为您的下一个Arduino项目带来一个人工鼻子。这是一个强大的气体传感器适用于感测LPG,烟雾,酒精,丙烷,氢气,甲烷和碳**一氧化碳**在空气中的浓度。
如果您打算创建一个室内空气质量监测系统;呼吸检查器或早期火灾探测系统,MQ2气体传感器模块是一个不错的选择。
传感器提供的模拟输出电压与烟气浓度成正比。气体浓度越大,输出电压越高;而较低的气体浓度会导致低输出电压。以下动画说明了气体浓度和输出电压之间的关系。
来自MQ2气体传感器的模拟信号被进一步馈送到LM393高精度比较器(焊接在模块底部),当然是将信号数字化。与比较器一起使用的还有一个小电位器,您可以转动它来调整传感器的灵敏度。您可以使用它来调整传感器检测到的气体浓度。
该传感器对多种气体敏感-但无法确定是哪种气体!那很正常;大多数气体传感器就是这样。因此,最好是测量已知气体密度的变化,而不是检测正在变化的气体。
校准MQ2气体传感器模块
要校准气体传感器,可以将气体传感器保持在要检测的烟雾/气体附近,并继续旋转电位计,直到模块上的红色LED开始发光。
顺时针旋转螺丝以增加灵敏度,逆时针旋转螺丝以降低灵敏度。
模块上的比较器会不断检查模拟引脚(A0)是否已达到电位计设置的阈值。超过阈值时,数字引脚(D0)将变为高电平,并且信号LED点亮。当您需要在达到特定阈值时触发操作时,此设置非常有用。例如,当烟雾超过阈值时,您可以打开或关闭继电器,或指示机器人吹气/洒水。你有主意!
MQ2气体传感器模块的引脚排列
VCC 为模块供电。您可以将其连接到Arduino的5V输出。
GND 是接地引脚,需要连接到Arduino的GND引脚。
D0 (或 DIN)提供可燃气体存在的数字表示。
A0 (或 AIN)提供与烟气浓度成比例的模拟输出电压。
接线–将MQ2气体传感器模块连接到Arduino UNO
将VCC引脚连接到Arduino的5V引脚,并将GND引脚连接到Arduino的接地引脚(GND)。
将模块上的D0 输出引脚连接到Arduino上的数字引脚8,将模块上的A0 输出引脚连接到Arduino上的模拟引脚 A0。
Arduino代码
代码非常简单,基本上只读取A0引脚上的模拟电压。当检测到烟雾时,它还会在串行监视器上打印一条消息。
#define MQ2pin (0) float sensorValue; //variable to store sensor value void setup() { Serial.begin(9600); // sets the serial port to 9600 Serial.println("Gas sensor warming up! 气体传感器预热"); delay(20000); // allow the MQ-6 to warm up } void loop() { sensorValue = analogRead(MQ2pin); // read analog input pin 0 Serial.print("Sensor Value: "); Serial.print(sensorValue); if(sensorValue < 300) //阈值 根据实际情况判断 大于300 还是小于300 ,300也是变量 { Serial.print(" | Smoke detected! 探测到烟雾 "); } Serial.println(""); delay(2000); // wait 2s for next reading }
串行监视器上的输出如下所示:
我的测试环境是 100多一点时 表示有烟雾 ,正常是700多。(检测的是 A0 的输出)
我是用 打火机 打着火后 再吹灭。 放出的甲烷 气体 。直接 放到 检测器 边上。检测出 100多一点的 输出
代码说明:
定义了一个名为sensorValue的变量来存储传感器值。
#define MQ2pin (0) float sensorValue; //定义变量
在设置功能中:我们初始化与PC的串行通信,并等待20秒以允许传感器预热。
Serial.begin(9600); // sets the serial port to 9600 Serial.println("Gas sensor warming up!"); delay(20000); // allow the MQ-6 to warm up
循环功能:传感器值由analogRead()函数读取并显示在串行监视器上
sensorValue = analogRead(MQ2pin); // read analog input pin 0 Serial.print("Sensor Value: "); Serial.print(sensorValue);
当气体浓度足够高时,传感器通常会输出大于300的值。我们可以使用if语句监控此值。当传感器值超过300时,我们将显示“检测到烟雾!”。信息。
if(sensorValue > 300) { Serial.print(" | Smoke detected!"); }
注:
一、println 输出一行
Serial.println("输出的字符串 一行"); //println 输出一行
二、上传报错
上传报错:avrdude: stk500_recv(): programmer is not responding
解决方案:
每次上传代码时,都要拔下0,1引脚的线。上传完成后再接回去。因为 arduino上传进行数据交互时会用到这两个引脚
十分感谢这两位博主的分享:
https://blog.csdn.net/weixin_42533120/article/details/112499307
https://blog.csdn.net/weixin_40317528/article/details/88926989