空气污染是许多城市的主要问题,并且空气质量指数每天都在变差。根据世界卫生组织的报告,空气中存在的有害颗粒物导致的过早死亡人数要多于车祸。根据环境保护署(EPA)的数据,室内空气的毒性是室外空气的2至5倍。因此,我们在这里建立了一个项目,通过测量空气中的尘埃密度来监控空气质量。
因此,在继续之前的项目(例如LPG探测器,烟雾探测器和空气质量监控器)之后,我们将把Sharp GP2Y1014AU0F传感器与Arduino Nano连接起来,以测量空气中的尘埃密度。除了灰尘传感器和Arduino Nano,OLED显示屏还用于显示测量值。夏普的GP2Y1014AU0F灰尘传感器在检测非常细小的颗粒(例如香烟烟雾)中非常有效。设计用于空气净化器和空调。
所需组件
- Arduino纳米
- 夏普GP2Y1014AU0F传感器
- 0.96'SPI OLED显示模块
- 跳线
- 220 µf电容器
- 150电阻
夏普GP2Y1014AU0F传感器
夏普的GP2Y1014AU0F是一款纤巧的六针模拟输出光学空气质量/光学灰尘传感器,旨在感应空气中的灰尘颗粒。它根据激光散射原理工作。传感器模块内部,在进气孔附近对角地布置了一个红外发射二极管和一个光电传感器,如下图所示:
当包含灰尘颗粒的空气进入传感器室时,灰尘颗粒会将IR LED光散射到光电探测器。散射光的强度取决于灰尘颗粒。空气中的尘埃颗粒越多,光的强度就越大。传感器的V OUT引脚上的输出电压根据散射光的强度而变化。
GP2Y1014AU0F传感器引脚:
如前所述,GP2Y1014AU0F传感器带有 6针连接器。下图和表格显示了GP2Y1014AU0F的引脚分配:
序号 |
引脚名称 |
引脚说明 |
1个 |
发光二极管 |
LED Vcc引脚。通过150Ω电阻连接到5V |
2 |
LED-地 |
LED接地引脚。连接到GND |
3 |
LED |
用于切换LED的开/关。连接到Arduino的任何数字引脚 |
4 |
地线 |
传感器接地引脚。连接到Arduino的GND |
5 |
输出电压 |
传感器模拟输出引脚。连接到任何模拟引脚 |
6 |
V CC |
正电源引脚。连接到Arduino的5V |
GP2Y1014AU0F传感器规格:
- 低电流消耗:最大20mA
- 典型工作电压:4.5V至5.5V
- 最小可检测粉尘尺寸:0.5µm
- 灰尘密度感应范围:高达580 ug / m 3
- 感应时间:小于1秒
- 尺寸:1.81 x 1.18 x 0.69英寸(46.0 x 30.0 x 17.6毫米)
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及其与不同微控制器接口的更多信息。
电路原理图
下面给出了将Sharp GP2Y1014AU0F传感器与Arduino接口的电路图:
电路非常简单,因为我们仅将GP2Y10传感器和OLED显示模块与Arduino Nano连接在一起。GP2Y10传感器和OLED显示模块均由+ 5V和GND供电。V0引脚与Arduino Nano的A5引脚连接。传感器的LED引脚连接到Arduino的数字引脚12。由于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引脚 |
1个 |
Vcc |
5伏 |
2 |
V Ø |
A5 |
3 |
地线 |
地线 |
4 |
LED |
7 |
5 |
LED-地 |
地线 |
6 |
发光二极管 |
5V至150Ω电阻 |
在性能板上构建电路
将所有组件焊接在穿孔板上之后,其外观如下图所示。但是它也可以建立在面包板上。我已将GP2Y1014传感器焊接在用于连接SDS011传感器的同一板上。焊接时,请确保您的焊锡丝之间应保持足够的距离。
空气质量分析仪的代码说明
该项目的完整代码在文档末尾给出。在这里,我们解释了代码的一些重要部分。
该代码使用 Adafruit_GFX ,并 Adafruit_SSD1306 库。这些库可以从Arduino IDE的库管理器中下载并从那里安装。为此,打开Arduino IDE并转到 Sketch <Include Library <Manage Libraries 。现在搜索 Adafruit GFX 并安装Adafruit的Adafruit GFX库。
同样,通过Adafruit安装Adafruit SSD1306库。
将库安装到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);
之后,定义灰尘传感器的感应和引脚。感测引脚是灰尘传感器的输出引脚,用于读取电压值,而led引脚用于打开/关闭IR Led。
int sensePin = A5; int ledPin = 7;
现在,在 setup() 函数中,以9600的波特率初始化串行监视器,以进行调试。同样,使用 begin() 函数初始化OLED显示。
Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC);
在 loop() 函数内部,从Arduino Nano的模拟引脚5读取电压值。首先,打开IR LED,然后等待0.28ms,然后再读取输出电压。之后,从模拟引脚读取电压值。此操作大约需要40到50微秒,因此在关闭粉尘传感器的电源之前引入40微秒的延迟。根据规范,LED应该每10ms脉冲一次,因此请等待10ms的剩余时间 = 10000-280-40 = 9680微秒 。
digitalWrite(ledPin,LOW); delayMicroseconds(280); outVo = AnalogRead(sensePin); delayMicroseconds(40); digitalWrite(ledPin,HIGH); delayMicroseconds(9680);
然后在接下来的几行中,使用输出电压和信号值计算灰尘密度。
sigVolt = outVo *(5/1024); dustLevel = 0.17 * sigVolt-0.1;
之后,使用 setTextSize() 和 setTextColor() 设置文本大小和文本颜色。
display.setTextSize(1); display.setTextColor(WHITE);
然后在下一行中,使用 setCursor(x,y) 方法定义文本开始的位置。然后使用 display.println() 函数在OLED显示器上打印灰尘密度值。
display.println(“ Dust”); display.println(“ Density”); display.setTextSize(3); display.println(dustLevel);
最后,调用 display() 方法以在OLED Display上显示文本。
display.display(); display.clearDisplay();
测试Sharp GP2Y1014AU0F传感器与Arduino的接口
一旦硬件和代码准备就绪,就可以测试传感器了。为此,将Arduino连接到笔记本电脑,选择Board和Port,然后单击上载按钮。如下图所示,它将在OLED显示屏上显示灰尘密度。
完整的工作视频和代码如下。希望您喜欢本教程并学到了一些有用的东西。如果您有任何疑问,请将其留在评论部分,或使用我们的论坛进行其他技术查询。