本篇文章中將使用SGP30模塊對空氣中的VOC和CO2進行監測,獲取空氣質量狀況。
1、說明
MCU:零知-標準板
模塊:SGP30多像素氣體傳感器模塊(盛思銳)
注意:模塊的供電標準為1.8V,所以使用時需要接電平轉換才可以接到開發板中。
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);
- }
- }
復制代碼 把上述完整工程放進零知開源開發工具的庫里即可使用,完整工程可到零知實驗室官網免費獲取。
工程界面如下:
3、測試結果
如果要使SGP30模塊獲取更精準的數據,可以加入溫濕度傳感器進行濕度補償,然后再進行相關數據的采集。詳情可到零知實驗室官網免費查詢。
|