MH-Z19を使い小型CO2濃度測定モニター機を作ってみる‼(Arduino Nano)(SSD1306)
日々の生活でさり気なく重要なCO2濃度、コロナによりCO2モニターを
設置するお店がかなり増え重要性がより広まったかと思います。
今回はそんなCO2測定機をはんだ付け一切不要、ブレッドボード1枚で収まる簡単小型モニターを作ってみたいと思います‼
①「使う部品」
今回の部品はすべて電子工作ステーションさんので揃えられます。
・CO2センサー(MH-Z19E)
※MH-Z19B/C/D/EどれでもOKです。
電子工作ステーション 2450円(送料無料)
・Arduino Nano互換ボード
電子工作ステーション 1180円(送料無料)
※はんだ付けされていない状態です。はんだ付けが必要な方ははんだ付けサービスも同時にご購入をお勧めします。
・0.96インチOLEDディスプレイモジュール (SSD1306) (イエロー/ブルー)
電子工作ステーション 480円
・ブレッドボード 6穴モデル
電子工作ステーション 490円
・ブレッドボード・ジャンパーワイヤー
電子工作ステーション 490円
・Type-Cケーブル(持っていなければ)
電子工作ステーション 330円
合計5400円(2023年4月時点の価格)
②「回路」
MH-Z19はシリアル通信とPWM出力両方使えますが、今回はシリアル出力で取得します。
CO2センサー(MH-Z19E) | Arduino Nano |
Vin | 5V |
GND | GND |
PMW | |
Rx | D4 |
TX | D5 |
HD |
OLEDディスプレイ | Arduino Nano |
GND | GND |
VDD | 5V |
SCK | A5 |
SDA | A4 |
6穴ブレッドボードにブレッドボード・ジャンパーワイヤーを下記のように配置します。
※オレンジ色のジャンパーワイヤーだけ長さが合わず、ペンチで切って長さ調整しました。
配置が完了したらモニターとセンサーを配置します。
MH-Z19センサーだけ僅かにサイズが合わないため少し無理やり差し込みました。
OLEDディスプレイ自体は3.3V電源でも動作しますが、MH-Z19Eは5V(±0.1V)必須なので、
今回は配線を減らすためにも両方とも、5V電源で統一して配線しました。
③「開発環境」
★まず、Arudino IDEをダウンロードします!(※すでにダウンロード済みの方はスキップしてください。)
Arudino IDEダウンロードリンク→こちら
★次に、OLEDディスプレイモジュール (SSD1306)を簡単に使えるようにするライブラリーを2つ入れます。
Arduino IDEを開き、「ツール」→「ライブラリーを管理…」を押します。
そうするとライブラリーマネージャーが開くので、「Adafruit GFX Library」と検索すると、
「Adafruit GFX Library」というのが出てくるのでそれをインストールします。
同じ手順で「Adafruit SSD 1306」も追加します。
★最後に、MH-Z19を簡単に使えるようにするライブラリーを1つ入れます。
今回も「MHZ19_uart.h」というものを使わせて頂きます。
手順は簡単で、こちらからライブラリーをダウンロードして解凍します。
・解凍が終わりましたら「mhz19_uart-master」というフォルダーごと
ドキュメント → Arduino →「libraries」(C:\Users\…..\arduino\libraries)に入れるだけです。
後はArduinoIED起動させ、ファイルスケッチ例の中にmhz19_uartがあれば準備完了です。
④「いよいよプログラミング」
※Arduino IDEでArduino Nano互換ボードをご使用する場合は、プロセッサを「ATmega328P」→「ATmega328P(Old Bootloader)」に変えてください。
これをしないと上手く書き込めない場合がほとんどです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
/* * OLEDディスプレイモジュール用ライブラリーをインクルード */ #include<Wire.h> #include<Adafruit_GFX.h> #include<Adafruit_SSD1306.h> /* * MH-Z19用ライブラリーをインクルード */ #include <MHZ19_uart.h> //CO2センサー(MH-Z19)ピン指定 const int tx_pin = 4; //Serial tx pin no const int rx_pin = 5; //Serial rx pin no MHZ19_uart mhz19; //ディスプレイ変数の宣言 Adafruit_SSD1306 display(0); void setup() { //ディスプレイの初期化 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); Serial.begin(9600); mhz19.begin(rx_pin, tx_pin); mhz19.setAutoCalibration(false); Serial.print("MH-Z19 now warming up... status:"); Serial.println(mhz19.getStatus()); delay(1000); //1秒間待つ } void loop() { //CO2センサー(MH-Z19)取得 int co2ppm = mhz19.getPPM(); int temp = mhz19.getTemperature(); //CO2濃度出力 Serial.print("co2: "); Serial.println(co2ppm); //気温出力(おまけ機能ですので精度は悪いです) Serial.print("temp: "); Serial.println(temp); display.clearDisplay(); //ディスプレイをクリア //気温表示 display.setTextSize(1); //文字サイズを設定 display.setTextColor(WHITE); //文字色を設定 display.setCursor(1, 0); //文字の開始位置を設定 display.print(temp); //変数nをディスプレイ出力するよう設定 display.print("C"); //CO2表示 display.setTextSize(2); //文字サイズを設定 display.setTextColor(WHITE); //文字色を設定 display.setCursor(1, 10); //文字の開始位置を設定 display.print("CO2:"); display.print(co2ppm); //変数nをディスプレイ出力するよう設定 display.display(); //上記条件でディスプレイ表示 delay(1000); //1秒間待つ } |
※一応シリアルモニターでもセンサーの値を見れるようにしてます。
⑤「結果」
プログラムが書き終わりましたらモニターにセンサーの値が表示されます。
MH-Z19センサーは値取得までに約1分ほどかかりますので、暫く待つとそれっぽい値が表示されるようになります。
-1と表示される場合はセンサーが繋がっていない状況なので、配線を確認しましょう!
気温も表示するようにしていますが、精度は優れていないためおまけ程に思いましょう!
一応部屋の気温と表示されている気温は一致してました。
CO2濃度の大まかの基準です。
350~500ppm | 外気 |
500~1000ppm | 一般的な屋内 |
1000~2000ppm |
悪い室内空気環境
|
2000~2500ppm |
眠気を感じてくる人が出てくる
|
2500~3000ppm |
肩こりや頭痛を感じてくる人が出てくる
|
3000ppm~ |
集中力などが低下してくる
|
すみません。他のページで質問させていただいていますがこちらの方法がきになりましてコメントいたします。
CO2センサーをMH-Z19Eから手持ちのSDC40に置き換えてCO2、温度、湿度を0.96インチOLEDディスプレイに表示できないでしょうか。
よろしくご検討願います。
コメントありがとうございます^^
SDC40という物がどんなものか分からず、触ったことも無いのでお力になれません。
申し訳ないです(-_-;)
すみませんでした。
SCD40ガスセンサーモジュール、検出CO2二酸化炭素、温度と湿度、2イン1センサーの
間違えですが、無理でしょうか。