• 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

  • 相关阅读:
    flex+spring3.0+blazds 数据推送整理版
    深入理解java虚拟机学习笔记1.
    一个netty序列化引起的思考。
    万年历
    面试理论题
    EF之Database First
    20120902 09:29 SQL、LINQ、Lambda 三种用法
    内容漂浮在图片上(div漂浮)
    生成订单号
    时间对比
  • 原文地址:https://www.cnblogs.com/hailexuexi/p/15337589.html
Copyright © 2020-2023  润新知