第二十四篇、基于Arduino uno,获取(MQ-2、MQ-3、MQ-4、MQ-5、MQ-6、MQ-7、MQ-8、MQ-9、MQ-135)气体传感器的原始值——结果导向

文章介绍了如何使用ArduinoUno与气体传感器进行连接和编程,通过串口调试助手展示气体检测结果。传感器通过A0引脚获取模拟电压值,程序以非阻塞方式每隔500ms检测一次,上电时进行自适应平均值计算。需要注意的是,传感器需要预热约3分钟,获取的值为原始模拟值,需根据实际情况建立转化公式得到具体气体含量。
摘要由CSDN通过智能技术生成

0、结果

说明:先来看看串口调试助手显示的结果,前半部分没有吹气,后半部分吹气了。第一个值是上电自适应的平均值,第二个值是实时的模拟电压值,第三个值是平均值和实时值的差值,如果是你想要的,可以接着往下看。


1、外观

 说明:虽然气体传感器有很多种类,但是原理和代码都是适用的,都是通过A0获取原始模拟电压值。


2、连线

 说明:只需要连接三根线。

  • uno————气体传感器
  •     5V--------------VCC
  • GND--------------GND
  •     A0--------------A0

3、源程序

说明:采用非阻塞方式编写,一定时间检测一次气体值,上电有自适应,还写了自适应平均值和实时值的差值,并将对应功能进行函数化,方便移植。

/****************************************气体 part****************************************/
/*
  接线:
  VCC------VCC
  GND------GND
  A0------A0

  注意:这个代码适合用于很多气体传感器,长得像麦克风或者话筒的传感器都可以用;
  传感器需要上电预热,预热的时间大概在3分钟左右,预热后传感器会有点烫,是正常的情况。
*/
#define gasPin  A0                                                               //定义模拟口A0
#define gasTimesInterval 500                                                     //500ms检测一次气体
unsigned long gasTimes = 0;                                                      //记录设备运行时间,用来控制多少时间检测一次气体
int gasVal = 0;                                                                  //实时气体值
int gasStart = 0;                                                                //自适应检测到的值
int gasAverage = 0;                                                              //自适应平均值
int gasSum = 0;                                                                  //自适应总值
int gasDiff = 0;                                                                 //平均值和实时值的差值,用来判断是否超标
/****************************************set up and loop part*********************************/
void setup() {                                                                   //程序初始化
  Serial.begin(9600);                                                            //设置波特率9600

  for (int i = 0; i < 30; i++) {                                                 //自适应获取模拟量
    gasStart = analogRead(gasPin);
    gasSum = gasSum + gasStart;                                                  //将模拟量累加
  }
  gasAverage = gasSum / 30;                                                      //求自适应的平均值
  Serial.println("设备上线!");
}
void loop() {                                                                    //程序主体循环
  getGasData();                                                                  //获取气体的值
}
/****************************************气体 part****************************************/
/*获取气体的值*/
void getGasData() {
  if (millis() - gasTimes >= gasTimesInterval) {                                //一定时间检测一次
    gasTimes = millis();

    gasVal = analogRead(gasPin);                                                //获取实时的气体模拟值
    gasDiff = gasVal - gasAverage;                                              //求差值

    Serial.print("初始平均值:");                                                 //串口输出对应的值
    Serial.print(gasAverage);                                                   //串口输出对应的值

    Serial.print(" ,实时原始值:");                                              //串口输出对应的值
    Serial.print(gasVal);                                                       //串口输出对应的值

    Serial.print(" ,两者的差值:");                                              //串口输出对应的值
    Serial.println(gasDiff);                                                    //串口输出对应的值
  }
}

4、注意事项

说明:传感器需要上电预热,预热的时间大概在3分钟左右,预热后传感器会有点烫。获取到的值是没有经过转化的原始值,如果需要具体的气体含量,可以画一个表,来写转化公式。

5、基本原理

        检测原理:气体传感器通常是基于化学反应或物理效应来检测气体浓度的,其中化学传感器可以通过一定的化学反应来将气体与参照物质进行比较,从而得到气体浓度信息;而物理传感器则是通过测量气体对电磁的吸收、反射或者透过程度等物理效应来获得气体浓度信息。
        接口方式:气体传感器的输出通常包括模拟信号和数字信号两种接口方式,其中模拟信号通过变化的电压或电流来表示气体浓度的大小;而数字信号则是将气体浓度转换成二进制0和1,以便更好地与Arduino等控制器进行通信和处理。
        驱动电路:为了能够正常使用气体传感器,还需要设计相应的驱动电路,包括传感器的电源、信号调节、滤波和放大等功能,以便能够将传感器的信号调整到适当的范围内,并与控制器进行可靠的通信。

