|
现今大气中二氧化碳浓度的不断增加已经成为一个严重的问题。根据NOAA报告,臭氧中的CO2浓度已达到0.0385%(385 ppm),是210万年来的最高浓度。这意味着在一百万个空气颗粒中,有385个二氧化碳颗粒。二氧化碳含量的上升严重影响了环境,使我们面临气候变化和全球变暖等情况。道路上安装了许多空气质量测量设备来测量CO2的浓度,但是我们也可以自制一个CO2测量设备并将其安装在我们的区域中。
在本篇文章中,我们将把Gravity红外CO2传感器与Arduino连接,以测量CO2浓度。Gravity红外CO2传感器是一种高精度的模拟CO2传感器。它测量的CO2含量在0至5000 ppm的范围内。
所需的组件 ● Arduino Nano开发板 ● Gravity红外CO2传感器V1.1 ● 跳线 ● 0.96英寸SPI OLED显示模块 ● 面包板
Gravity红外CO2传感器
Gravity红外CO2传感器V1.1(Gravity Infrared CO2 Sensor)是DFRobot发布的最新高精度模拟红外二氧化碳传感器。该传感器基于非分散红外(NDIR)技术,具有良好的选择性和无氧依赖性。它集成了温度补偿并支持DAC输出。该传感器的有效测量范围为0至5000ppm,精度为±50ppm + 3%。该红外CO2传感器可用于HVAC、室内空气质量监测、工业过程和安全保护监测、农业和畜牧业生产过程监测。
红外CO2传感器的引脚排列:
如前所述,红外CO2传感器带有一个3针的连接器。
0.96英寸OLED显示模块 OLED(有机发光二极管)是一种自发光技术,通过在两个导体之间放置一系列有机薄膜制成的。当电流施加到这些膜时,产生亮光。 OLED使用的技术与电视相同,但像素比大多数电视都要少。
对于本文,我们使用的是单色7引脚SSD1306 0.96英寸OLED显示屏。它可以在三种不同的通信协议上工作:SPI 3线模式、SPI四线模式和I2C模式。引脚及其功能在下表中说明:
电路原理图 下面给出了用于Arduino与Gravity模拟红外CO2传感器连接的电路图:
电路非常简单,因为我们仅需要将重Gravity红外CO2传感器、OLED显示模块与Arduino Nano连接在一起。红外CO2传感器和OLED显示模块均由+ 5V和GND供电。 CO2传感器的信号(模拟输出)引脚连接到Arduino Nano的A0引脚。由于OLED显示模块使用SPI通信,因此我们在OLED模块和Arduino Nano之间建立了SPI通信。
根据电路图连接硬件后,其效果应如下所示:
测量CO2浓度的Arduino代码 该代码使用了Adafruit_GFX和Adafruit_SSD1306库。这些库可以从Arduino IDE的库管理器中下载并从那里安装。为此,请打开Arduino IDE并转到Sketch > Include Library > Manage Libraries。现在搜索Adafruit GFX并安装Adafruit的Adafruit GFX库。
同样,通过Adafruit安装Adafruit SSD1306库。红外CO2传感器不需要任何库,因为我们直接从Arduino的模拟引脚读取电压值。
将库安装到Arduino IDE之后,首先在代码中包含所需的库文件。 - #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);
复制代码之后,定义连接二氧化碳传感器的Arduino引脚。
现在,在setup()函数中,以9600的波特率初始化串口监视器,以进行调试。同样,使用begin()函数初始化OLED显示屏。 - Serial.begin(9600);
- display.begin(SSD1306_SWITCHCAPVCC);
- analogReference(DEFAULT);
复制代码
在loop()函数中,首先调用AnalogRead()函数在Arduino的Analog引脚上读取信号值。之后,将这些模拟信号值转换为电压值。 - void loop(){
- int sensorValue = analogRead(sensorIn);
- float voltage = sensorValue*(5000/1024.0);
复制代码
之后,比较电压值。如果电压为0 V,则表示传感器发生了一些问题。如果电压大于0 V但小于400 V,则表示传感器仍处于预热过程中。 - if(voltage == 0)
- {
- Serial.println("Fault");
- }
- else if(voltage < 400)
- {
- Serial.println("preheating");
- }
复制代码如果电压等于或大于400 V,则将其转换为CO2浓度值。 - else
- {
- int voltage_diference=voltage-400;
- float concentration=voltage_diference*50.0/16.0;
复制代码之后,使用setTextSize()和setTextColor()设置文本大小和文本颜色。 - display.setTextSize(1);
- display.setTextColor(WHITE);
复制代码然后在接下来的代码中,使用setCursor(x,y) 函数定义文本开始的位置。然后使用display.println()函数在OLED显示屏上打印CO2值。 - display.println("CO2");
- display.setCursor(63,43);
- display.println("(PPM)");
- display.setTextSize(2);
- display.setCursor(28,5);
- display.println(concentration);
复制代码最后,调用display()函数在OLED显示屏上显示文本。 - display.display();
- display.clearDisplay();
复制代码
使用Arduino测试Gravity红外CO2传感器的连接 一旦硬件和代码准备就绪,就可以测试传感器了。将Arduino连接到笔记本电脑,选择Board和Port,然后单击上载按钮。然后打开串口监视器,等待一段时间(预热过程),然后您将看到最终数据。
这些值将显示在OLED显示屏上,如下所示:
注意:在使用传感器之前,让传感器加热约24小时以获取正确的PPM值。首次给传感器供电时,输出的CO2浓度为1500 PPM至1700PPM,经过24小时的加热过程后,输出的CO2浓度降低至450 PPM至500 PPM,这是正确的PPM值。因此有必要在使用传感器测量CO2浓度之前对其进行校准。
以上就是使用红外CO2传感器测量空气中准确的CO2浓度的方式。如果您有任何疑问,请随时在本帖下面进行回复。 |