UNIT CO2は、周囲の空気のCO2 PPM(100万分の1)組成を知ることができる光音響式二酸化炭素(CO2)ユニットです。センサは Sensirion 社の SCD40
を内蔵し、バックコンバータ回路で電力を供給し、I2C 通信を行います。測定範囲は400~2000ppm、精度は±(50ppm+読みの5%)です。さらに、温度と湿度の測定もサポートしています。環境センシング、科学実験、空気品質や換気の研究などに最適です。
リソース | パラメータ |
---|---|
CO2測定範囲 | 400~2000 ppm |
CO2サンプリング精度 | ±(50 ppm + 読み値の5%) |
温度範囲 | -10~60 °C |
湿度範囲 | 0~95 %RH |
通信プロトコル | I2C: 0x62 |
製品重量 | 7.54g |
梱包重量 | 13.13g |
製品寸法 | 48mm×24mm×16mm |
梱包サイズ | 134mm×61mm×16.3mm |
ハウジング材質 | プラスチック(PC) |
CO2 Unit | SCL | SDA | 5V | GND |
---|---|---|---|---|
M5Core(PORT A) | GPIO22 | GPIO21 | 5V | GND |
M5Core2(PORT A) | GPIO22 | GPIO21 | 5V | GND |
M5Atom(PORT A) | GPIO32 | GPIO26 | 5V | GND |
M5StickC/Plus(PORT A) | GPIO33 | GPIO32 | 5V | GND |
M5Station(PORT A1,A2) | GPIO33 | GPIO32 | 5V | GND |
Datasheet
#include <Arduino.h>
#include <Wire.h>
// SCD4x
const int16_t SCD_ADDRESS = 0x62;
void setup() {
// check in your settings that the right speed is selected
Serial.begin(115200);
// wait for serial connection from PC
// comment the following line if you'd like the output
// without waiting for the interface being ready
while (!Serial)
;
// output format
Serial.println("CO2(ppm)\tTemperature(degC)\tRelativeHumidity(percent)");
// init I2C
Wire.begin();
// wait until sensors are ready, > 1000 ms according to datasheet
delay(1000);
// start scd measurement in periodic mode, will update every 5 s
Wire.beginTransmission(SCD_ADDRESS);
Wire.write(0x21);
Wire.write(0xb1);
Wire.endTransmission();
// wait for first measurement to be finished
delay(5000);
}
void loop() {
float co2, temperature, humidity;
uint8_t data[12], counter;
// send read data command
Wire.beginTransmission(SCD_ADDRESS);
Wire.write(0xec);
Wire.write(0x05);
Wire.endTransmission();
// read measurement data: 2 bytes co2, 1 byte CRC,
// 2 bytes T, 1 byte CRC, 2 bytes RH, 1 byte CRC,
// 2 bytes sensor status, 1 byte CRC
// stop reading after 12 bytes (not used)
// other data like ASC not included
Wire.requestFrom(SCD_ADDRESS, 12);
counter = 0;
while (Wire.available()) {
data[counter++] = Wire.read();
}
// floating point conversion according to datasheet
co2 = (float)((uint16_t)data[0] << 8 | data[1]);
// convert T in degC
temperature = -45 + 175 * (float)((uint16_t)data[3] << 8 | data[4]) / 65536;
// convert RH in %
humidity = 100 * (float)((uint16_t)data[6] << 8 | data[7]) / 65536;
Serial.print(co2);
Serial.print("\t");
Serial.print(temperature);
Serial.print("\t");
Serial.print(humidity);
Serial.println();
// wait 5 s for next measurement
delay(5000);
}