在物聯網中添加補償式空氣品質感測器
資料提供者:DigiKey 北美編輯群
2018-08-28
工程師在智慧建築系統中添加空氣品質感測器,即可在有害氣體及化學物質累積時發出預警,但商用空氣品質感測器卻缺乏融入智慧建築網路的整合式功能。不過,工程師可改採容易使用的開發套件來增加必要的處理能力和無線功能,即可彌補缺陷。
在判定環境中 CO2 或揮發性有機化合物 (VOC) 的 ppm 濃度時,最常使用的空氣品質裝置往往採用半導體電化學元件;此元件可產生與受測氣體或化學物質濃度成比例的輸出電壓。然而,量測精準度會受到溫度和濕度的影響。溫度和濕度感測器能為連續補償演算法提供資料,以便空氣品質感測器改善輸出準確度,但這類型空氣品質感測器在一般情況下並不會整合溫濕度感測器。
此外,目前的空氣品質感測器系列也缺乏其他感測器類型常用的無線技術,因此無法連線到智慧建築網路。
礙於這些缺陷,工程師更難針對居家、商業和工業應用,設計出支援無線網路的空氣品質感測器。
不過,最近針對空氣品質監控產品推出的開發套件,就含有溫度和濕度感測器以及無線連線能力,因此能輕鬆因應這項設計挑戰。本文將說明如何使用這些開發套件,來縮短空氣品質產品的設計週期。
MOS 感測器特性
空氣品質監控感測器有幾種類型,像是電化學 (EC)、非分散式紅外線 (NDIR)、光離子化偵測器 (PID) 和熱感測器。
但是,只有金屬氧化物半導體 (MOS) 類型最符合智慧建築應用的監測需求。此類元件體積小巧、價格相對便宜、可用電池運作 (具有足夠電量可定期為 MOS 感測器的加熱器供電),而且偵測範圍與室內工作場所中典型的 CO2 和 VOC 濃度相符 (圖 1)。
圖 1:一天中臥室內 CO2 和 VOC 的濃度變化。(圖片來源:IDT)
運作的時候,感測元件會加熱到攝氏數百度 (˚C)。元件對特定氣體或化學品的選擇性,取決於精準的溫度。靈敏度則視材料的厚度而定。
感測器是利用 N 型或 P 型半導體感測元件製成。感測元件會吸收 (P 型) 或釋出 (N 型) 目標化學物質,與目標化合物產生電化學反應後,半導體傳導帶中的電子會增加或是消除。而電子遷移效應,會讓感測元件的電阻率或傳導性從已知的基線值產生線性變化 (圖 2)。
圖 2:MOS 感測器元件的電阻率,會隨著目標化學物質的濃度變化產生線性變化。本例中為乙醇。(圖片來源:IDT)
ams 提供一款適用於智慧家庭應用的商用 MOS 感測器:CCS811B 數位 MOS 感測器解決方案,其中含有微控制器、類比數位轉換器 (ADC) 和 I2C 介面 (圖 3)。此元件可處理感測器的原始量測值,以輸出「等效總 VOC」(eTVOC) 和「等效 CO2」(eCO2) 值;採用 10 引線 2.7 x 4.0 x 1.1 mm 封裝。
圖 3:ams 的 CCS811B 數位 MOS 感測器中含有微控制器,可在板件上處理感測器原始資料。(圖片來源:ams)
針對特定的空氣組成、溫度及濕度,每個 MOS 感測器都具有特性基線電阻,以做為氣體或化學物質濃度的計算基礎。也就是說,電阻相對於基線值的差異,會與氣體或化學物質的濃度成比例。
應用現場的環境溫度和濕度會影響感測器元件的基線電阻,造成元件的靈敏度改變,進而影響準確度。舉例來說,環境溫度升高會讓感測器元件對指定濕度的基線電阻增加,濕度增加則會讓指定溫度的基線電阻降低。
感測器製造商建議將空氣品質感測器搭配溫度和濕度感測器一起使用,以便監測型微處理器執行演算法,對基線電阻的變化進行補償。
Bosch Sensortec 的 BME280 是常用於這種應用的裝置之一。BME280 結合了數位濕度、壓力和溫度,採用覆蓋區為 2.5 x 2.5 x 0.93 mm 的 LGA 封裝。這款感測器擁有 I2C 介面,能與外部微處理器進行通訊,而且需要 1.71 至 3.6 V 的電源供應器以供電給感測器。當感測器處於睡眠模式時,電流消耗量會降至 0.1 μA。
商用 MOS 感測器並未內建連線能力,無法加入到無線網路中,但目前已經有多款低功率無線晶片,能與感測器直接介接。其中更有不少晶片含有功能強大的微處理器,足以執行必要的演算法,以處理感測器原始資料,並針對濕度和溫度的變化進行補償。(若想深入瞭解適合此應用的無線技術,請參閱 DigiKey 的文章《低功率無線技術比較》。)
開發基本型空氣品質感測器
要設計無線連線的空氣品質監測器,工程師必須在可運作的系統中結合離散式 MOS 感測器、濕度和溫度感測器、無線收發器,有些情況下甚至還需要微處理器。面對這麼高的複雜性,這無疑是個既困難又耗時的工程。
然而,目前市面上有一系列的開發套件,能大幅簡化初步設計和測試流程。例如,SparkFun Electronics 就推出可進行空氣品質感測器開發的 SEN-14348 環境複合式 Qwiic 分接板,其結合 CCS811B 空氣品質感測器以及溫度和濕度補償用的 BME280 感測器,並含有兩個實體 I2C 介面,以 4 腳位極化 Qwiic 連接器形式提供 (圖 4)。
圖 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 loop (程式碼片段 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 Semiconductor 的 CY8CKIT-042-BLE-A PSoC 4 BLE Pioneer 套件具有無線連線能力,可滿足此需求。
PSoC 4 BLE Pioneer 套件屬於開發工具,有助於工程師開發無線感測器應用。此套件能讓工程師進行編碼並編寫應用程式,然後將韌體移植到 Cypress 的 PSoC 4 低功耗藍牙 SoC。此 SoC 結合了 32 位元、48 MHz 的 Arm® Cortex®-M0 處理器和低功耗藍牙無線電。
在此情況下,分接板經過補償的空氣品質資料會透過分接板的 I2C 連線,傳遞到套件 PC 板上的 I2C 連接器。處理器除了從 I2C 介面 SDA 線路接收資料外,還能讓感測器進行重置、中斷,以及進入睡眠狀態。
使用此套件時,需要進行一些開發工作,才能對空氣品質感測器設計進行編程和除錯。Cypress 針對編碼和測試作業,提供 Windows 版的 CySmart 主機模擬工具 (在 PC 上執行) 和低功耗藍牙硬體鎖。在開發過程中,硬體鎖和 Pioneer 套件能同時連接到通用主機 PC (圖 5)。
圖 5:Cypress 提供低功耗藍牙開發工具和硬體鎖 (配置為低功耗藍牙中央元件),以協助使用 PSoC 4 BLE Pioneer 套件來開發應用韌體。(圖片來源:Cypress Semiconductor)
利用 CY8CKIT-042-BLE-A PSoC 4 BLE Pioneer 套件來開發設計的流程涵蓋四個階段:
- 在 PSoC Creator 線路圖頁面中建立設計
- 編寫韌體以初始化和處理低功耗藍牙事件
- 使用 Pioneer 套件對低功耗藍牙 SoC 進行編程
- 使用 CySmart 主機模擬工具 (或行動應用程式) 來測試設計
(若要進一步瞭解低功耗藍牙應用的開發作業,請參閱 DigiKey 文章《藍牙 4.1、4.2 和 5 相容的低功耗藍牙 SoC 與工具能克服物聯網挑戰》。)
應用韌體能讓低功耗藍牙 SoC 核對與處理感測器的資料,然後透過低功耗藍牙鏈路來傳輸資訊,例如傳輸到智慧型手機以供分析和顯示。
接著可將感測器的資料,從智慧型手機轉傳到雲端伺服器進行儲存,然後或許會根據此資料的內容觸發「If This Then That」(IFTTT) 通知。舉例而言,當兒童臥室內的 CO2 讀數一直很高時,會在家長的智慧型手機上觸發通知,建議提升通風效果。
若要從感測器直接連線至雲端,則比較複雜一點。Cypress 元件等低功耗藍牙 SoC,通常都缺乏原生的 IPv6 網路層。解決辦法是將藍牙資料傳送到「閘道器」,利用替代性通訊協定 (例如 Wi-Fi) 連線到雲端。
Cypress 和 SparkFun 再次攜手合作,讓這項技術成真。利用 Cypress 的 CY8CKIT-062-BLE PSoC 6 BLE Pioneer 套件,以及 SparkFun 的 DEV-14531 PSoC Pioneer IoT 附加擴充板 (搭載 XB2B-WFWT-001 XBee Wi-Fi 模組),工程師就能建構一套網路,從感測器取得經過補償的空氣品質資料,然後再透過低功耗藍牙鏈路,將資料從 CY8CKIT-042-BLE-A PSoC 4 BLE Pioneer 套件傳輸到 CY8CKIT-062-BLE PSoC 6 BLE Pioneer 套件,最後再透過 Wi-Fi 傳輸到雲端 (圖 6)。(請參閱 DigiKey 技術文章 《802.11x 模組與開發套件有助於簡化物聯網無線設計作業》,深入瞭解如何使用 Wi-Fi 模組連線到雲端。)
圖 6:這個使用 Cypress 和 SparkFun 開發套件打造而成的無線系統,利用低功耗藍牙和 Wi-Fi 技術將空氣品質感測器資料傳送到雲端。(圖片來源:DigiKey)
結論
愈來愈多人意識到,在通風受到控制的建築物中,若揮發性有機化合物 (VOC) 和 CO2 等氣體持續累積,將會對健康造成危害,因此在智慧建築網路中納入空氣品質感測器的重要性與日俱增。
商用空氣品質感測器目前缺乏其他 (模組化) 感測器常見的強大整合式微處理器和無線連線能力。不過,透過容易使用的設計工具,工程師不僅能針對溫度和濕度的影響,對原始的空氣品質資料進行補償,更可在低功耗藍牙網路中以無線方式傳輸資訊,然後再透過智慧型手機網路或 Wi-Fi 模組將傳輸到雲端。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。