【はじめに】
前回(#1 環境構築編)でArduino IDEのセットアップが終わりました。
今回はいよいよCO2センサー MH-Z19C を接続して、CO2濃度を取得します。
【なぜCO2モニターを作るのか】
私がこれを作ろうと思った理由は2つです。
・家の中のCO2濃度を実際に調べたかった
・電子工作と組み込み技術を習得したかった
部屋の空気が悪いと集中力が落ちると言われますが、実際の数値を見たことがありませんでした。
また、私は作業中に眠くなることがあり、これもCO2濃度の問題ではないかと思い、一度計測してみようと思いました。
それなら自分で作って、測ってみようと思ったのがきっかけです。
【使用する部品】
| 部品 | 説明 |
|---|---|
| ESP32-WROOM-32E | メインのマイコン |
| MH-Z19C | CO2センサー |
MH-Z19CはNDIR方式という仕組みのCO2センサーで、比較的正確に測れて初心者にも扱いやすいです。
※NDIR方式(非分散型赤外線)とは、CO2が赤外線を吸収する性質を利用していて、
光がどれだけ吸収されたかでCO2濃度を測ります。
霧が濃いほど光が届きにくいのと同じ原理です。
【配線】
MH-Z19CとESP32を以下のように接続します。
| MH-Z19C | ESP32 |
|---|---|
| Vin | 5V |
| GND | GND |
| TX | GPIO13 |
| RX | GPIO14 |
ここで最大の注意点があります。
センサーの TXはESP32のRX側、RXはESP32のTX側 につなぎます。送信と受信は交差させるのが基本です。
#include <HardwareSerial.h>
#include <MHZ19.h>
MHZ19 myMHZ19;
HardwareSerial mySerial(2);
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, 13, 14);
myMHZ19.begin(mySerial);
myMHZ19.autoCalibration(false);
}
void loop() {
int co2 = myMHZ19.getCO2();
Serial.print("CO2: ");
Serial.println(co2);
delay(5000);
}
【使用ライブラリ】
ライブラリマネージャから以下をインストールします。
MHZ19 by Jonathan Dempsey
【コードの簡単な解説】
・mySerial(2) → ESP32の2番目のシリアル通信を使う
・mySerial.begin(9600, SERIAL_8N1, 13, 14) → GPIO13とGPIO14でセンサーと通信する
・myMHZ19.getCO2() → CO2の値を取得する
・delay(5000) → 5秒ごとに測定する
【つまずいたポイント】
配線を間違えてなかなか動きませんでした。
最初、ESP32とセンサーの配線を間違えていて、CO2の値がうまく取得できませんでした。
特にTXとRXは交差させる必要があるのですが、ここを真っ直ぐつないでしまっていたのが原因でした。
配線が正しいか何度も確認することが大事だと学びました。
【動かしてみた結果】
配線を直して書き込むと、Serial Monitorにこう表示されました。
CO2: 583
CO2: 590
CO2: 601
初めて自分の作ったセンサーから数値が出てきたときは、本当に嬉しかったです。
これが電子工作の醍醐味だと感じました。
【まとめ】
・MH-Z19CとESP32を配線して、プログラムを書き込む
・CO2の値をセンサーが取得して、をSerial Monitorに表示できた
次回はCO2が高くなったらGmailで通知する機能を追加します!