月別アーカイブ: 2020年12月

CO2センサー用基板EPEA-CO2-NDIR-04 Rev3.0.9の使い方

このページのライセンス

MITライセンス。すきにしてください。あわよくばセンサーをショップ及びAmazon(MHZ19B/MHZ19C)で売っているのでそちらから買ってください。

(12/27追記) サンプルで付けているソースのライセンスは各ライブラリのライセンス(MHZ19のライブラリはLGPL等)に従ってください。

はじめに

EPEA-CO2-NDIR-04 Rev3.0.9MH-Z19BMH-Z19CをAtmega328PU(内部クロック8Mhz/3.3v)で動かすための基盤です。マイクロUSBのDIP化基板のみAliexpressで調達したもので入手に時間がかかりますが他の部品は秋月電子等ですぐに手に入ると思います。

(1/16追記) 3端子レギュレータは半田をしやすいように意図的に幅を広めています。そのため奥迄は入りません。

必要部品

最低限動作スケッチ

最低限の動作をさせるためのスケッチです。基盤は0,1をソフトシリアルで使用していますが、ハードシリアルのピンなのでその内別のピンに変更します。なお、下記はMHZ19B用(外観)です。MHZ19C(外観)の場合はこちら(github)になります。

#include <FaBoLCDmini_AQM0802A.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MHZ19.h>

#define SRX 0
#define STX 1
#define INTERVAL 6

MHZ19 myMHZ19;

SoftwareSerial softSerial(SRX, STX);
FaBoLCDmini_AQM0802A lcd;

void setup()
{
  softSerial.begin(9600);
  delay(100);
  myMHZ19.begin(softSerial);

  Wire.begin();
  lcd.begin();
}
int count = 0;
int co2 = 0;
void loop()
{
  if ((count % INTERVAL) == 0 ) {
    co2 = myMHZ19.getCO2();
  }
  displayCo2(co2, (count % 2));
  count++;
  delay(1000);
}

void displayCo2(int co2, bool isPresiod) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("CO2 ppm");
  lcd.setCursor(0, 1);
  lcd.print(co2);
  if (isPresiod) {
    lcd.print(" .");
  }
}

回路図

応用例

プログラムの書き換え方法はこちら

数値が一定以上だったら音をならす。

数値が一定以上だったらLEDを光らせる。

数値が一定以上だったら何かを動作させる。

別のものとシリアル通信する。 サンプル

ネットワーク系は部品が足りないので苦手です。ネットワーク対応モジュール搭載基板がその内でるかもしれません。

ケース用SVG/Scad

3mmアクリル板をレーザーカッターで作る用のデータ github

その他必要資材は 

  • ボルトm3の30mm4本
  • 1mm厚程度のナット 6個(基盤のスペーサー替わり4,基板押えるよう対角線に計2つ)
  • ふたを抑える用のナット4個
  • ワッシャ任意

CO2センサー用基板EPEA-CO2-NDIR-04 Rev3.0.8の使い方

このページのライセンス

MITライセンス。すきにしてください。あわよくばセンサーをショップで売っているのでそちらから買ってください。

(12/27追記) サンプルで付けているソースのライセンスは各ライブラリのライセンス(MHZ19のライブラリはLGPL等)に従ってください。

はじめに

EPEA-CO2-NDIR-04 Rev3.0.8はMH-Z19B、MH-Z19CをAtmega328PU(内部クロック8Mhz/3.3v)で動かすための基盤です。マイクロUSBのDIP化基板のみAliexpressで調達したもので入手に時間がかかりますが他の部品は秋月電子等ですぐに手に入ると思います。3端子レギュレータの半田はかなり狭いです。次の3.0.9では広めにしました。

注意事項

LCD(液晶)は秋月電子様取り扱いのAE-AQM1248基盤を使用していますが、配線間違えによりSCL/SDAが逆になっています。当該部品を使用する場合はSCL/SDAを手作業で修正する必要があります。

必要部品

最低限動作スケッチ

最低限の動作をさせるためのスケッチです。基盤は0,1をソフトシリアルで使用していますが、ハードシリアルのピンなのでその内別のピンに変更します。

#include <FaBoLCDmini_AQM0802A.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MHZ19.h>

#define SRX 0
#define STX 1
#define INTERVAL 6

MHZ19 myMHZ19;

SoftwareSerial softSerial(SRX, STX);
FaBoLCDmini_AQM0802A lcd;

void setup()
{
  softSerial.begin(9600);
  delay(100);
  myMHZ19.begin(softSerial);

  Wire.begin();
  lcd.begin();
}
int count = 0;
int co2 = 0;
void loop()
{
  if ((count % INTERVAL) == 0 ) {
    co2 = myMHZ19.getCO2();
  }
  displayCo2(co2, (count % 2));
  count++;
  delay(1000);
}

void displayCo2(int co2, bool isPresiod) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("CO2 ppm");
  lcd.setCursor(0, 1);
  lcd.print(co2);
  if (isPresiod) {
    lcd.print(" .");
  }
}

本来の回路図

実際の基板(Rev3.0.8)はLCDのSCLとSDAが逆になっています。

応用例

数値が一定以上だったら音をならす。

数値が一定以上だったらLEDを光らせる。

数値が一定以上だったら何かを動作させる。

ネットワーク系は部品が足りないので苦手です。ネットワーク対応モジュール搭載基板がその内でるかもしれません。