沚消沙の物置

日々のメモ書き

CO2測定器

tl; dr

  • 環境測定器(温度/湿度/CO2濃度)作った

CO2センサー

「日中眠くなるし、CO2濃度が原因かもなぁ(責任転嫁)」的なノリで2年前ぐらいに買ったCO2センサー(MH-Z19B)くん。

その後、某感染症の流行等で換気がさけばれ、CO2濃度計の需要が高まったり色々あったが、結局ブレッドボードで少し遊んだだけで放置していたので、これを機にちゃんと組み立てる。

温湿度センサー(AM2302(DHT22))と液晶もつけて遊んでいた図

CO2濃度はセンサーの基板部分から取得可能だが、せっかくコネクターがついているのでここから取得している。 接続にはaitendoのCN125SS-2P(7極)を使用。

CO2濃度取得処理

#include <SoftwareSerial.h>

// UART通信で使用するピンを指定
#define UART_RX A0
#define UART_TX A1

// CO2センサー(MH-Z19B)
SoftwareSerial MH_Z19B(UART_RX, UART_TX);

// CO2濃度リクエスト
byte request_co2[9] = {
  0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79
};

void setup() {
  // MH-Z19B初期化(ボーレート: 9600)
  MH_Z19B.begin(9600);

  // シリアルモニター初期化
  Serial.begin(9600);
}

void loop() {
  // UART通信
  byte responseMessage[9] = {0};
  MH_Z19B.write(request_co2, sizeof(request_co2));
  MH_Z19B.readBytes(responseMessage, sizeof(responseMessage));

  // 濃度計算
  int ppm = (responseMessage[2] * 256) + responseMessage[3];

  // シリアルモニターに出力
  String message = "co2: ";
  message.concat(ppm);
  Serial.println(message);
  
  delay(5000);
}

温湿度取得処理

#include <string>
#include <sstream>
#include <DHT.h>

// 使用するピンを指定
#define DHT_DATA_PIN 1
#define DHT_TYPE DHT22

// 温湿度センサー(AM2302(DHT22))
DHT dht(DHT_DATA_PIN, DHT_TYPE);

void setup()
{
  // AM2302(DHT22)初期化
  dht.begin();

  // シリアルモニター初期化
  Serial.begin(9600);
}

void loop()
{
  // 温度・湿度を取得
  auto temperature = dht.readTemperature();
  auto humidity = dht.readHumidity();

  // シリアルモニターに出力
  std::stringstream ss;
  ss << "Hum: " << humidity << "%, Temp: " << temperature << "℃";
  Serial.println(ss.str().c_str());

  delay(5000);
}

github.com

ケース作成

以前3Dプリンターを買ったので、練習もかねてFusion360モデリング

モデリング

あとは適当に配線した基板をケースに詰め込む。

つめこむ

完成

蓋をして完成。

最初はバッテリーとか電池で長期運用ができないかと思っていたが、消費が大きそうなので断念。

動作のようす

裏面