工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

CO2濃度測定で「眠気倍率」を可視化する

必要な部品と材料

部品数量備考
Andium Anduino WiFiシールド1Arduino Due/Zero用WiFiシールド
Arduino Due1またはArduino Zero
CO2センサー(Cozir NDIRタイプ)1UART接続、3.3V動作

使用ソフトウェア・サービス

このプロジェクトについて

動機

午後の会議で眠くなったり、講義中に欠伸が止まらなかった経験はありませんか?睡眠不足が原因と思いがちですが、実は換気不足によるCO2濃度上昇が眠気の原因かもしれません!

このNDIR(非分散型赤外線吸収)CO2センサーを使えば、正確なCO2濃度をUARTシリアルで簡単に読み取れます。従来のCO2センサーは消費電力が大きく、ランプのウォームアップに時間がかかりましたが、このセンサーはLEDと赤外線検出器を用い、3.3Vで平均1.5mA以下の超低消費電力を実現。光学分散技術などを駆使した印象的なデバイスです(詳細はCozirデータシート参照)。

CO2濃度測定で「眠気倍率」を可視化する

セットアップ

必要なもの:

接続はシンプル。センサーは10ピンありますが、使用するのは4線のみ。

CO2濃度測定で「眠気倍率」を可視化する

Arduino Due接続:

※UARTはクロス接続(Tx↔Rx)してください。DIO0/DIO1(Serial)はシリアルモニタ用に残すため、センサー通信にはSerial1を使用します(他のUARTでも可)。

※Arduinoを介さず直接センサーをテストする場合:PuTTY等で9600bps、8N1、CR+LF送信設定で接続可能。

重要:このセンサーは3.3V TTLレベルです。5V系マイコンから制御する場合はロジックレベルシフター必須。

センサーのキャリブレーション

キャリブレーション方法はいくつかあります。最良は既知濃度ガス(窒素ガス=0ppm CO2)でゼロ点合わせ。手元にない場合は「外気(約450ppm)」で実用十分な精度でキャリブレーション可能です。

CO2濃度測定で「眠気倍率」を可視化する
CO2濃度測定で「眠気倍率」を可視化する
CO2濃度測定で「眠気倍率」を可視化する

屋外で添付スケッチを動かし、calibrateFreshAir()のコメントを外して実行。これによりセンサーに'G'コマンドを送り、現在の環境を450ppm(標準外気濃度)として基準設定します。会議室・教室レベルの濃度差(1000ppm以上)を検知するには十分な精度です。

基本スケッチ(シリアルモニタ出力)

char buffer[20] = {0};
int c = 0;

void setup() {
  Serial.begin(9600);
  while(!Serial);
  Serial1.begin(9600);
  while(!Serial1);
  Serial.println("Begin reading CO2 Levels");
  // setOperatingMode(CZR_STREAMING);
  // setOperatingMode(CZR_POLLING);
  // calibrateFreshAir(); // 初回のみ有効化
}

void loop() {
  delay(10000);
  c = Request("Z");
  Serial.print("CO2 : "); Serial.println(c);
  Serial.println();
}

int Request(char* s) {
  buffer[0] = '\0';
  int idx = 0;
  Command(s);
  delay(250);
  while(Serial1.available()) buffer[idx++] = Serial1.read();
  buffer[idx] = '\0';
  uint16_t rv = 0;
  switch(buffer[1]) {
    case 'T': rv = atoi(&buffer[5]); if(buffer[4]==1) rv+=1000; break;
    default: rv = atoi(&buffer[2]); break;
  }
  return rv;
}

void Command(char* s) {
  Serial1.print(s); Serial1.print("\r\n");
}

uint16_t calibrateFreshAir() { return Request("G"); }

void setOperatingMode(uint8_t mode) {
  sprintf(buffer, "K %u", mode);
  Command(buffer);
}

初回キャリブレーション後はcalibrateFreshAir()をコメントアウトし、ポーリングモード(setOperatingMode(CZR_POLLING))で運用します。シリアルモニタにCO2値が表示されれば次のステップへ。

クラウド(Adafruit IO)へデータ送信

Adafruit IOとAnduino WiFiの接続方法はこちらの記事を参照。以下は1分ごとにCO2濃度をAdafruit IOへ送信し、Anduino LCDにも表示するスケッチです。

#include <WiFi101.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include "AnduinoLCD.h"

#define WLAN_SSID "YOUR_SSID"
#define WLAN_PASS "YOUR_PASSWD"
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "YOUR_AIO_USERNAME"
#define AIO_KEY "YOUR_AIO_KEY"

WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Publish carbonDioxide = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/co2");
AnduinoLCD LCD = AnduinoLCD(ST7735_CS_PIN, ST7735_DC_PIN, 13);

static int co2 = 0, co2Prev = 0;
#define CZR_STREAMING 0x01
#define CZR_POLLING 0x02
char buffer[20] = {0};

void setup() {
  Serial.begin(115200);
  delay(3000);
  Serial1.begin(9600);
  connectToWiFi();
  connectToAdafruit();
  LCD.begin(); LCDinit();
  // setOperatingMode(CZR_POLLING);
  // calibrateFreshAir();
}

void loop() {
  if(!mqtt.ping(3)) { if(!mqtt.connected()) connect(); }
  
  co2 = Request("Z");
  char b[20]; String str = String(co2);
  for(int i=0;i<str.length();i++) b[i]=str.charAt(i);
  b[str.length()+1]=0;
  
  if(!carbonDioxide.publish((char*)b)) Serial.println(F("Failed to publish co2"));
  else { Serial.print(F("co2 published: ")); Serial.println(co2); displayCo2(co2, co2Prev); }
  
  Serial.print("CO2 : "); Serial.println(co2);
  co2Prev = co2;
  delay(60000);
}

// 以下、WiFi/MQTT接続、LCD表示、センサー通信関数は省略(元コード参照)

完成!

このセンサーは非常に高感度で、換気の良い部屋でも人数変化に伴うCO2濃度変化を捉えられます。「眠いのは微分方程式のせいじゃない、換気のせいだ!」と教授に証明できます。授業をビーチに移しましょう!

CO2濃度測定で「眠気倍率」を可視化する

ライブラリ

Anduinoライブラリ: ArduinoをAndium Nodeに変えるライブラリ。GitHub

製造プロセス

  1. センサーデータをRaspberry Piに統合:実践ガイド
  2. LEGO Mindstorms EV3用カスタムオブジェクトセンサー構築: DIY光ベース「目」
  3. Lego Mindstorms NXT超音波センサーをRaspberry Piに直接接続する
  4. HC-SR04超音波センサーをRaspberry Piに接続する実践ガイド
  5. Acconeer A111パルスレーダーをRaspberry Piと統合:実践ガイド
  6. 店頭での顧客サービスを高める:可視性と効率化の先進戦略
  7. 産業メンテナンス:知っておくべき5つのレベルを解説
  8. CO₂レーザー vs Nd:YAGレーザー切断:主な違いを解説
  9. Sensirion、SCD40発表:超小型CO₂およびRH/Tセンサー
  10. RFワイヤレス電力でユニバーサルセンサネットワーク普及加速、配線・電池不要でAI時代の神経網構築へ
  11. RapidPlexセンサー:SARS-CoV-2自宅検査に関する5つの重要質問