给物联网增加带补偿功能的空气质量传感器

投稿人:Digi-Key 北美编辑

通过给智能楼宇系统增加空气质量传感器,工程师可以实现有害气体和化学物质聚积的早期预警,但商用空气质量传感器缺乏加入智能楼宇网络所需的集成功能。然而,借助易于使用的开发套件,工程师可以增加所需的处理能力和无线功能以克服这一缺陷。

为确定环境中 CO2 或挥发性有机化合物 (VOC) 的 ppm 浓度,最受欢迎的空气质量监测设备往往采用半导体电化学元件,这些元件可产生与被测气体或化学物质的浓度成比例的输出电压。但是,温度和湿度均会影响测量精度。温度和湿度传感器可以为连续补偿算法提供数据以改善空气质量传感器输出的精度,但并没有常规性地与此类空气质量传感器集成。

此外,当前各类空气质量传感器缺乏其他类型传感器常用的无线技术,而要连接到智能楼宇网络必须有无线技术。

这些缺陷使得工程师更难以为家庭、商业和工业应用设计支持无线网络的空气质量传感器。

不过,最近推出的适用于空气质量监测产品的开发套件包含了温度和湿度传感器以及无线连接,因此相关设计挑战迎刃而解。本文介绍如何使用这些开发套件来缩短空气质量监测产品的设计周期。

MOS 传感器特性

监测空气质量的传感器有多种类型。实例包括电化学 (EC)、非分散红外 (NDIR)、光电离检测器 (PID) 和热类型。

但是,金属氧化物半导体 (MOS) 类型最符合智能楼宇应用的监测要求。这些器件结构紧凑,价格相对便宜,可以采用电池供电(具有足够容量定期为 MOS 传感器的加热器供电),检测范围与室内工作场所中典型的 C02 和 VOC 浓度相匹配(图 1)。

卧室中 CO2 和 VOC 浓度变化图

