风筝
发表于: 2020-12-23 14:04:42 | 显示全部楼层

全球的大气二氧化碳浓度水平每天都在增加。 2019年全球二氧化碳浓度的平均水平达到了百万分之409.8,而2020年10月二氧化碳浓度水平为百万分之411.29。二氧化碳是一种重要的温室气体,约占四分之三的排放量。因此,二氧化碳水平监测也开始变得越来越重要。


在本篇文章中,我们将使用Arduino开发板和MQ-135传感器来测量CO2浓度。测得的CO2浓度值将显示在OLED模块上,最后我们还将Arduino MQ-135传感器读数与红外CO2传感器读数进行比较。


所需的组件

●    Arduino Nano开发板

●    MQ-135传感器

●    跳线

●    0.96寸SPI OLED显示模块

●    面包板

●    22KΩ电阻


0.96寸OLED显示模块

OLED(有机发光二极管)是一种自发光技术,通过在两个导体之间放置一系列有机薄膜来构造。当电流施加到这些膜上时,产生明亮的光。 OLED使用的技术与电视相同,但像素比大多数电视都要少。

OLED-Module.jpg


在本文中,我们使用的是单色7个引脚SSD1306 0.96英寸OLED显示屏。它可以在三种不同的通信协议上工作:SPI 3线模式、SPI四线模式和I2C模式。


MQ-135传感器

MQ-135气体传感器是一种空气质量传感器,用于检测各种气体,包括NH3、NOx、酒精、苯、烟和CO2。 MQ-135传感器既可以作为模块购买,也可以单独购买。在这个项目中,我们使用MQ-135传感器模块来测量CO2浓度。 MQ-135模块的电路图如下所示:

MQ135-Sensor-Circuit-Diagram.jpg

负载电阻RL在使传感器正常工作中起着非常重要的作用。该电阻器根据气体浓度改变其电阻值。根据MQ-135数据表,负载电阻值的范围可以在10KΩ至47KΩ之间。数据表建议您针对空气中100ppm NH3或50ppm酒精浓度校准检测器,并使用约20KΩ的负载电阻值。


MQ135与Arduino连接的电路图

下面给出了将MQ-135气体传感器与Arduino连接的完整原理图:

Interface-MQ135-with-Arduino.png

电路非常简单,因为我们只需将MQ-135传感器和OLED显示模块与Arduino Nano连接在一起。 MQ-135气体传感器和OLED显示模块均由+ 5V和GND供电。 MQ-135传感器的模拟输出引脚连接到Arduino Nano的A0引脚。由于OLED显示模块使用SPI通信,因此我们在OLED模块和Arduino Nano之间建立了SPI通信。

根据电路图连接硬件后,Arduino MQ135传感器设置应如下所示:

MQ-135-Gas-Sensor-with-Arduino.jpg


计算MQ135传感器的Ro值

现在我们知道RL的值,让我们继续如何计算清洁空气中的Ro值。在这里,我们将使用MQ135.h来测量空气中的CO2浓度。因此,首先下载MQ-135库,然后在读取Ro值之前将传感器预热24小时。预热过程之后,使用以下代码读取Ro值:

  1. #include "MQ135.h"
  2. void setup (){
  3. Serial.begin (9600);
  4. }
  5. void loop() {
  6. MQ135 gasSensor = MQ135(A0); // Attach sensor to pin A0
  7. float rzero = gasSensor.getRZero();
  8. Serial.println (rzero);
  9. delay(1000);
  10. }
复制代码

现在,一旦获得Ro值,请转至Documents > Arduino > libraries > MQ135-master文件夹,然后打开MQ135.h文件并更改RLOAD和RZERO值。

  1. ///The load resistance on the board
  2. #define RLOAD 22.0
  3. ///Calibration resistence at atmospheric CO2 level
  4. #define RZERO 5804.99
复制代码

现在向下滚动并将ATMOCO2值替换为当前的大气CO2,即411.29

  1. ///Atmospheric CO2 level for calibration purposes
  2. #define ATMOCO2 397.13
