制作概要
防音室内の二酸化炭素濃度を検出して、喚起を促す装置を製作しました。
使用部品
・KEYESTUDIO KS0457 (5V駆動) SEN-CCS811搭載
・3mm LED
・抵抗器
・スイッチなど
回路図
コード
#include <CCS811.h>
#define LED1 4
#define LED2 3
#define LED3 2
#define LED4 5
#define LEDcheck 10
int CO2Valu = 0;
int SETValu = 1500;//1500ppmで点灯開始
/*
IIC address default 0x5A, the address becomes 0x5B if the ADDR_SEL is soldered.
*/
//CCS811 sensor(&Wire, /*IIC_ADDRESS=*/0x5A);
CCS811 sensor;
void setup(void)
{
Serial.begin(115200);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LEDcheck, INPUT_PULLUP);
/*Wait for the chip to be initialized completely, and then exit*/
while (sensor.begin() != 0) {
Serial.println("failed to init chip, please check if the chip connection is fine");
delay(1000);
}
/**
@brief Set measurement cycle
@param cycle:in typedef enum{
eClosed, //Idle (Measurements are disabled in this mode)
eCycle_1s, //Constant power mode, IAQ measurement every second
eCycle_10s, //Pulse heating mode IAQ measurement every 10 seconds
eCycle_60s, //Low power pulse heating mode IAQ measurement every 60 seconds
eCycle_250ms //Constant power mode, sensor measurement every 250ms
}eCycle_t;
*/
sensor.setMeasCycle(sensor.eCycle_250ms);
}
void loop() {
delay(1000);
if (sensor.checkDataReady() == true) {
Serial.print("CO2: ");
Serial.print(sensor.getCO2PPM());
Serial.print("ppm, TVOC: ");
Serial.print(sensor.getTVOCPPB());
Serial.println("ppb");
CO2Valu = sensor.getCO2PPM();
if (CO2Valu >= SETValu && CO2Valu < SETValu + 500) {
digitalWrite(LED1, HIGH);
}
else if (CO2Valu >= SETValu + 500 && CO2Valu < SETValu + 1000) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
}
else if (CO2Valu >= SETValu + 1000 && CO2Valu < SETValu + 1500) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
}
else if (CO2Valu >= SETValu + 1500) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
}
delay(500);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
while (digitalRead(LEDcheck) == 0) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
}
} else {
Serial.println("Data is not ready!");
}
/*!
@brief Set baseline
@param get from getBaseline.ino
*/
sensor.writeBaseLine(0x847B);
//delay cannot be less than measurement cycle
//delay(1000);
}
製作品
センサーはCO2検出する為、Arduinoはハードリセットする為に基盤剥き出しにしてます。
KEYESTUDIOのKS0457ですが、どうもセンサーが暴走することがあるので、異常時はArduino側でハードリセットする様にします。
異常時はINT出力がOFFになる様なので、LEDを繋げてセンサー異常を知らせるようにしてます。
まとめ
比較対象がないのでセンサーの検出精度はどの程度か分かりませんが、密室でLEDランプが点灯していくのは面白いです。
定期的な喚起は習慣付けておくべきですが、視覚的に室内の状態が分かるのは良いですね。
投稿者の人気記事
-
masayasan
さんが
2021/02/21
に
編集
をしました。
(メッセージ: 初版)
-
masayasan
さんが
2021/03/03
に
編集
をしました。
-
masayasan
さんが
2021/03/13
に
編集
をしました。
ログインしてコメントを投稿する