如何通过颗粒物传感器SDS011监测空气质量

空气污染

我们周围的空气是由气体和其他几种我们肉眼看不见的元素组成的。其中就存在很多悬浮在空气中的固体或液体物质的微观颗粒,它们非常小,尺寸都在微米的范围内,所以你不能看到它们,但这些微粒可以被人们吸入,这就可能会导致许多健康问题。在全球范围内,导致过早死亡的第六大风险因素就是暴露于高浓度的颗粒物中,引发心脏病、中风、肺癌、慢性肺部疾病和其他呼吸道感染。

 空气中的颗粒物

颗粒物

颗粒物本身根据其大小被分为两类:

  1. 直径在2.5到10微米之间的被称为粗颗粒,用PM10表示;
  2. 直径小于或等于2.5微米的颗粒称为超细颗粒,用PM2.5表示。

如将这些颗粒的直径与我们的头发直径进行比较,头发的直径大约是50-70微米。

SDS011颗粒物传感器

了解以上的基础信息后,我们就可以尝试通过SDS011颗粒物传感器来监测空气中颗粒的浓度。SDS011本身配置有一个小风扇,用于模块进气口的空气循环,当风扇打开时,空气会从进气口吸入,吸入的空气经过传感器后排出,这样就实现空气采样和检测。因为配置风扇的原因,所以传感器在工作时会发出轻微的风扇噪音。

SDS011颗粒物传感器

 SDS011参数

  • 测量种类:PM2.5、PM10
  • 测量范围:
  •   PM2.5: 0.0-999.9微克/立方米
  • PM10: 0.0-1999.9微克/立方米
  • 额定电压:5V
  • 额定电流:70mA±10mA
  • 温度范围:
  • 储存环境:-20~+60℃
  • 工作环境:-10~+50℃
  • 湿度范围:
  • 储存环境:MAX 90%
  • 工作环境:MAX 70%
  • 工作压力:86KPa~110KPa
  • 响应时间:1s
  • 刷新频率:1Hz
  • 最小粒径:0.3μm
  • 相对误差:±15% and ±10μg/m3 maximum -25 degrees, 50%RH
  • 产品尺寸:71x70x23mm

供电要求

  •  电源电压:4.7~5V
  • 电源:大于1W(电流大于200mA)
  • 电源电压纹波小于20mV

SDS011传感器的工作原理:

SDS011工作原理

 传感器内部集成了激光器和检测二极管,由于模块完全封闭,激光器和检测二极管就不会受到环境光线的影响。工作时通过风扇从进气口吸进空气,空气流过激光器和二极管,然后从排出,此时检测二极管就可以通过利用散射原理判断激光器照射到二极管上的光量变化,来检测空气中存在的微粒浓度。这个信号经过传感器内部的放大处理后,最终进行输出。

Arduino读取颗粒物传感器SDS011的值

Arduino要实现简单快速读取SDS011的输出值,需要加载SDS011相应的库文件。

 加载库文件可以通过Arduino IDE的Library Manager实现,搜索sds011后安装即可。

Arduino与SDS011传感器的硬件连接

 颗粒物传感器SDS011 Arduino示例代码

    #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中得到一个错误提示。 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
由于颗粒物传感器的不同型号和品牌,其代码实现方式也会有所不同。以下是一个基于Arduino平台的颗粒物传感器SDS011)的读取代码示例: ```arduino #include <SoftwareSerial.h> SoftwareSerial sdsSerial(10, 11); // RX, TX void setup() { Serial.begin(9600); sdsSerial.begin(9600); } void loop() { if (sdsSerial.available() >= 10) { // 等待至少10个字节的数据 if (sdsSerial.read() == 0xAA) { // 数据帧头 uint8_t data[8]; uint8_t checksum = 0; for (int i = 0; i < 8; i++) { data[i] = sdsSerial.read(); checksum += data[i]; } if (checksum == sdsSerial.read()) { // 校验和 uint16_t pm25 = data[1] << 8 | data[0]; uint16_t pm10 = data[3] << 8 | data[2]; Serial.print("PM2.5: "); Serial.print(pm25); Serial.print(" ug/m3\tPM10: "); Serial.print(pm10); Serial.println(" ug/m3"); } } } delay(1000); } ``` 该代码的基本思路是通过软串口从SDS011传感器读取串口数据,并解析出其中的PM2.5和PM10浓度数据。具体实现方式如下: 1. 在`setup()`函数中,初始化Arduino的硬串口(用于与PC进行通信)和软串口(用于与SDS011传感器进行通信)。 2. 在`loop()`函数中,首先判断是否有足够的数据可以读取。SDS011传感器每次会发送10个字节的数据,因此需要等待至少10个字节才能进行解析。 3. 如果读取到了数据,首先判断数据帧头是否正确(0xAA),然后读取剩下的8个数据字节,并计算校验和。如果校验和和最后一个字节相等,则表示数据是正确的。 4. 根据数据格式解析出PM2.5和PM10的浓度值,并通过硬串口打印出来。 5. 为了避免频繁读取数据,每次读取后延迟1秒钟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

niuniu307

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值