ArduinoでCO2センサー(MH-Z19B)をPWM信号で取得してみる!
こんにちは!
・前回はCO2センサー(MH-Z19)を使ってシリアル信号で値を取得してみましたが、
今回はPWM信号で取得する方法をやってみたいと思います!
まず、疑問に思うのがシリアル信号と PWM信号ってなんぞや?って思う方がいるかと思います!
私もそうです! なので調べてきました!
・PWM信号(パルス幅変調)とは、変調方法の一つであり、
パルス波のデューティ比を変化させて変調すること。
と、ウィキペディアさんの説明には記載されておりますが、全く理解できませんでした(;^ω^)
もう少しわかりやすい説明発見⇩
・電圧を制御する方法の一つで、出力のオンとオフのスイッチを行うことで、
パルス幅に比例した電圧を得ることがでる。
これならなんとなく理解できました!
もっと詳しく知りたい方はこちらへ → 参考サイト
・次に、シリアル信号とは、データを送受信するための伝送路を1本、
もしくは2本使用してデータを1ビットずつ連続的に送受信する通信方式である。
少ない信号線での接続が可能なため、線材や中継装置のコストが抑えられるなどのメリットがあるそうです。
PC関係などに多く使われる用語ですが、センサーもこれらのインターフェイスを持ち、
通信により制御可能なものも多く存在するそうです!
もっと詳しく知りたい方はこちらへ → 参考サイト
・そして、なぜ、今回はシリアル信号とからPWM信号のやり方を説明するかというと、
シリアル信号は使う線が4本(+、ー、tx、rx)必要なのに対して、
PWM信号だと3本(+、ー、ppm)で済むんです!
更に、「MHZ19_uart.h」というライブラリーを入れる手間が無くなります!
ってことで早速作ってみたいと思います!
①「使う部品」
・MH-Z19B
電子工作ステーション 2900円(送料無料)
・Arduino UNO
電子工作ステーション 1200円(送料無料)(USBケーブル付属なし)
秋月電子 2000円前後+送料(USBケーブル付属あり)
※UNO以外の物でも大丈夫です。
・通信対応USBケーブル(無ければ)
電子工作ステーション 50円+送料(500円以上で無料)
・ジャンパーワイヤー(オス・メス)(3本)
電子工作ステーション 1セット(10本)100円+送料(500円以上で無料)
秋月電子 10本220円+送料
②「回路」
・センサーの裏面に接続pinが記されているので、それを参考にしながら接続していきます。
MH-Z19 | Arduino接続箇所(接続pin) |
V1n | 5V( + ) |
GND | GND( – ) |
pwm | A0 |
③「プログラミング」
・早速プログラミング、特にライブラリー入れる必要は御座いません^^
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 |
#define pwmPin A0 int prevVal = LOW; long th, tl, h, l, ppm; void setup() { Serial.begin(9600); pinMode(pwmPin, INPUT); } void loop() { long tt = millis(); //電圧を取得 int myVal = digitalRead(pwmPin); //パルス長の計測 if (myVal == HIGH) { if (myVal != prevVal) { h = tt; tl = h - l; prevVal = myVal; } } else { if (myVal != prevVal) { l = tt; th = l - h; prevVal = myVal; ppm = 5000 * (th - 2) / (th + tl - 4); Serial.println("PPM = " + String(ppm)); } } } |
これでとりあえず取得はできるはずです!
今回は参考サイトとしてほぼ「二酸化炭素センサー MH-Z19 のPWM入力プログラムを割り込み処理で実現」
という記事を使わせていただいているので、詳しくは参考サイトをご覧下さい(;^ω^)
多数センサーを使う場合などの対処法も載っています!
ESP-WROOM02で作りたい方はこちらへ。
(但し、シリアル通信で取得する方法のみになります。)
以上、このような終わり方で申し訳ないですがご訪問ありがとうございました(;^ω^)
Toccho, thanks so much for the post.Much thanks again. Really Cool.