现在空气中二氧化碳浓度的增加已经成为一个严重的问题。根据NOAA报告,臭氧中的CO2浓度已达到0.0385%(385 ppm),是210万年来的最高水平。这意味着在一百万个空气颗粒中,有385个二氧化碳颗粒。二氧化碳含量的上升严重影响了环境,使我们面临气候变化和全球变暖等情况。道路上安装了许多空气质量测量设备来告知CO2水平,但我们也可以制造DIY CO2测量设备并将其安装在我们所在的地区。
在本教程中,我们将把重力红外CO2传感器与Arduino接口,以测量PPM中的CO2浓度。重力红外CO2传感器是一种高精度的模拟CO2传感器。它测量的CO2含量在0至5000 ppm的范围内。您还可以检查我们以前的项目,在这些项目中我们使用了MQ135气体传感器,Sharp GP2Y1014AU0F传感器和Nova PM传感器SDS011来构建空气质量监控器。
所需组件
- Arduino纳米
- 重力红外CO2传感器V1.1
- 跳线
- 0.96'SPI OLED显示模块
- 面包板
重力红外CO2传感器
重力红外二氧化碳传感器V1.1是DFRobot发布的最新高精度模拟红外二氧化碳传感器。该传感器基于非分散红外(NDIR)技术,具有良好的选择性和无氧依赖性。它集成了温度补偿并支持DAC输出。该传感器的有效测量范围为0至5000ppm,精度为±50ppm + 3%。该红外CO2传感器可用于HVAC,室内空气质量监测,工业过程和安全保护监测,农业和畜牧生产过程监测。
红外CO2传感器的 引脚排列:
如前所述,红外CO2传感器带有3针连接器。下图和表格显示了红外CO2传感器的引脚分配:
销号 |
引脚名称 |
描述 |
---|---|---|
1个 |
信号 |
模拟输出(0.4〜2V) |
2 |
VCC |
VCC(4.5〜5.5V) |
3 |
地线 |
地线 |
红外CO2传感器 规格和功能:
- 气体检测:二氧化碳(CO2)
- 工作电压:4.5〜5.5V DC
- 预热时间:3min
- 响应时间:120s
- 工作温度:0〜50℃
- 工作湿度:0〜95%RH(无凝结)
- 防水防腐蚀
- 循环寿命长
- 抗水蒸气干扰
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
通过以下链接了解有关OLED及其与不同微控制器接口的更多信息。
电路原理图
下面给出了用于Arduino的重力模拟红外CO2传感器接口的电路图:
电路非常简单,因为我们仅将重力红外CO2传感器和OLED显示模块与Arduino Nano连接在一起。红外CO2传感器和OLED显示模块均由+ 5V和GND供电。CO2传感器的信号(模拟输出)引脚连接到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代码以测量CO2浓度
文档末尾给出了用于Arduino项目的重力模拟红外CO2传感器的完整代码。在这里,我们解释了代码的一些重要部分。
该代码使用 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之后,通过包含所需的库文件来启动代码。灰尘传感器不需要任何库,因为读数直接从Arduino的模拟引脚获取。
#包括
然后,定义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);
之后,定义连接二氧化碳传感器的Arduino引脚。
int sensorIn = A0;
现在,在 setup() 函数中,以9600的波特率初始化串行监视器,以进行调试。同样,使用 begin() 函数初始化OLED显示。
Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); AnalogReference(DEFAULT);
在 loop() 函数内部,首先通过调用 AnalogRead() 函数在Arduino的Analog引脚上读取信号值。之后,将这些模拟信号值转换为电压值。
void loop(){int sensorValue = AnalogRead(sensorIn); 浮动电压= sensorValue *(5000 / 1024.0);
之后,比较电压值。如果电压为0 V,则表示传感器发生了一些问题。如果电压大于0 V但小于400 V,则表示传感器仍处于预热过程中。
if(voltage == 0){Serial.println(“ Fault”); } else if(电压<400){Serial.println(“ preheating”); }
如果电压等于或大于400 V,则将其转换为CO2浓度值。
否则{int voltage_diference = voltage-400; 浮点浓度=电压差* 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(); display.clearDisplay();
测试重力红外CO2传感器的接口
一旦硬件和代码准备就绪,就可以测试传感器了。为此,将Arduino连接到笔记本电脑,选择Board和Port,然后单击上载按钮。然后打开串行监视器,等待一段时间(预热过程),然后您将看到最终数据。
这些值将显示在OLED显示屏上,如下所示:
注意:在使用传感器之前,让传感器加热约24小时以获取正确的PPM值。首次给传感器供电时,输出的CO2浓度为1500 PPM至1700PPM,经过24小时的加热过程后,输出的CO2浓度降低至450 PPM至500 PPM,这是正确的PPM值。因此有必要在使用传感器测量CO2浓度之前对其进行校准。
这就是红外CO2传感器可用于测量空气中准确的CO2浓度的方式。完整的代码和工作视频如下。如果您有任何疑问,请将其留在评论部分或使用我们的论坛寻求技术帮助。