使用Arduino和MQ-135传感器测量空气中的CO2浓度
在本篇文章中,我们将使用Arduino开发板和MQ-135传感器来测量CO2浓度。测得的CO2浓度值将显示在OLED模块上,最后我们还将Arduino MQ-135传感器读数与红外CO2传感器读数进行比较。
所需的组件
● Arduino Nano开发板
● MQ-135传感器
● 跳线
● 0.96寸SPI OLED显示模块
● 面包板
● 22KΩ电阻
0.96寸OLED显示模块
OLED(有机发光二极管)是一种自发光技术,通过在两个导体之间放置一系列有机薄膜来构造。当电流施加到这些膜上时,产生明亮的光。 OLED使用的技术与电视相同,但像素比大多数电视都要少。
在本文中,我们使用的是单色7个引脚SSD1306 0.96英寸OLED显示屏。它可以在三种不同的通信协议上工作:SPI 3线模式、SPI四线模式和I2C模式。
MQ-135传感器
MQ-135气体传感器是一种空气质量传感器,用于检测各种气体,包括NH3、NOx、酒精、苯、烟和CO2。 MQ-135传感器既可以作为模块购买,也可以单独购买。在这个项目中,我们使用MQ-135传感器模块来测量CO2浓度。 MQ-135模块的电路图如下所示:
负载电阻RL在使传感器正常工作中起着非常重要的作用。该电阻器根据气体浓度改变其电阻值。根据MQ-135数据表,负载电阻值的范围可以在10KΩ至47KΩ之间。数据表建议您针对空气中100ppm NH3或50ppm酒精浓度校准检测器,并使用约20KΩ的负载电阻值。
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通信。
根据电路图连接硬件后,Arduino MQ135传感器设置应如下所示:
计算MQ135传感器的Ro值
现在我们知道RL的值,让我们继续如何计算清洁空气中的Ro值。在这里,我们将使用MQ135.h来测量空气中的CO2浓度。因此,首先下载MQ-135库,然后在读取Ro值之前将传感器预热24小时。预热过程之后,使用以下代码读取Ro值:
#include "MQ135.h" void setup (){ Serial.begin (9600); } void loop() { MQ135 gasSensor = MQ135(A0); // Attach sensor to pin A0 float rzero = gasSensor.getRZero(); Serial.println (rzero); delay(1000); }
现在,一旦获得Ro值,请转至Documents > Arduino > libraries > MQ135-master文件夹,然后打开MQ135.h文件并更改RLOAD和RZERO值。
///The load resistance on the board #define RLOAD 22.0 ///Calibration resistence at atmospheric CO2 level #define RZERO 5804.99
现在向下滚动并将ATMOCO2值替换为当前的大气CO2,即411.29
///Atmospheric CO2 level for calibration purposes #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之后,首先在代码中包含所需的库文件。
#include "MQ135.h" #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h>
然后,定义OLED的宽度和高度。在此项目中,我们使用的是128×64 SPI OLED显示屏。您可以根据自己的显示更改SCREEN_WIDTH和SCREEN_HEIGHT变量。
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
然后定义连接OLED显示屏的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 display(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的模拟引脚上读取信号值。
val = analogRead(A0); Serial.print ("raw = ");
然后在接下来的代码中,调用gasSensor.getPPM()计算PPM值。 PPM值是使用负载电阻R0和模拟引脚的读数计算得出的。
float 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.clearDisplay();
测试MQ-135传感器与Arduino的连接
硬件和代码准备好后,一旦硬件和代码准备就绪,就可以测试传感器了。 为此,将Arduino连接到笔记本电脑,选择Board和Port,然后单击上载按钮。 然后打开串口监视器,等待一段时间(预热过程),然后您将看到数据。 这些值将显示在OLED显示屏上,如下所示:
以上就是使用MQ-135传感器准确测量空气中CO2浓度的方式。