空气污染是许多城市的主要问题,并且空气质量指数每天都在变差。根据世界卫生组织的报告,空气中存在的有害颗粒物导致的过早死亡人数要多于车祸。根据环境保护署(EPA)的数据,室内空气的毒性是室外空气的2至5倍。因此,在这里我们建立了一个通过测量空气中PM2.5和PM10颗粒来监测空气质量的设备。
我们以前使用MQ135气体传感器进行空气质量监测,而使用Sharp GP2Y1014AU0F传感器来测量空气中的粉尘密度。这次我们使用带有Arduino Nano的 SDS011传感器来构建空气质量分析仪。SDS011传感器可以计算空气中PM2.5和PM10颗粒的浓度。此处,实时PM2.5和PM 10值将显示在OLED显示屏上。
所需组件
- Arduino纳米
- Nova PM传感器SDS011
- 0.96'SPI OLED显示模块
- 跳线
Nova PM传感器SDS011
SDS011传感器是Nova Fitness开发的最新空气质量传感器。它根据激光散射原理工作,可以使空气中的粒子浓度在0.3至10μm之间。该传感器由一个小风扇,进气阀,激光二极管和光电二极管组成。空气通过进气口进入,在此处光源(激光)照亮粒子,并且散射光被光电探测器转换为信号。然后将这些信号放大并进行处理,以获得PM2.5和PM10的颗粒浓度。
SDS011传感器规格:
- 输出:PM2.5,PM10
- 测量范围:0.0-999.9μg/ m3
- 输入电压:4.7V至5.3V
- 最大电流:100mA
- 休眠电流:2mA
- 响应时间:1秒
- 串行数据输出频率:1次/秒
- 粒径分辨率:≤0.3μm
- 相对误差:10%
- 温度范围:-20〜50°C
0.96英寸OLED显示模块
OLED(有机发光二极管)是一种自发光技术,通过在两个导体之间放置一系列有机薄膜来构造。当电流施加到这些膜时,产生亮光。OLED使用的技术与电视相同,但像素比大多数电视都要少。
对于此项目,我们使用的是单色7针SSD1306 0.96英寸OLED显示屏。它可以在三种不同的通信协议上工作:SPI 3线模式,SPI四线模式和I2C模式。引脚及其功能在下表中说明:
引脚名称 |
其他名称 |
描述 |
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规格:
- OLED驱动器IC:SSD1306
- 分辨率:128 x 64
- 可视角度:> 160°
- 输入电压:3.3V〜6V
- 像素颜色:蓝色
- 工作温度:-30°C〜70°C
通过以下链接了解有关OLED及其与不同微控制器接口的更多信息。
空气质量分析仪的电路图
使用Arduino测量PM2.5和PM10颗粒的电路图非常简单,如下所示。
SDS011传感器和OLED显示模块均由+ 5V和GND供电。SDS011的发送器和接收器引脚连接到Arduino Nano的D3和D4引脚。由于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 |
在性能板上构建电路
我还焊接了Perf板上的所有组件,以使其看起来整洁。但是您也可以将它们放在面包板上。我制作的板子如下。焊接时,请确保不要对电线分类。我焊接的穿孔板如下所示:
空气质量监测仪的代码说明
该项目的完整代码在文档末尾给出。在这里,我们解释了代码的一些重要部分。
该代码使用SDS011, Adafruit_GFX ,并 Adafruit_SSD1306 库。这些库可以从Arduino IDE中的库管理器下载,也可以从那里安装。为此,打开Arduino IDE并转到 Sketch> Include Library> Manage Libraries 。现在搜索SDS011并通过R. Zschiegner安装SDS传感器库。
同样,通过 Adafruit 安装 Adafruit GFX 和 Adafruit SSD1306 库。
将库安装到Arduino IDE之后,通过包含所需的库文件来启动代码。
#包括
在接下来的几行中,定义两个变量来存储PM10和PM2.5值。
浮点p10,p25;
然后,定义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);
现在,在 setup() 函数中,以9600的波特率初始化串行监视器,以进行调试。同样,使用 begin() 函数初始化OLED显示屏和SDS011传感器。
my_sds.begin(3,4); Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC);
在 void loop()中, 从SDS011传感器读取PM10和PM2.5值,并在串行监视器上打印读数。
void loop(){error = my_sds.read(&p25,&p10); 如果(!错误){Serial.println(“ P2.5:” + String(p25)); Serial.println(“ P10:” + String(p10));
之后,使用 setTextSize() 和 setTextColor() 设置文本大小和文本颜色。
display.setTextSize(2); display.setTextColor(WHITE);
然后在下一行中,使用 setCursor(x,y) 方法定义开始文本的位置 。在这里,我们将在OLED显示屏上显示PM2.5和PM10值,因此第一行从(0,15)开始,第二行从(0,40)坐标开始。
display.setCursor(0,15); display.println(“ PM2.5”); display.setCursor(67,15); display.println(p25); display.setCursor(0,40); display.println(“ PM10”); display.setCursor(67,40); display.println(p10);
最后,调用 display() 方法以在OLED Display上显示文本。
display.display(); display.clearDisplay();
Arduino空气质量监测仪测试
一旦硬件和代码准备就绪,就可以测试设备了。为此,将Arduino连接到笔记本电脑,选择Board和Port,然后单击上载按钮。如下图所示,它将在OLED显示屏上显示PM2.5和PM10值。
完整的工作视频和代码如下。希望您喜欢本教程并学到了一些有用的东西。如果您有任何疑问,请将其留在评论部分,或使用我们的论坛进行其他技术查询。