毕业设计 单片机二氧化碳浓度测量系统

201 篇文章 118 订阅
151 篇文章 41 订阅

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,然后单击上载按钮。然后打开串口监视器,等待一段时间(预热过程),然后您将看到最终数据。

在这里插入图片描述

最后

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值