|
|
本篇文章中將使用SGP30模塊對空氣中的VOC和CO2進(jìn)行監(jiān)測,獲取空氣質(zhì)量狀況。
1、說明
MCU:零知-標(biāo)準(zhǔn)板
好看的標(biāo)準(zhǔn)板 (2).jpg (95.5 KB, 下載次數(shù): 37)
下載附件
2019-5-17 14:00 上傳
模塊:SGP30多像素氣體傳感器模塊(盛思銳)
SGP30模塊圖片.png (116 KB, 下載次數(shù): 35)
下載附件
2019-5-17 14:05 上傳
注意:模塊的供電標(biāo)準(zhǔn)為1.8V,所以使用時需要接電平轉(zhuǎn)換才可以接到開發(fā)板中。
2、測試demo
- #include "Adafruit_SGP30.h"
-
- Adafruit_SGP30 sgp;
-
- /* return absolute humidity [mg/m^3] with approximation formula
- * @param temperature [°C]
- * @param humidity [%RH]
- */
- uint32_t getAbsoluteHumidity(float temperature, float humidity) {
- // approximation formula from Sensirion SGP30 Driver Integration chapter 3.15
- const float absoluteHumidity = 216.7f * ((humidity / 100.0f) * 6.112f * exp((17.62f * temperature) / (243.12f + temperature)) / (273.15f + temperature)); // [g/m^3]
- const uint32_t absoluteHumidityScaled = static_cast<uint32_t>(1000.0f * absoluteHumidity); // [mg/m^3]
- return absoluteHumidityScaled;
- }
-
- void setup() {
- Serial.begin(9600);
- Serial.println("SGP30 test");
-
- if (! sgp.begin()){
- Serial.println("Sensor not found :(");
- while (1);
- }
- Serial.print("Found SGP30 serial #");
- Serial.print(sgp.serialnumber[0], HEX);
- Serial.print(sgp.serialnumber[1], HEX);
- Serial.println(sgp.serialnumber[2], HEX);
-
- // If you have a baseline measurement from before you can assign it to start, to 'self-calibrate'
- //sgp.setIAQBaseline(0x8E68, 0x8F41); // Will vary for each sensor!
- }
-
- int counter = 0;
- void loop() {
- // If you have a temperature / humidity sensor, you can set the absolute humidity to enable the humditiy compensation for the air quality signals
- //float temperature = 22.1; // [°C]
- //float humidity = 45.2; // [%RH]
- //sgp.setHumidity(getAbsoluteHumidity(temperature, humidity));
-
- if (! sgp.IAQmeasure()) {
- Serial.println("Measurement failed");
- return;
- }
- Serial.print("TVOC "); Serial.print(sgp.TVOC); Serial.print(" ppb\t");
- Serial.print("eCO2 "); Serial.print(sgp.eCO2); Serial.println(" ppm");
- delay(1000);
-
- counter++;
- if (counter == 30) {
- counter = 0;
-
- uint16_t TVOC_base, eCO2_base;
- if (! sgp.getIAQBaseline(&eCO2_base, &TVOC_base)) {
- Serial.println("Failed to get baseline readings");
- return;
- }
- Serial.print("****Baseline values: eCO2: 0x"); Serial.print(eCO2_base, HEX);
- Serial.print(" & TVOC: 0x"); Serial.println(TVOC_base, HEX);
- }
- }
復(fù)制代碼 把上述完整工程放進(jìn)零知開源開發(fā)工具的庫里即可使用,完整工程可到零知實驗室官網(wǎng)免費獲取。
工程界面如下:
程序界面.png (128.49 KB, 下載次數(shù): 39)
下載附件
2019-5-17 14:05 上傳
3、測試結(jié)果
結(jié)果.jpg (108.17 KB, 下載次數(shù): 41)
下載附件
2019-5-17 14:03 上傳
如果要使SGP30模塊獲取更精準(zhǔn)的數(shù)據(jù),可以加入溫濕度傳感器進(jìn)行濕度補(bǔ)償,然后再進(jìn)行相關(guān)數(shù)據(jù)的采集。詳情可到零知實驗室官網(wǎng)免費查詢。
|
|