图 1:一天中卧室内 CO2 和 VOC 的浓度变化。(图片来源:IDT

在运行中,检测元件被加热到数百摄氏度 (˚C)。精确的温度决定了元件对特定气体或化学物质的选择性。灵敏度取决于材料的厚度。

传感器采用 n-p-半导体检测元件制造。检测元件吸收(p-)或解吸(n-)目标化学物质,与目标化合物的电化学反应会增加或移除半导体导带中的电子。电子迁移使检测元件的电阻率或电导率从已知基线值呈线性变化(图 2)。

MOS 传感器元件的电阻率图

图 2:响应目标化学物质浓度的变化,MOS 传感器元件的电阻率呈线性变化。本例中的化学物质为乙醇。(图片来源:IDT)

ams 为智能家居应用提供了一种商用 MOS 传感器:CCS811B 是一款数字 MOS 传感器解决方案,集成了微控制器、模数转换器 (ADC) 和 I2C 接口(图 3)。该器件处理传感器原始测量结果,输出“等效总 VOC” (eTVOC) 和“等效 CO2” (eCO2) 值。该传感器采用 10 引线 2.7 × 4.0 × 1.1 mm 封装。

ams CCS811B 数字 MOS 传感器图

图 3:ams 的 CCS811B 数字 MOS 传感器集成一个板载微控制器,用于处理传感器的原始数据。(图片来源:ams)

对于给定的空气成分、温度和湿度,每个 MOS 传感器都有一个特征基线电阻。它用作计算气体或化学物质浓度的基础:电阻相对于基线值的差异与气体或化学物质浓度成比例。

实际应用中的环境温度和湿度会影响传感器元件的基线电阻,改变其灵敏度,进而改变其精度。例如,当环境温度升高时,传感器元件的基线电阻(湿度一定时)会提高,而湿度增加时,基线电阻(温度一定时)会降低。

传感器制造商建议将空气质量传感器与温度和湿度传感器配合使用,以便监控微处理器可以运行算法来连续补偿基线电阻的变化。

针对此类应用,Bosch SensortecBME280 是一款颇受欢迎的器件。BME280 将数字湿度、压力和温度结合在一个 LGA 封装中,基底面为 2.5 x 2.5 x 0.93 mm。该传感器具有 I2C 接口,可与外部微处理器通信,并需要 1.71 至 3.6 V 的电源为传感器供电。当传感器处于休眠模式时,电流消耗降至 0.1 微安 (μA)。

商用 MOS 传感器缺乏加入无线网络所需的内置连接能力。然而,有许多低功耗无线芯片可专用于直接与传感器介接。其中许多器件还包含非常强大的嵌入式微处理器,足以运行所需算法来处理原始传感器数据及补偿湿度和温度变化。(有关适合此应用的无线技术的更多信息,请参见 Digi-Key 文章“低功耗无线技术之比较”。)

开发基础型空气质量传感器

设计具无线连接功能的空气质量监测器需要工程师将分立式 MOS 传感器、湿度和温度传感器、无线收发器以及(某些情况下)微处理器结合成一个有效系统。这种复杂性使得该任务非常艰巨且耗时。

然而,市场上有一系列开发套件可供选择,它们能大大简化初始设计和测试过程。例如,SparkFun Electronics 用于空气质量传感器开发的 SEN-14348 Qwiic 环境型组合分线板将 CCS811B 空气质量传感器与用于温度和湿度补偿的 BME280 传感器相结合,并含有两个物理 I2C 接口,采用 4 引脚极化 Qwiic 连接器(图 4)。

SparkFun SEN-14348 分线板的图片

图 4:SparkFun 的 SEN-14348 分线板结合了 CCS811B 传感器和用于温度和湿度补偿的 BME280 器件。(图片来源:SparkFun)

虽然 SEN-14348 可用作温度和湿度补偿型空气质量传感器设计的基础,但它并不是一个综合性解决方案。CCS811B 包含一个微处理器,但除了监控周期性测量和执行基线补偿之外,该器件的能力有限。对于更复杂的应用,例如监测空气质量阈值或计算气体/化学物质长期浓度,则超出了该微处理器的能力。为利用 SEN-14348 支持更高级的应用,需要将其连接到功能更强大的微处理器。

对于初步开发,SparkFun 建议将 SEN-14348 分线板连接到 Arduino 兼容计算机,例如 RedBoard。RedBoard 通过 USB 电缆(其也为电路板供电)连接到 PC,以便从 Arduino IDE 上传代码。为将 RedBoard 与 Qwiic 分线板一起使用,计算机需要利用 DEV-14352 Qwiic 扩展板进行适配。扩展板含有一个 I2C 连接器,并将 5 V RedBoard 电源调节至 SEN-14348 分线板上传感器所需的 3.3 V 电压。

开始的时候,开发人员需要从 Github 下载 SparkFun CCS811 和 BME280 Arduino 库。传感器从 Arduino IDE 对采样率、有限脉冲响应 (FIR) 滤波器系数和过采样模式等信息进行配置。

下面的代码片段显示了获取读数之前初始化 BME280 传感器的例程(CCS811 的初始化例程类似)。

复制

#include <SparkFunBME280.h>

#include <SparkFunCCS811.h>

#define CCS811_ADDR 0x5B //Default I2C Address

//#define CCS811_ADDR 0x5A //Alternate I2C Address

//Global sensor objects

CCS811 myCCS811(CCS811_ADDR);

BME280 myBME280;

void setup()

{

Serial.begin(9600);

Serial.println();

Serial.println("Apply BME280 data to CCS811 for compensatio

n.");

//This begins the CCS811 sensor and prints error status of .

begin()

CCS811Core::status returnCode = myCCS811.begin();

if (returnCode != CCS811Core::SENSOR_SUCCESS)

{

Serial.println("Problem with CCS811");

printDriverError(returnCode);

}

else {

Serial.println("CCS811 online");

}

//Initialize BME280

//For I2C, enable the following and disable the SPI section

myBME280.settings.commInterface = I2C_MODE;

myBME280.settings.I2CAddress = 0x77;

myBME280.settings.runMode = 3; //Normal mode

myBME280.settings.tStandby = 0;

myBME280.settings.filter = 4;

myBME280.settings.tempOverSample = 5;

myBME280.settings.pressOverSample = 5;

myBME280.settings.humidOverSample = 5;

//Calling .begin() causes the settings to be loaded

delay(10);  //Make sure sensor had enough time to turn on.B

ME280 requires 2ms to start up.

byte id = myBME280.begin(); //Returns ID of 0x60 if successf

ul

if (id != 0x60)

{

Serial.println("Problem with BME280");

}

else {

Serial.println("BME280 online");

}

}

代码片段 1:获取读数之前初始化 BME280 传感器的例程。(代码来源:SparkFun)

要从传感器获取读数,必须在代码(Arduino“草图”)中添加一个 void 循环(代码片段 2)。

复制

void loop() {

if (myCCS811.dataAvailable()) //Check to see if CCS811 has n ew data (it's the slowest sensor)

{

myCCS811.readAlgorithmResults(); //Read latest from CCS81

1 and update tVOC and CO2 variables

//getWeather(); //Get latest humidity/pressure/temp data f

rom BME280

printData(); //Pretty print all the data

}

else if (myCCS811.checkForStatusError()) //Check to see if C

CS811 has thrown an error

{

Serial.println(myCCS811.getErrorRegister()); //Prints what

ever CSS811 error flags are detected

}

delay(2000); //Wait for next reading

}

代码片段 2:从 CCS811 传感器获取读数并输出的例程。(代码来源:SparkFun)

来自 BME280 的环境数据(“ENV_DATA”)被写入 CCS811,因此可以将补偿因子应用于基线电阻,以考虑温度和湿度的影响。

湿度和温度信息以无符号 16 位整数形式传递,分辨率为 1/512% RH 和 1/512 度。湿度的默认值为 50% (= 0x64, 0x00)。例如,48.5% 的湿度 = 0x61, 0x00。温度读数包括一个偏移,0 对应 -25°C。默认值为 25°C (= 0x64, 0x00)。例如,23.5°C = 0x61, 0x00。

从 BME280 向 CCS811 馈送温度和湿度信息后,微处理器便可应用补偿算法(代码片段 3)。

复制

void loop() {

//Check to see if data is available

if (myCCS811.dataAvailable())

{

//Calling this function updates the global tVOC and eCO2 v

ariables

myCCS811.readAlgorithmResults();

//printData fetches the values of tVOC and eCO2

printData();

float BMEtempC = myBME280.readTempC();

float BMEhumid = myBME280.readFloatHumidity();

Serial.print("Applying new values (deg C, %): ");

Serial.print(BMEtempC);

Serial.print(",");

Serial.println(BMEhumid);

Serial.println();

//This sends the temperature data to the CCS811

myCCS811.setEnvironmentalData(BMEhumid, BMEtempC);

}

else if (myCCS811.checkForStatusError())

{

Serial.println(myCCS811.getErrorRegister()); //Prints what

ever CSS811 error flags are detected

}

delay(2000); //Wait for next reading

}

代码片段 3:馈送温度和湿度数据以使 CCS811 传感器能够执行补偿算法。(代码来源:SparkFun)

给物联网增加空气质量传感器

虽然利用 SparkFun SEN-14348 分线板、Arduino 计算机和扩展板可以控制和整理空气质量数据,但该系统没有无线连接能力。Cypress SemiconductorCY8CKIT-042-BLE-A PSoC 4 BLE Pioneer 套件包含无线功能,可满足无线连接要求。

PSoC 4 BLE Pioneer 套件是一款旨在帮助工程师开发无线传感器应用的开发工具。该套件允许工程师编写和编译应用程序,然后将固件移植到 Cypress PSoC 4 低功耗蓝牙 SoC。该 SoC 采用 32 位、48 MHz Arm® Cortex®-M0 处理器和低功耗蓝牙无线电。

这种情况下,分线板的补偿空气质量数据通过分线板的 I2C 接口馈送到套件印刷电路板上的 I2C 连接器。除了从 I2C 接口的 SDA 线接收数据外,处理器还能复位、中断传感器及将其置于休眠状态。

使用该套件时,需要进行一些开发工作来编程和调试空气质量传感器设计。Cypress 提供 Windows CySmart 主机仿真工具(在 PC 上运行)和低功耗蓝牙适配器,以用于编码和测试。在开发过程中,适配器和 Pioneer 套件可以同时连接到共用主机 PC(图 5)。

Cypress 低功耗蓝牙开发工具的图片(点击放大)

图 5:Cypress 提供低功耗蓝牙开发工具和适配器(配置为低功耗蓝牙中央器件),以帮助利用 PSoC 4 BLE Pioneer 套件进行应用固件开发。(图片来源:Cypress Semiconductor)

采用 CY8CKIT-042-BLE-A PSoC 4 BLE Pioneer 套件的设计开发流程包括四个阶段:

  • 在 PSoC Creator 原理图页面中创建设计
  • 编写固件以初始化和处理低功耗蓝牙事件
  • 利用 Pioneer 套件对低功耗蓝牙 SoC 进行编程
  • 使用 CySmart 主机仿真工具(或手机应用)测试设计

(有关低功耗蓝牙应用开发的详细信息,请参见 Digi-Key 文章“兼容蓝牙 4.1、4.2 和 5 的低功耗蓝牙 SoC 和工具可应对物联网挑战”。)

借助应用程序固件,低功耗蓝牙 SoC 得以整理和处理传感器数据,并通过低功耗蓝牙链路将信息传输到智能手机等设备进行分析和显示。

然后,来自传感器的数据可以从智能手机转发到云服务器以保存数据,并可能基于数据触发“If This Then That” (IFTTT) 通知。例如,若儿童卧室中的 CO2 读数持续较高,可能会触发父母智能手机通知,建议增加通风。

直接从传感器连接到云要更复杂一点。低功耗蓝牙 SoC(例如 Cypress 元器件)一般缺少本地 IPv6 网络层。解决方案是将蓝牙数据发送到一个使用替代协议的“网关”,从而连接到云(例如 Wi-Fi)。

Cypress 和 SparkFun 再次合作,使其成为可能。通过使用 Cypress CY8CKIT-062-BLE PSoC 6 BLE Pioneer 套件和 SparkFun DEV-14531 PSoC Pioneer 物联网扩展板(配备 XB2B-WFWT-001 XBee Wi-Fi 模块),工程师可以开发一个网络,该网络从传感器获取补偿空气质量数据,通过低功耗蓝牙链路将数据从 CY8CKIT-042-BLE-A PSoC 4 BLE Pioneer 套件传输到 CY8CKIT-062-BLE PSoC 6 BLE Pioneer 套件,然后从那里通过 Wi-Fi 传输到云端(图 6)。(有关使用 Wi-Fi 模块连接到云的更多信息,请参见 Digi-Key 技术文章“802.11x 模块及开发套件可帮助简化物联网无线设计工作”。)

利用 Cypress 和 SparkFun 开发套件构建的无线系统图

图 6:这个由 Cypress 和 SparkFun 开发套件构建的无线系统使用低功耗蓝牙和 Wi-Fi 将空气质量传感器数据发送到云端。(图片来源:Digi-Key Electronics)

总结

将空气质量传感器纳入智能楼宇网络变得越来越重要,因为人们日益意识到 VOC 及 CO2 等气体在受控通风建筑物中聚积会给身体带来有害影响。

商用空气质量传感器目前缺乏其他(模块化)传感器常见的强大集成微处理器和无线连接功能。然而,借助易于使用的设计工具,工程师不仅能够补偿原始空气质量数据的温度和湿度影响,还能通过低功耗蓝牙网络无线传输信息,利用智能手机网络或 Wi-Fi 模块将信息传输到云端。

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 Digi-Key Electronics 的观点、看法和意见,也不代表 Digi-Key Electronics 官方政策。

关于此出版商

Digi-Key 北美编辑