复制代码

使用Arduino和MQ135传感器测量CO2的代码

文档末尾给出了MQ-135传感器与Arduino连接的完整代码。在这里,我们解释了MQ135 Arduino代码的一些重要部分。


该代码使用了Adafruit_GFX、Adafruit_SSD1306和MQ135.h库。这些库可以从Arduino IDE中的库管理器中下载并安装。为此,打开Arduino IDE并转到Sketch <Include Library <Manage Libraries。现在搜索Adafruit GFX并安装Adafruit的Adafruit GFX库。


同样,通过Adafruit安装Adafruit SSD1306库。可以从此处下载MQ135库。


将库安装到Arduino IDE之后,首先在代码中包含所需的库文件。

  1. #include "MQ135.h"
  2. #include <SPI.h>
  3. #include <Adafruit_GFX.h>
  4. #include <Adafruit_SSD1306.h>
复制代码

然后,定义OLED的宽度和高度。在此项目中,我们使用的是128×64 SPI OLED显示屏。您可以根据自己的显示更改SCREEN_WIDTH和SCREEN_HEIGHT变量。

  1. #define SCREEN_WIDTH 128
  2. #define SCREEN_HEIGHT 64
复制代码

然后定义连接OLED显示屏的SPI通信引脚。

  1. #define OLED_MOSI   9
  2. #define OLED_CLK   10
  3. #define OLED_DC    11
  4. #define OLED_CS    12
  5. #define OLED_RESET 13
复制代码

然后,使用前面通过SPI通信协议定义的宽度和高度创建一个Adafruit显示实例。

  1. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
复制代码

之后,定义连接MQ-135传感器的Arduino引脚。

  1. int sensorIn = A0;
复制代码

现在,在setup()函数中,使用9600的波特率初始化串口监视器,进行调试。同样,使用begin()函数初始化OLED显示屏。

  1. Serial.begin(9600);
  2. display.begin(SSD1306_SWITCHCAPVCC);
  3. display.clearDisplay();
复制代码

在loop()函数中,首先通过调用AnalogRead()函数在Arduino的模拟引脚上读取信号值。

  1. val = analogRead(A0);
  2.   Serial.print ("raw = ");
复制代码

然后在接下来的代码中,调用gasSensor.getPPM()计算PPM值。 PPM值是使用负载电阻R0和模拟引脚的读数计算得出的。

  1. float ppm = gasSensor.getPPM();
  2.   Serial.print ("ppm: ");
  3.   Serial.println (ppm);
复制代码

之后,使用setTextSize()和setTextColor()设置文本大小和文本颜色。

  1. display.setTextSize(1);
  2. display.setTextColor(WHITE);
复制代码

然后使用setCursor(x,y)函数定义文本开始的位置。然后使用display.println()函数在OLED显示屏上打印CO2值。

  1.   display.setCursor(18,43);
  2.   display.println("CO2");
  3.   display.setCursor(63,43);
  4.   display.println("(PPM)");
  5.   display.setTextSize(2);
  6.   display.setCursor(28,5);
  7.   display.println(ppm);
复制代码

最后,调用display()函数在OLED显示屏上显示文本。

  1. display.display();
  2. display.clearDisplay();
复制代码

测试MQ-135传感器与Arduino的连接

硬件和代码准备好后,一旦硬件和代码准备就绪,就可以测试传感器了。 为此,将Arduino连接到笔记本电脑,选择Board和Port,然后单击上载按钮。 然后打开串口监视器,等待一段时间(预热过程),然后您将看到数据。 这些值将显示在OLED显示屏上,如下所示:

Measuring-CO2-Concentration-using-Arduino.jpg


以上就是使用MQ-135传感器准确测量空气中CO2浓度的方式。 如果您有任何疑问,请在本帖进行回复。


跳转到指定楼层
chanzin
发表于: 2023-3-16 21:21:52 | 显示全部楼层

文档末尾给出了MQ-135传感器与Arduino连接的完整代码
請問在哪裡 找不到
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 01:32 , Processed in 0.093536 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表