masayasanのアイコン画像
masayasan 2021年02月21日作成 (2021年03月13日更新)
製作品 製作品 閲覧数 1874
masayasan 2021年02月21日作成 (2021年03月13日更新) 製作品 製作品 閲覧数 1874

二酸化炭素濃度検出器

制作概要

防音室内の二酸化炭素濃度を検出して、喚起を促す装置を製作しました。

使用部品
・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ランプが点灯していくのは面白いです。
定期的な喚起は習慣付けておくべきですが、視覚的に室内の状態が分かるのは良いですね。

ログインしてコメントを投稿する