Makato-kanのアイコン画像
Makato-kan 2021年04月22日作成 (2021年12月07日更新)
製作品 製作品 閲覧数 1243
Makato-kan 2021年04月22日作成 (2021年12月07日更新) 製作品 製作品 閲覧数 1243

お礼 いただいたM5StickCを使って二酸化炭素濃度測定

キャプションを入力できます

はじめに:

ハードウェア作品投稿キャンペーンでM5StickC他をいただきました。
せっかくいただいたM5StickCを使ってみようと道具箱みたら、なぜかSGP-30 のセンサーがあったので二酸化炭素濃度測定を作りました、
 プログラムはネットで検索して見つけたものを組み合わせました。
 ArduinoIDEを使っております。

設定:

ボードマネージャーはM5StickC
 ライブラリは Adafruit_SGP30をインストールしています

接続:

SGP-30を購入するとケーブルも付いてきますんで、あとはM5StickCと接続するだけです。

プログラム:

#include <M5StickC.h>
#include <Wire.h>
#include "Adafruit_SGP30.h"

#define DISP_BRIGHTNESS_MIN  9
uint8_t disp_brightness = DISP_BRIGHTNESS_MIN;
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() {
  M5.Axp.ScreenBreath(disp_brightness);
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.setTextFont(4);
  M5.Lcd.setTextColor(TFT_WHITE,TFT_BLACK);  
  M5.Lcd.fillScreen(BLACK);
  
  Serial.begin(115200);
  while (!Serial) { delay(10); } // Wait for serial console to open!

  Serial.println("SGP30 test");


//  Wire.begin(0, 26);
  Wire.begin(32, 33);
  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!
  M5.Lcd.fillScreen(WHITE);
  delay(500);
  M5.Lcd.fillScreen(RED);
  delay(500);
  M5.Lcd.fillScreen(GREEN);
  delay(500);
  M5.Lcd.fillScreen(BLUE);
  delay(500);
  M5.Lcd.fillScreen(BLACK);
  delay(500);
  
  // text print
    M5.Axp.ScreenBreath(disp_brightness);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(0, 10);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(1);
  M5.Lcd.printf("Display Test!");
   delay(1000); 
}

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");

  if (! sgp.IAQmeasureRaw()) {
    Serial.println("Raw Measurement failed");
    return;
  }
//  Serial.print("Raw H2 "); Serial.print(sgp.rawH2); Serial.print(" \t");
//  Serial.print("Raw Ethanol "); Serial.print(sgp.rawEthanol); Serial.println("");
 
  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);
  }

  //Add M5stick OLED 
  M5.Lcd.fillScreen(BLACK); 
    String str = "      " + (String)sgp.TVOC + "[ppb]";
  M5.Lcd.drawRightString(str,256,8,4);
   M5.Lcd.setCursor(0, 0, 2);
  M5.Lcd.println("TVOC");
 str = "      " + (String)sgp.eCO2 + "[ppm]";
  M5.Lcd.drawRightString(str,256,32+16,4);
  M5.Lcd.setCursor(0, 32, 2);
  M5.Lcd.println("eCO2");
  delay(3000);
}

プログラムについて:

最後のdelay(3000);を変更すれば表示更新のタイミングが変わります
 M5.Lcd.fillScreen(BLACK); は計測した値が重ね書きされてしまうので入れています。
 もっと美しいやり方あると思います。

使ったもの:

M5StickC いただいたものです
 SGP-30 マルツで買いました。

謝辞:

インターネットでM5StickC ディスプレーと M5StickC SGP-30で検索したら見つかった皆様ありがとうございます。

Makato-kanのアイコン画像
屋外で温度湿度を測定し記録するので、壊れやすいと思い大量にDHT11とESP-WROOM-02を購入したのですが思いのほか壊れなかったので、何にでもDHT11をくっつけています。
ログインしてコメントを投稿する