2016年12月2日金曜日

Arduino で mh-z19 という二酸化炭素センサを使ってみた

概要

mh-z19 赤外線を使った検知方法で空気中の二酸化炭素濃度を求めることができるセンサです
現在は海外からしか購入できなさそうで、自分は AliExpress で $20 ほどで購入しました
今回は Arduino Pro mini を使って動作させてみたいと思います

環境

  • Arduino Pro mini (5v, 16MHz)
  • Arduino IDE 1.6.12
  • mh-z19

ハンダ

とりあえずハンダしましょう
ハンダするのはピンヘッダだけです
4 ピンと 5 ピンのヘッダピンが必要になるので準備しておいてください
以下のようになれば OK です
mh-z19_promini_handa.jpg

検出部分に白いシールみたいなのが貼ってありますがそれは剥がさないで OK です

配線

配線は以下の通りです
mh-z19_promini_circuit.jpg

Arduino VCC -> mh-z19 Vin
Arduino GND -> mh-z19 GND
Arduino 5pin -> mh-z19 PWM

となります

スケッチ

スケッチは以下の通りです
PWM の波形の長さによって ppm が変化することになるので、時間から ppm を求める計算をしています

#define pwmPin 5
#define LedPin 13

int prevVal = LOW;
long th, tl, h, l, ppm;

void setup() {
  Serial.begin(9600);
  pinMode(pwmPin, INPUT);
  pinMode(LedPin, OUTPUT);
}

void loop() {
  long tt = millis();
  int myVal = digitalRead(pwmPin);

  if (myVal == HIGH) {
    digitalWrite(LedPin, HIGH);
    if (myVal != prevVal) {
      h = tt;
      tl = h - l;
      prevVal = myVal;
    }
  }  else {
    digitalWrite(LedPin, LOW);
    if (myVal != prevVal) {
      l = tt;
      th = l - h;
      prevVal = myVal;
      ppm = 5000 * (th - 2) / (th + tl - 4);
      Serial.println("PPM = " + String(ppm));
    }
  }
}

今回 Arduino Pro mini の 5 ピンを使って PWM 信号を取得します
13 ピンはビルトイン LED になります
デバッグ用に使用しているだけなので、不要であれば削除してもらって OK です

動作確認

スケッチを書き込んでシリアルモニタを開いて動作確認してみましょう
だいたい 0.5 秒おきに ppm が表示されると思います
ノンキャリブレーションですぐに使えるセンサなのですが、値が安定するまでに若干時間が必要でした
安定後に息を吹きかけてみると値が上昇することが確認できると思います
mh-z19_promini_ret.png

最後に

Arduino Pro mini で mh-z19 を使ってみました
ちゃんとデータシート読んで挙動を確認したほうが良さそうな気がしますが、とりあえず値を取得することはできました
配線は簡単で PWM の他にシリアルもつかえるそうです

使ってみた感じだと若干キャリブレーションが必要なのと値を検知するまでにラグがある感じの印象を受けました
もしかしたら使い方が悪いだけかもしれないですが、、、

参考サイト

0 件のコメント:

コメントを投稿