赞
踩
我们周围的空气是由气体和其他几种我们肉眼看不见的元素组成的。其中就存在很多悬浮在空气中的固体或液体物质的微观颗粒,它们非常小,尺寸都在微米的范围内,所以你不能看到它们,但这些微粒可以被人们吸入,这就可能会导致许多健康问题。在全球范围内,导致过早死亡的第六大风险因素就是暴露于高浓度的颗粒物中,引发心脏病、中风、肺癌、慢性肺部疾病和其他呼吸道感染。
颗粒物本身根据其大小被分为两类:
如将这些颗粒的直径与我们的头发直径进行比较,头发的直径大约是50-70微米。
了解以上的基础信息后,我们就可以尝试通过SDS011颗粒物传感器来监测空气中颗粒的浓度。SDS011本身配置有一个小风扇,用于模块进气口的空气循环,当风扇打开时,空气会从进气口吸入,吸入的空气经过传感器后排出,这样就实现空气采样和检测。因为配置风扇的原因,所以传感器在工作时会发出轻微的风扇噪音。
传感器内部集成了激光器和检测二极管,由于模块完全封闭,激光器和检测二极管就不会受到环境光线的影响。工作时通过风扇从进气口吸进空气,空气流过激光器和二极管,然后从排出,此时检测二极管就可以通过利用散射原理判断激光器照射到二极管上的光量变化,来检测空气中存在的微粒浓度。这个信号经过传感器内部的放大处理后,最终进行输出。
Arduino要实现简单快速读取SDS011的输出值,需要加载SDS011相应的库文件。
加载库文件可以通过Arduino IDE的Library Manager实现,搜索sds011后安装即可。
- #include "SdsDustSensor.h"
-
- int rxPin = 0;
- int txPin = 1;
- SdsDustSensor sds(rxPin, txPin);
-
- void setup() {
- Serial.begin(9600);
- sds.begin();
-
- Serial.println(sds.queryFirmwareVersion().toString()); // prints firmware version
- Serial.println(sds.setActiveReportingMode().toString()); // ensures sensor is in 'active' reporting mode
- Serial.println(sds.setContinuousWorkingPeriod().toString()); // ensures sensor has continuous working period - default but not recommended
- }
-
- void loop() {
- PmResult pm = sds.readPm();
- if (pm.isOk()) {
- Serial.print("PM2.5 = ");
- Serial.print(pm.pm25);
- Serial.print(", PM10 = ");
- Serial.println(pm.pm10);
-
- // if you want to just print the measured values, you can use toString() method as well
- Serial.println(pm.toString());
- } else {
- // notice that loop delay is set to 0.5s and some reads are not available
- Serial.print("Could not read values from sensor, reason: ");
- Serial.println(pm.statusToString());
- }
-
- delay(500);
- }
最终通过串口监视器可以得到输出:
通过得到的输出值,就可以简单判断当前环境的空气质量了。
需要注意的是,当我恩需要重新上传代码时,最好断开传感器与Arduino的连接,否则,很可能在Arduino IDE中得到一个错误提示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。