編集履歴一覧に戻る
masayasanのアイコン画像

masayasan が 2021年03月03日21時50分21秒 に編集

コメント無し

本文の変更

# 制作概要 防音室内の二酸化炭素濃度を検出して、喚起を促す装置を製作しました。 使用部品 ・KEYESTUDIO KS0457 (5V駆動) SEN-CCS811搭載 ・3mm LED ・抵抗器 ・スイッチなど # 回路図 ![キャプションを入力できます](https://camo.elchika.com/68cd21fb1e21de4fefd0a19640ed24d5265dfaf3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f38326566303036642d656565382d343539322d383136662d363932326136373066633964/)

+

※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); } ``` # 製作品 ![キャプションを入力できます](https://camo.elchika.com/d84bed1a9fe9c1e20c9d990702f3c7a29f938ae4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f38306636666538322d373166352d343662622d396238382d616236396462383839366666/) ![キャプションを入力できます](https://camo.elchika.com/f553c2f687cef89b0e7cab49df1dcdeb0cec9d59/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f32333433303361622d623566332d346263342d616531362d323664333539386564656238/) センサーはCO2検出する為、Arduinoはハードリセットする為に基盤剥き出しにしてます。 KEYESTUDIOのKS0457ですが、どうもセンサーが暴走することがあるので、異常時はArduino側でハードリセットする様にします。 異常時はINT出力がOFFになる様なので、LEDを繋げてセンサー異常を知らせるようにしてます。 # まとめ 比較対象がないのでセンサーの検出精度はどの程度か分かりませんが、密室でLEDランプが点灯していくのは面白いです。 定期的な喚起は習慣付けておくべきですが、視覚的に室内の状態が分かるのは良いですね。