arduino 读取模拟电压

您所在的位置:网站首页 mq2模块可以将模拟量 arduino 读取模拟电压

arduino 读取模拟电压

2024-07-17 11:12| 来源: 网络整理| 查看: 265

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



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3