毕业设计 单片机二氧化碳浓度测量系统"/>
毕业设计 单片机二氧化碳浓度测量系统
1 简介
现今大气中二氧化碳浓度的不断增加已经成为一个严重的问题。根据NOAA报告,臭氧中的CO2浓度已达到0.0385%(385 ppm),是210万年来的最高浓度。这意味着在一百万个空气颗粒中,有385个二氧化碳颗粒。二氧化碳含量的上升严重影响了环境,使我们面临气候变化和全球变暖等情况。道路上安装了许多空气质量测量设备来测量CO2的浓度,但是我们也可以自制一个CO2测量设备并将其安装在我们的区域中。
本项目,我们将把Gravity红外CO2传感器与Arduino连接,以测量CO2浓度。Gravity红外CO2传感器是一种高精度的模拟CO2传感器。它测量的CO2含量在0至5000 ppm的范围内。
2 主要器件
- Arduino Nano开发板
- Gravity红外CO2传感器V1.1
- 跳线
- 0.96英寸SPI OLED显示模块
- 面包板
3 实现效果
4 硬件设计
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模式。引脚及其功能在下表中说明:
电路原理图
电路非常简单,因为我们仅需要将重Gravity红外CO2传感器、OLED显示模块与Arduino Nano连接在一起。红外CO2传感器和OLED显示模块均由+ 5V和GND供电。 CO2传感器的信号(模拟输出)引脚连接到Arduino Nano的A0引脚。由于OLED显示模块使用SPI通信,因此我们在OLED模块和Arduino Nano之间建立了SPI通信。
5 软件说明
测量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引脚。
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);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,然后单击上载按钮。然后打开串口监视器,等待一段时间(预热过程),然后您将看到最终数据。
最后
更多推荐
毕业设计 单片机二氧化碳浓度测量系统
发布评论