打印
[Mega]

零知开源分享-使用SGP30模块进行空气质量监测

[复制链接]
1615|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
roc2two|  楼主 | 2019-5-17 14:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本篇**中将使用SGP30模块对空气中的VOC和CO2进行监测,获取空气质量状况。
1、说明
MCU:零知-标准板


模块:SGP30多像素气体传感器模块(盛思锐)

注意:模块的供电标准为1.8V,所以使用时需要接电平转换才可以接到开发板中。
2、测试demo
/*
*        空气质量:VOC,CO2测量
*         零知开源-www.lingzhilab.com
*/
  
#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模块获取更精准的数据,可以加入温湿度传感器进行湿度补偿,然后再进行相关数据的采集。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

85

帖子

1

粉丝