硬件部件: Arduino Micro × 1个 无焊面包板一半尺寸 × 1个 MPS20N0040D-D压力传感器× 1个 LM358-N运算放大器× 1个 电阻1M欧姆 × 2 连接线套件,22 AWG × 1个 婴儿吸鼻器× 1个 5mm水族馆航空管× 1个 三通气管接头× 1个 软件应用程序和在线服务: Arduino IDE 手动工具和制造机: 剥线钳和切割器,32-20 AWG /0.05-0.5mm²单芯和绞线 在这个项目中,我们将构建一个简单的USB MIDI即插即用呼吸控制器。它的设计使用了容易找到的廉价组件,因此总成本仍然可以承受,并且大大低于商业上的等价物。这是仅使用气压传感器的基本版本,但计划将来对其进行升级以包括咬合和点头/倾斜传感器。 该项目假定您具有一些非常基础的电子学和Arduino知识,但由于不涉及焊接,因此即使是初学者也可以构建它。当然,更高级的用户可以将所有东西焊接在永久原型板上。由于Internet上有出色的教程,因此我不讨论IDE /库的安装以及上载代码的说明。 过采样用于平滑传感器的输入,效果非常好。您还可以根据自己的喜好调整范围,甚至拨入自定义曲线来调整控制器的行为。 由于传感器也可以测量负压,因此当您吸入空气而不是吹气时,会有第二个控制器消息流输出。两种类型的消息都可以由用户设置。例如,您可以将打击设置为弯音向上,而将其设置为弯音向下。默认情况下,两者均设置为控制器编号 建立步骤 1.如图/示意图所示,将Arduino插入面包板。 完整电路: 2.将传感器和运算放大器插入各自的位置,并根据侧面的小凹痕注意方向。 3.将电阻器的支脚切成适当的长度后,将其插入。 4.切/剥实心电缆,并将其放置在各自的位置。为了使这一点更易于理解,我将红色用于5V,将黑色用于接地,将黄色用于信号,但是您当然可以使用所有可用的东西。 5.如图所示,连接烟嘴,管道,三通接头和吸气器。您将需要切割一段“排气管”。 吹口,管道,连接器和排气口已连接: 6.按下三向连接器,使其适合传感器。它应该保持原状。 连接器安装到传感器: 7.安装Arduino IDE,并从“工具”->“管理库”安装所需的两个库(过采样和USB-MIDI)。用USB电缆将Arduino连接到计算机。上传附件代码。 8.应该设置好了,Arduino现在应该在您的DAW /音乐软件中显示为MIDI设备。启用它,并将其与键盘一起路由到支持呼吸控制器的插件。 调试模式下输出的示例串行绘图仪图(蓝色:黄色,红色:空中绘制): 收割者DAW中的CC消息: 这种设计的一个物理缺点是唾液将不可避免地在管中流动并会引起明显的气流波动。三通连接器用于通过将唾液引导至“排气”管来解决此问题。为了最大程度地减少管道中的残留唾液,请通过调节管道长度来确保从咬嘴到三通接头之间存在连续的坡度。如果管子悬挂在三通接头的水平线以下,唾液将被卡在其下部,从而引起波动。吸气器的婴儿侧部分(包括其过滤器)连接到排气口,以最大程度地减少滴水和噪音,并增加流向传感器的空气流量。 在代码中,您可以根据自己的喜好调整,包括自定义曲线。注释描述了如何执行此操作。如果发现很难达到127点,则减小最大范围,或者如果太容易,则增大它。无论何时更改,都将需要重新上传代码。 将Arduino启动后的前几个读数取平均,以校准其余位置。连接/重置设备时,请勿吹入管子。
MQ-7是一款能够检测一氧化碳浓度的气敏传感器,采集数据子函数是指通过程序控制MQ-7传感器进行数据采集的子函数。 首先,需要了解MQ-7传感器的原理。MQ-7传感器是基于红外线吸收原理,当空气中存在一氧化碳时,传感器会吸收特定波长的红外光线,从而产生电信号输出。 在编写采集数据子函数前,需要先进行传感器的初始化设置。可以设置传感器的工作电压和引脚连接等。 接下来,通过对传感器进行数据采集。一般可以使用模拟引脚来接收传感器的输出信号。可以使用模拟输入函数来读取传感器输出的电压,并将其转换为对应的气体浓度数。可以根据传感器的数据手册提供的电压-浓度曲线关系进行转换。 在数据采集过程中,还可以实时监测传感器的工作状态,如检测传感器是否正常工作,是否需要更换等。 最后,可以根据需要进行数据的处理和存储。可以将采集到的数据进行记录、显示或上传等操作。可以通过将数据存储到数组、文件或数据库等方式进行保存,以便后续分析和使用。 采集数据子函数的编写需要注意传感器的灵敏度和响应时间等因素。在程序中需要合理控制传感器的采样频率和采样时间,确保采集到的数据准确可靠。 总之,MQ-7采集数据子函数是通过编写程序控制MQ-7传感器进行数据采集的子函数,主要包括传感器的初始化设置、数据采集、状态监测和数据处理等步骤,以获取并存储传感器输出的一氧化碳浓度数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值