masayasan が 2021年03月13日10時35分17秒 に編集
コメント無し
記事種類の変更
製作品
本文の変更
# 制作概要 防音室内の二酸化炭素濃度を検出して、喚起を促す装置を製作しました。 使用部品 ・KEYESTUDIO KS0457 (5V駆動) SEN-CCS811搭載 ・3mm LED ・抵抗器 ・スイッチなど # 回路図


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