地球的大气二氧化碳水平每天都在增加。2019年全球平均大气二氧化碳为409.8百万分之一,而2020年10月为411.29。二氧化碳是一种重要的温室气体,约占四分之三的排放量。因此,二氧化碳水平监测也开始变得越来越重要。
在我们之前的项目中,我们使用重力红外CO2传感器来测量空气中的CO2浓度。在这个项目中,我们将使用带有Arduino的MQ-135传感器来测量CO2浓度。测得的CO2浓度值将显示在OLED模块上,最后我们还将Arduino MQ-135传感器读数与红外CO2传感器读数进行比较。除了二氧化碳以外,我们还使用Arduino测量了LPG,烟气和氨气的浓度。
所需组件
- Arduino纳米
- MQ-135传感器
- 跳线
- 0.96'SPI OLED显示模块
- 面包板
- 22KΩ电阻
0.96英寸OLED显示模块
OLED(有机发光二极管)是一种自发光技术,通过在两个导体之间放置一系列有机薄膜来构造。当电流施加到这些膜时,产生亮光。OLED使用的技术与电视相同,但像素比大多数电视都要少。
对于此项目,我们使用的是单色7针SSD1306 0.96英寸OLED显示屏。它可以在三种不同的通信协议上工作:SPI 3线模式,SPI四线模式和I2C模式。您还可以通过阅读链接文章,进一步了解OLED显示的基本知识及其类型。引脚及其功能在下表中说明:
引脚名称 |
其他名称 |
描述 |
nd |
地面 |
模块的接地引脚 |
Vdd |
Vcc,5V |
电源引脚(可承受3-5V) |
SCK |
D0,SCL,时钟 |
充当时钟引脚。用于I2C和SPI |
SDA |
D1,MOSI |
模块的数据引脚。用于IIC和SPI |
RES |
RST,复位 |
重置模块(在SPI期间有用) |
直流电 |
A0 |
数据命令引脚。用于SPI协议 |
CS |
片选 |
在SPI协议下使用多个模块时很有用 |
OLED规格:
- OLED驱动器IC:SSD1306
- 分辨率:128 x 64
- 可视角度:> 160°
- 输入电压:3.3V〜6V
- 像素颜色:蓝色
- 工作温度:-30°C〜70°C
准备MQ-135传感器
MQ-135气体传感器是一种空气质量传感器,用于检测各种气体,包括NH3,NOx,酒精,苯,烟和CO2。MQ-135传感器既可以作为模块购买,也可以单独购买。在这个项目中,我们使用MQ-135传感器模块来测量PPM中的CO2浓度。MQ-135板的电路图如下所示:
负载电阻RL在使传感器正常工作中起着非常重要的作用。该电阻器根据气体浓度改变其电阻值。根据MQ-135数据表,负载电阻值的范围可以在10KΩ至47KΩ之间。数据表建议您针对空气中100ppm NH3或50ppm酒精浓度校准检测器,并使用约20KΩ的负载电阻(RL)值。但是,如果您跟踪PCB走线以找到电路板上的RL值,则会看到一个1KΩ(102)负载电阻。
因此,要测量适当的CO2浓度值,您必须用22KΩ电阻代替1KΩ电阻。
将MQ135与Arduino接口的电路图
下面给出了将MQ-135气体传感器与Arduino连接的完整原理图:
电路非常简单,因为我们仅将MQ-135传感器和OLED显示模块与Arduino Nano连接在一起。MQ-135气体传感器和OLED显示模块均由+ 5V和GND供电。MQ-135传感器的模拟输出引脚连接到Arduino Nano的A0引脚。由于OLED显示模块使用SPI通信,因此我们在OLED模块和Arduino Nano之间建立了SPI通信。下表中显示了连接:
序号 |
OLED模块引脚 |
Arduino引脚 |
1个 |
地线 |
地面 |
2 |
VCC |
5伏 |
3 |
D0 |
10 |
4 |
D1 |
9 |
5 |
RES |
13 |
6 |
直流电 |
11 |
7 |
CS |
12 |
根据电路图连接硬件后,Arduino MQ135传感器设置应如下所示:
计算R
现在我们知道RL的值,让我们继续如何计算清洁空气中的R o值。在这里,我们将使用MQ135.h来测量空气中的CO2浓度。因此,首先下载MQ-135库,然后在读取R o值之前将传感器预热24小时。预热过程后,使用以下代码读取R o值:
#include“ MQ135.h” void setup(){Serial.begin(9600); } void loop(){MQ135 gasSensor = MQ135(A0); //将传感器连接到A0引脚上float rzero = gasSensor.getRZero(); Serial.println(rzero); 延迟(1000); }
现在,一旦获得R o值,请转至 文档> Arduino>库> MQ135-master 文件夹 并打开 MQ135.h 文件并更改RLOAD和RZERO值。
///板上的负载电阻#define RLOAD 22.0 ////大气CO2水平下的校准耐受性#define RZERO 5804.99
现在向下滚动并将ATMOCO2值替换为当前的大气CO2,即411.29
///用于校准的大气CO2含量#define ATMOCO2 397.13
使用Arduino MQ135传感器测量CO2的代码
文档末尾给出了MQ-135 Sensor与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之后,通过包含所需的库文件来启动代码。
#include“ MQ135.h” #include
然后,定义OLED的宽度和高度。在此项目中,我们使用的是128×64 SPI OLED显示器。您可以根据自己的显示更改 SCREEN_WIDTH 和 SCREEN_HEIGHT 变量。
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
然后定义连接OLED Display的SPI通信引脚。
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
然后,使用前面通过SPI通信协议定义的宽度和高度创建一个Adafruit显示实例。
Adafruit_SSD1306显示屏(SCREEN_WIDTH,SCREEN_HEIGHT,OLED_MOSI,OLED_CLK,OLED_DC,OLED_RESET,OLED_CS);
之后,定义连接MQ-135传感器的Arduino引脚。
int sensorIn = A0;
现在,在 setup() 函数中,以9600的波特率初始化串行监视器,以进行调试。同样,使用 begin() 函数初始化OLED显示。
Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay();
在 loop() 函数内部,首先通过调用 AnalogRead() 函数在Arduino的Analog引脚上读取信号值。
val = AnalogRead(A0); Serial.print(“ raw =”);
然后在下一行中,调用 gasSensor.getPPM() 以计算PPM值。使用负载电阻R 0和模拟引脚的读数来计算PPM值。
浮点ppm = gasSensor.getPPM(); Serial.print(“ ppm:”); Serial.println(ppm);
之后,使用 setTextSize() 和 setTextColor() 设置文本大小和文本颜色。
display.setTextSize(1); display.setTextColor(WHITE);
然后在下一行中,使用 setCursor(x,y) 方法定义文本开始的位置。然后使用 display.println() 函数在OLED显示屏上打印CO2值。
display.setCursor(18,43); display.println(“ CO2”); display.setCursor(63,43); display.println(“(PPM)”); display.setTextSize(2); display.setCursor(28,5); display.println(ppm);
最后,调用 display() 方法以在OLED Display上显示文本。
display.display(); display.clearDisplay();
测试MQ-135传感器的接口
一旦硬件和代码准备就绪,就可以测试传感器了。为此,将Arduino连接到笔记本电脑,选择Board和Port,然后单击上载按钮。然后打开串行监视器,等待一段时间(预热过程),然后您将看到最终数据。这些值将显示在OLED显示屏上,如下所示:
这就是MQ-135传感器可用于测量空气中准确的CO2的方式。完整的MQ135空气质量传感器Arduino代码和工作视频如下。如果您有任何疑问,请在评论部分中保留。