带有Arduino Nano的SDS011构建空气质量分析仪

发布时间:2023-03-20  

  空气污染是许多城市的主要问题,空气质量指数每天都在恶化。根据世界卫生组织的报告,由于空气中存在的有害颗粒的影响而过早死亡的人比死于车祸的人多。根据环境保护署 (EPA) 的说法,室内空气的毒性可能是室外空气的 2 到 5 倍。因此,我们在这里构建了一个设备,通过测量空气中的 PM2.5 和 PM10 颗粒来监测空气质量。


  我们之前使用 MQ135 气体传感器进行空气质量监测,使用夏普 GP2Y1014AU0F 传感器测量空气中的灰尘密度。这次我们使用 带有 Arduino Nano 的 SDS011 传感器来构建空气质量分析仪。SDS011传感器可以计算空气中PM2.5和PM10颗粒物的浓度。在这里,实时 PM2.5 和 PM 10 值将显示在OLED 显示屏上。


  所需组件

  Arduino纳米

  Nova PM 传感器 SDS011

  0.96‘ SPI OLED显示模块

  跳线

  Nova PM 传感器 SDS011

poYBAGLwxYuAHtMWAASkZ43LViA861.png

  SDS011 传感器是 Nova Fitness 开发的最新空气质量传感器。它利用激光散射原理工作,可以得到空气中0.3~10μm的颗粒浓度。该传感器由小风扇、进气阀、激光二极管和光电二极管组成。空气通过进气口进入,光源(激光)照亮颗粒,散射光通过光电探测器转换为信号。然后对这些信号进行放大处理,得到 PM2.5 和 PM10 的颗粒物浓度。

pYYBAGLwxYWAELDkAABj2XCKAe0367.png

  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 使用与电视相同的技术,但像素比我们的大多数电视少。

poYBAGLwxYGAOKIKAAI1SgYl8_I417.png

  对于这个项目,我们使用单色 7 针 SSD1306 0.96” OLED 显示屏。它可以在三种不同的通信协议上工作:SPI 3 线模式、SPI 四线模式和 I2C 模式。下表对引脚及其功能进行了说明:

poYBAGLwxXyAXNnLAABmqGhaxkw862.png

  通过以下链接了解有关 OLED 及其与不同微控制器接口的更多信息。

  空气质量分析仪电路图

  使用 Arduino 测量 PM2.5 和 PM10 颗粒的电路图非常简单,如下所示。

pYYBAGLwxXiAWinMAAF2AMgWTLg167.png

poYBAGLwxXSAAd4UAAcd-JX6pJI649.png

  SDS011 传感器和 OLED 显示模块均采用 +5V 和 GND 供电。SDS011 的发送器和接收器引脚连接到 Arduino Nano 的 D3 和 D4 引脚。由于 OLED Display 模块使用SPI 通信,我们在 OLED 模块和 Arduino Nano 之间建立了 SPI 通信。连接如下表所示:

pYYBAGLwxXCAa11vAAA5Y9_Dp78442.png

  在性能板上构建电路

  我还焊接了性能板上的所有组件,使其看起来整洁。但你也可以在面包板上制作它们。我做的板子如下。焊接时,请确保不要对电线进行分类。我焊接的性能板如下图所示:

poYBAGLwxWyAQAWsAARTT2OMUXI476.png

  空气质量监测仪代码说明

  该项目的完整代码在文档末尾给出。在这里,我们将解释代码的一些重要部分。

  该代码使用SDS011、Adafruit_GFX和Adafruit_SSD1306 库。这些库可以从 Arduino IDE 中的库管理器下载,也可以从那里安装。为此,打开 Arduino IDE 并转到Sketch 》 Include Library 》 Manage Libraries。现在搜索 SDS011 并安装R. Zschiegner 的 SDS Sensor 库。

pYYBAGLwxWiATNadAAC4TWGRqd4224.png

  同样,安装 Adafruit 的Adafruit GFX和Adafruit SSD1306库。

将库安装到 Arduino IDE 后,通过包含所需的库文件来启动代码。

#include 

#include 

#include 

#include 

 


在接下来的几行中,定义两个变量来存储 PM10 和 PM2.5 值。


 


浮动 p10,p25;

 


然后,定义 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 显示器(SCREEN_WIDTH、SCREEN_HEIGHT、OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_CS);

 


现在在setup()函数中,以 9600 的波特率初始化串行监视器以进行调试。此外,使用begin()函数初始化 OLED 显示器和 SDS011 传感器。


 


my_sds.begin(3,4);

序列号.开始(9600);

display.begin(SSD1306_SWITCHCAPVCC);

 


在void loop() 中,从 SDS011 传感器读取 PM10 和 PM2.5 值,并在串行监视器上打印读数。


 


无效循环(){

  错误 = my_sds.read(&p25,&p10);

  如果(!错误){

    Serial.println("P2.5:"+String(p25));

    Serial.println("P10:"+String(p10));

 


之后,使用setTextSize()和setTextColor()设置文本大小和文本颜色。


 


display.setTextSize(2);

display.setTextColor(白色);

 


然后在下一行中,使用 setCursor(x,y)方法定义开始文本的位置。在这里,我们将在 OLED 显示屏上显示 PM2.5 和 PM10 值,因此第一行从 (0,15) 开始,而第二行从 (0, 40) 坐标开始。


 


display.setCursor(0,15);

display.println("PM2.5");

display.setCursor(67,15);

显示.println(p25);

display.setCursor(0,40);

display.println("PM10");

display.setCursor(67,40);

display.println(p10);

 


最后,调用display()方法在 OLED Display 上显示文本。


 


显示.显示();

display.clearDisplay();

 


  Arduino 空气质量监测仪测试


  硬件和代码准备就绪后,就可以测试设备了。为此,将 Arduino 连接到笔记本电脑,选择板和端口,然后点击上传按钮。如下图所示,它将在 OLED 显示屏上显示 PM2.5 和 PM10 值。

pYYBAGLwxWGAUzXfAAVfqhG4SC0085.png

#include
#include
#include
#include
浮动 p10,p25;
内部错误;
SDS011 my_sds;
#define SCREEN_WIDTH 128 // OLED 显示宽度,以像素为单位
#define SCREEN_HEIGHT 64 // OLED 显示高度,以像素为单位
// 使用软件 SPI 连接的 SSD1306 显示器的声明(默认情况):
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 显示(屏幕宽度,屏幕高度,
OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_CS);
无效设置(){
my_sds.begin(3,4);
序列号.开始(9600);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
显示.显示();
}
无效循环(){
错误 = my_sds.read(&p25,&p10);
如果(!错误){
Serial.println("P2.5:"+String(p25));
Serial.println("P10:"+String(p10));
display.setTextSize(2);
display.setTextColor(白色);
display.setCursor(0,15);
display.println("PM2.5");
display.setCursor(67,15);
显示.println(p25);
display.setCursor(0,40);
display.println("PM10");
display.setCursor(67,40);
display.println(p10);
显示.显示();
display.clearDisplay();
}
延迟(100);
}

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>