小白在线

爱生活 爱小白

使用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使用的技术与电视相同,但像素比大多数电视都要少。

 

140157y6zehevnv2sqd6mh.jpg

 

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


MQ-135传感器

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

 

134332wox2yinqjoijwjwn.jpg

 

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


MQ135与Arduino连接的电路图

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

 

134756sjv13tcxiii0pipb.png

 

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

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

 

134929j6cmxvb659cbttx2.jpg


计算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显示屏上,如下所示:

 

 140046wuto96jy226a23ze.jpg 


以上就是使用MQ-135传感器准确测量空气中CO2浓度的方式。 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«   2020年12月   »
123456
78910111213
14151617181920
21222324252627
28293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接
    • Z-BlogPHP
    • 订阅本站的 RSS 2.0 新闻聚合

    Powered By Z-BlogPHP 1.6.4 Valyria

    Copyright iXiaoBai.net Rights Reserved. 吉ICP备18001369号-1