|
零知开源分享-使用SGP30模块进行空气质量监测
[复制链接]
本篇文章中将使用SGP30模块对空气中的VOC和CO2进行监测,获取空气质量状况。
1、说明
MCU:零知-标准板
模块:SGP30多像素气体传感器模块(盛思锐)
注意:模块的供电标准为1.8V,所以使用时需要接电平转换才可以接到开发板中。本篇文章中将使用SGP30模块对空气中的VOC和CO2进行监测,获取空气质量状况。
1、说明
MCU:零知-标准板
模块:SGP30多像素气体传感器模块(盛思锐)
注意:模块的供电标准为1.8V,所以使用时需要接电平转换才可以接到开发板中。
本篇文章中将使用SGP30模块对空气中的VOC和CO2进行监测,获取空气质量状况。
1、说明
MCU:零知-标准板
模块:SGP30多像素气体传感器模块(盛思锐)
注意:模块的供电标准为1.8V,所以使用时需要接电平转换才可以接到开发板中。
2、测试demo
- /*
- * 空气质量:VOC,CO2测量
- * 零知开源-[url]www.lingzhilab.com[/url]
- */
-
- #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模块获取更精准的数据,可以加入温湿度传感器进行湿度补偿,然后再进行相关数据的采集。详情可到零知实验室官网免费查询。
此内容由EEWORLD论坛网友roc2原创,如需转载或用于商业用途需征得作者同意并注明出处
|
|