利用精密气体传感器专注于空气质量检测(附代码)

Duke 发表于 2018-07-10 09:35:46 收藏 已收藏
赞(0) •  评论(0

利用精密气体传感器专注于空气质量检测(附代码)

Duke 发表于 2018-07-10 09:35:46

空气质量检测对于健康和安全至关重要,在教室和其他教育场所等特定区域甚至是强制性要求。不过对开发人员而言,空气传感器系统的设计可能问题重重。空气质量传感器在设置期间往往看起来很不稳定,使用时也经常漂移现象。

Amphenol Advanced Sensors 提供的空气质量评估综合套件可化解上述挑战,让开发人员能够抽出身来,专注于空气质量应用而不是低层次的检测功能。

空气质量差带来的影响

空气质量差会给健康和安全带来诸多影响。二氧化碳 (CO2) 和灰尘浓度是空气质量的两大主要决定因素,并且已知会产生显著的影响。

CO2 的血浓度在很大程度上控制了呼吸速率。CO2 浓度升高会导致呼吸速率和心率加快,血压上升,并增加血管舒张。有害健康的 CO2 浓度有一些早期指标,包括分别由外周血管和脑血管舒张引起的出汗和头疼现象。CO2 浓度升高对中枢神经系统的影响可能是潜伏的,表现的症状包括疲乏、困倦,直至抽搐。

在典型的室内环境中,即使 CO2 浓度远低于产生显著影响的浓度,也会导致室内人员工作表现下降和容易分神。因此,许多校区会在校舍的通风系统中强制使用 CO2 监测,这丝毫不足为奇。

CO2 浓度上升会对生理系统产生广泛的影响,同时,灰尘和其他颗粒物 (PM) 由于对呼吸系统产生影响,因而会增加疾病的发病率和死亡率。PM10 颗粒(2.5 到 10 微米 (μm))和 PM2.5(小于 2.5 μm)颗粒很小,足以深入呼吸系统内部。个人即使仅仅在这类颗粒浓度较高的环境中待上几个小时,也可能显现出明显的呼吸和循环系统症状,需要入院就诊。如果长时间身处其中,就会增加循环和呼吸类疾病导致的死亡率,长此以往还会增加肺癌导致的死亡率。更糟糕的是,世界卫生组织发现,根本不存在“…不会产生不良健康影响的安全曝露水平或阈值”。1

传感器挑战

考虑到高 CO2 和 PM 浓度带来的重大影响,空调、空气净化器和其他产品中所用的嵌入式空气质量传感器面临的市场机遇不断扩大。然而开发这类系统可能颇具挑战性。即使是对其他传感器类型有着丰富经验的开发人员也会发现,空气质量传感器因其特殊的贴装、屏蔽和校准需求,可能令人难以掌控。

Amphenol 的空气质量评估套件 AAS-AQS-UNO-RH-CO2 旨在化解以上挑战,为快速开发这类系统提供完整的硬件和软件平台。该套件围绕 Arduino 兼容型板构建,提供了小型显示屏和多个 Telaire/Amphenol 传感器,包括该公司的 SM-PWM-01C 灰尘传感器、T6713 CO2 传感器和 T9602 湿度及温度传感器。传感器和显示屏均通过传感器扩展板连接到主板(图 1)。

Amphenol 空气质量评估套件图片

图 1: Amphenol 空气质量评估套件包括通过传感器扩展板连接到灰尘传感器(板右侧)的 Arduino 兼容型板、显示屏、CO2 传感器(左侧),以及湿度/温度传感器(包扎式电缆);通过一个 USB 接口提供到主机系统的简单电缆连接(左下角)。(图片来源: Amphenol)

在软件端,Amphenol 的空气质量软件包基于 Arduino 软件库构建,可提供高层次空气质量应用的基础。

开发人员可使用随套件提供的全部传感器或仅使用其中几个传感器来对空气质量传感器设计进行评估。工程师在开发用于空调、空气净化器或烟雾检测器的空气质量传感器系统时,可能会将其焦点局限于 PM 检测。用于评估灰尘传感器设计时,Amphenol 还提供了 AAS-AQS-UNO 套件,该版本的套件包含相同的 Arduino 兼容型板、传感器扩展板和显示屏,但仅包含 SM-PWM-01C 灰尘传感器。

PM 检测

不论单独使用还是与其他传感器组合使用,SM-PWM-01C 灰尘传感器都旨在提供 PM 检测的直接替代解决方案。该器件集成了检测细小颗粒所需的全部元器件,包括稳压器、放大器、灵敏度控制子系统和气流室(图 2)。

Amphenol SM-PWM-01C 灰尘传感器示意图

图 2: Amphenol SM-PWM-01C 灰尘传感器是一个完整的信号处理系统,它对通过的颗粒进行红外检测,以生成对应小颗粒 (P1) 和大颗粒 (P2) 的脉冲宽度调制信号。(图片来源: Amphenol)

在传感器的灰尘检测室内,红外光发射二极管 (IR LED) 向通过的灰尘颗粒发出红外光。匹配的光电二极管检测反射的 IR,信号路径则将原始检测器的输出转换为一对采用脉冲宽度调制 (PWM) 的输出流。在检测室内,传感器使用将自身温度升高 40°C 以上的电阻器,以形成恒定的空气对流。因此需要将灰尘传感器安装在垂直位置(如图 1 所示)。

空中悬浮颗粒的大小不一。例如灰尘和花粉颗粒的平均大小约为 20 μm,而香烟的颗粒大小约为 1 μm。如前所述,不同大小的颗粒都会带来相应的健康问题。2.5 μm 及以下的颗粒尤其引人关注,因为这类颗粒能够穿透末端支气管直抵肺泡,有可能妨碍红血球携带氧气的能力。于是,灰尘传感器开发人员找到了评估颗粒大小的一项关键要求。

尽管 SM-PWM-01C 灰尘传感器无法对单独的颗粒计数,但它提供了一种方法,利用其 P1 和 P2 输出端口的 PWM 波形转换来检测不同相对大小的颗粒(图 3)。在每次输出时,一个有源低电平信号代表检测到一个颗粒。通过在软件中比较 P1 和 P2 的转换时间,工程师可以估算相对颗粒大小。

Amphenol SM-PWM-01C 灰尘传感器的 P1 和 P2 PWM 输出示意图

图 3: Amphenol SM-PWM-01C 灰尘传感器的 P1 和 P2 PWM 输出在检测到颗粒时转换为低电平,从而实现了借助一种简单的解决方案来估算局部环境内颗粒物的相对大小和浓度。(图片来源: Amphenol)

颗粒密度

颗粒大小当然不是 PM 检测唯一关注的指标。高浓度的 P10 和 PM2.5 可能给发病率带来直接影响。灰尘传感器的 PWM 信号提供了一种简单、有效的方法来确定相对浓度。Amphenol 将低脉冲占有 (LPO) 因数定义为每个输出信号低于相应的整体测量窗口的时间百分比。因此,根据图 3,P1 LPO = ∑(T1+T2+…+T8)/Top。Amphenol 利用自己的测试设施,演示了 LPO 与灰尘浓度之间的单调递增关系(图 4)。

Amphenol SM-PWM-01C 灰尘传感器输出的图片

图 4: Amphenol SM-PWM-01C 灰尘传感器输出转换为由 Amphenol 确定的具体灰尘浓度值。(图片来源: Amphenol)

在其示例软件包中,Amphenol 提供了用于确定浓度的两种不同设计方案。在一种方案中,软件示例演示了使用主循环直接对 PWM 输出流中的转换数量进行计数。另一种方案则提供了能够与其他软件操作配合的更为灵活的中断驱动方法(列表 1)。在后一示例中,软件使用 PinChangeInterrupt 库来实现一个与 Arduino 中断隔离的简单中断链。

// Assign your channel in pins

#define PM10_IN_PIN 8   //input for PM10 signal, P2

#define PM2_IN_PIN 7  //input for PM2 signal, P1

// Assign your channel out pins - built in LED is 13

#define PM10_OUT_PIN 3

#define PM2_OUT_PIN 13

  // using the PinChangeInt library, attach the interrupts

  // used to read the channels

  attachPCINT(digitalPinToPCINT(PM10_IN_PIN), calcPM10, CHANGE);

  attachPCINT(digitalPinToPCINT(PM2_IN_PIN), calcPM2, CHANGE);

// simple interrupt service routine

void calcPM10()

{

  // if the pin is low, it’s a falling edge of the signal pulse, so let’s record its value

  if (digitalRead(PM10_IN_PIN) == LOW)

 {

    ulPM10_Start = micros();

 }

  else

 {

    // else it must be a rising edge, so let’s get the time and subtract the time of the rising edge

    // this gives use the time between the falling and rising edges i.e. the pulse duration.

    unPM10_InShared = (uint16_t)(micros() - ulPM10_Start);

    // use set the PM10_ flag to indicate that a new PM10_ signal has been received

    bUpdateFlagsShared |= PM10_FLAG;

 }

}

void calcPM2()

{

  if (digitalRead(PM2_IN_PIN) == LOW)

 {

    ulPM2_Start = micros();

 }

  else

 {

    unPM2_InShared = (uint16_t)(micros() - ulPM2_Start);

    bUpdateFlagsShared |= PM2_FLAG;

 }

}

列表 1:Amphenol 软件包的这一局部片段演示了用于确定灰尘浓度的中断驱动方法的设计方案。(代码来源: Amphenol)

CO2 检测

与 Amphenol 灰尘检测器一样,IR 检测也是 Amphenol T6713 CO2 传感器的核心功能。但 T6713 是一个非分散红外 (NDIR) 传感器,其测量的是传感器室内空气中的 CO2 特征波长的吸收,而不是测量反射。依据此采样方法,只需让环境空气扩散到其检测室即可。因此,对习惯获得直接、精确的结果的设计人员而言,这些器件可能看起来有些怪异。

操作 CO2 传感器的主要挑战之一是它们很容易出现漂移。即便用最好的元器件和设计方法构建而成,由于元器件的正常老化(尤其是其 IR 光源),任何气体传感器都会出现漂移。在过去,重新校准需要现场工程师以物理方式,通过紧密的管接头将传感器连接到气体导管,来大幅增加此类传感器的总体生命周期成本。

Amphenol 使用专有的自动背景校准 (ABCLogic) 机制避免了这一手动重新校准的要求。当在 NDIR CO2 传感器中集成的 MCU 上运行时,ABCLogic 算法会收集过去 14 天内每天最低的 CO2 浓度水平。由于 CO2 浓度会随着时间的推移逐渐恢复到外部空气浓度,因此该算法取这些最小浓度作为基准读数。它会忽略可能出现的离群值(即使房间连续几天内被通宵达旦占用时亦如此)。然后,该算法会分析上述每日样本并纠正传感器校准,以计入外部空气预期基准之上任何一致的细小变化(或漂移)。

这一自校准功能被证明在刚刚完成安装后极为有效。任何使用扩散采样的 NDIR CO2 传感器对于搬运、安装环境的特定性质和安装过程都特别敏感。安装期间,现场工程师即使在传感器附近进行普通呼吸,也可能会影响读数,需要几天时间才能复原。事实上,在同一空间内安装多个 CO2 传感器也可能产生不同的结果。但凭借 Amphenol 的 ABCLogic 算法,传感器能够自行纠正,从而长期显示一致的结果(图 5)。

CO2 传感器漂移的图片

图 5: 安装时,由于安装过程(第 1 天)中的应力和条件,即使相同的 CO2 传感器(在此显示为不同颜色的线条)也可能出现漂移,但 Amphenol 专有的 ABCLogic 算法可对传感器进行自校准,以逐渐恢复精度。(图片来源: Amphenol)

在传感器系统设计中,工程师可按各种输出模式使用 Amphenol T6713 CO2 传感器。该器件可设为生成与传感器范围成正比的 PWM 输出。它还支持 UART 和 I2C 接口模式,因此设计人员能够使用简单的标准连接连接到主机 MCU。该器件将 Modbus 协议用于 UART 和 I2C 通信。在 I2C 模式下,它采用 I2C 格式封装消息,而不是使用串行线路协议。该消息格式自身非常简单,根据请求块和响应块,将基本函数代码和相连字节用于相应的地址、寄存器或数据(图 6)。

Amphenol T6713 CO2 传感器的简单消息格式图片

图 6: Amphenol T6713 CO2 传感器在请求(顶部)和响应中使用了一种简单的消息格式,只需几行软件便可实现传感器操作。(图片来源: Amphenol)

#define ADDR_6713  0x15 // default I2C slave address

byte data[6];

int CO2ppmValue;

void GetCO2PPM()

{

  // start I2C

  Wire.beginTransmission(ADDR_6713);

  Wire.write(0x04); Wire.write(0x13); Wire.write(0x8B); Wire.write(0x00); Wire.write(0x01);

  // end transmission

  Wire.endTransmission();

  // read report of current gas measurement in ppm

  delay(2000);

  Wire.requestFrom(ADDR_6713, 4);    // request 4 bytes from slave device

  data[0] = Wire.read();

  data[1] = Wire.read();

  data[2] = Wire.read();

  data[3] = Wire.read();

  //  Serial.print("Func code: "); Serial.println(func_code);

  //  Serial.print("byte count: "); Serial.println(byte_count);

  //  Serial.print("MSB: ");  Serial.print(data[2]); Serial.print("  ");

  //  Serial.print("LSB: ");  Serial.print(data[3]); Serial.print("  ");

  CO2ppmValue = ((data[2] & 0x3F ) << 8) | data[3];

  //Serial.print(ppmValue);

  //return ppmValue;

}

列表 2: Amphenol 软件包中的这一函数使用标准 Arduino Wire 库来访问 CO2 传感器,并使用传感器的简单消息格式读取结果。(代码来源: Amphenol)

最后,T9602 湿度和温度传感器在一个 IP67 模块中集成了 ASIC、EEPROM 和电容式聚合物传感器。内置系统可提供温度补偿,以实现 ±2% 的相对湿度测量精度,并在其 -20°C 至 70°C 的工作范围内实现 ±0.5°C 的精度。与 T6713 CO2 传感器一样,T9602 也提供了多个接口选项,包括 I2C 和脉冲密度调制 (PDM) 输出。借助该器件高水平的集成和简单的接口选项,开发人员可轻松地在设计中部署该器件。在软件端,开发人员使用相同的简单 Arduino Wire.write() 和 Wire.read() 命令(如列表 2 所示)从 T9602 读取数据和将数据写入其中。

尽管对多数开发人员而言,T9602 可能代表了更为熟悉的检测范式,但评估套件的硬件和软件让灰尘和 CO2 检测变得同样简单易行。该套件基于广泛使用的 Arduino 软件平台构建而成,因此可协助开发人员在通用的环境中轻松开展工作。

总结

空中悬浮颗粒物和过高的 CO2 浓度对健康和安全具有短期和长期影响,因而持续引发人们的关注。产品制造商希望借助空气质量检测功能满足这一需求,但工程师们发现其面临着灰尘和 CO2 测量独有的诸多挑战。

凭借 Amphenol 的空气质量评估套件,工程师可以利用精密的气体传感器来处理这些低层次的细节。反过来,工程师可以转而专注于高层次的空气质量应用。

收藏

相关话题
文章来源专栏
+关注

评论(0)

加载更多评论

参与评论

相关文章

分享到

QQ空间 QQ好友 微博
取消