CO2センサー(MH-Z19)で濃度によってLEDの色が変わる物を作ってみる!
こんにちは!
今回は前回の続編として、日常生活で実際に、役に立ちそうな物を作ってみたいと思います!
・前回のおさらいとして、CO2センサー(MH-Z19)でCO2濃度(ppm)はどのくらいで悪い空気レベルになるのか実験し、畳2畳分くらいの部屋で窓を閉めた状態で寝てみたところわずか30分で1000ppmを超え、1時間後には1500ppmまで上がったことがわかりましたね。
では、今回はこのCO2濃度(ppm)の量ををLEDの色で表現してくれる物があったら便利だと思い、
作ってみたいと思います!
LEDの色の分け方はこんな感じにしてみたいと思います↓
CO2濃度 | LEDの色 |
0~499ppm | 青 |
500~899ppm | 水色 |
900~1199ppm | 緑 |
1200~1699ppm | 黄色 |
1700~2499ppm | ピンク紫 |
2500ppm~ | 赤 |
①「作り方」
作り方はとても簡単で、
こちら↓の記事と
電子工作の基本、Lチカ! ESP-WROOM02を使ってArduinoと同じように3色LEDを光らせる!
こちら↓の記事を組み合わせるだけです!
朝の眠気にも影響!? ESP-WROOM02( ESP8266)でCO2センサー(MH-Z19)でCO2濃度を測定してみる
※ArduinoIDEでESPWROOM02を使うための開発環境構築は
上記の記事に記載してありますのでそちらを参考にしていただければと思います。
※使う部品も上記のサイトで紹介した物(3色LED、MH-Z19、ESP-WROOM02など)のみ使用します。
「接続例」
MH-Z19
・V1n → 5V
・GND → GND(ー)
・Tx → IO4
・Rx → IO5
3色LED
一番長い足がアノード(+)になります。上の画像、左から順番に赤、アノード、緑、青になります。
こんな感じに接続します。
・IO13 → 赤
・IO12 → 緑
・IO14 → 青
・3V3 → アノード
完成↓ (黒い線が長くて汚く見えてしまっていますが気にしないで下さいw)
※画像をクリックすると綺麗に見れます。
②「プログラム」
プログラムはこんな感じです。
(もっとカッコイイ書き方ははたくさんありますが入門者でも分かりやすいようなプログラムにしました!)
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
/*---------------------------------------------------------- MH-Z19 CO2センサーサンプルプログラム ----------------------------------------------------------*/ //3色LEDを繋ぐpinナンバー #define green 12 #define red 13 #define blue 14 //MH-Z19取得に必要なライブラリー #include <MHZ19_uart.h> //MH-Z19に接続するためのpinナンバー const int rx_pin = 5; //Serial rx pin no const int tx_pin = 4; //Serial tx pin no MHZ19_uart mhz19; /*---------------------------------------------------------- MH-Z19 CO2 sensor setup ----------------------------------------------------------*/ void setup() { //Arduinoで使用の場合は9600にしてください。 Serial.begin(115200); //3色LEDを使えるようにする pinMode(green, OUTPUT); pinMode(red, OUTPUT); pinMode(blue, OUTPUT); //3色LEDを消灯(このLEDはこカソードコモンなのでLOWで点灯となります。) digitalWrite(green, HIGH); digitalWrite(red, HIGH); digitalWrite(blue, HIGH); //MH-Z19設定 mhz19.begin(rx_pin, tx_pin); mhz19.setAutoCalibration(false); Serial.println("MH-Z19 now warming up... status:"); Serial.println(mhz19.getStatus()); //3秒待つ(特に理由はありません) delay(3000); } /*---------------------------------------------------------- メイン ----------------------------------------------------------*/ void loop() { //CO2取得 int co2ppm = mhz19.getPPM(); //シリアルモニターにCO2濃度表示 Serial.print("co2: "); Serial.println(co2ppm); //点灯速度 int ls = 1; //濃度値でLEDの色を変えていく if (co2ppm <= 499) { //徐々に点灯 for (int i = 1023; i >= 0; i--) { analogWrite(blue, i); delay(ls); } //徐々に消灯 for (int i = 0; i < 1023; i++) { analogWrite(blue, i); delay(ls); } } else if (co2ppm <= 899) { //徐々に点灯 for (int i = 1023; i >= 0; i--) { analogWrite(blue, i); analogWrite(green, i); delay(ls); } //徐々に消灯 for (int i = 0; i < 1023; i++) { analogWrite(blue, i); analogWrite(green, i); delay(ls); } } else if (co2ppm <= 1199) { //徐々に点灯 for (int i = 1023; i >= 0; i--) { analogWrite(green, i); delay(ls); } //徐々に消灯 for (int i = 0; i < 1023; i++) { analogWrite(green, i); delay(ls); } } else if (co2ppm <= 1699) { //徐々に点灯 for (int i = 1023; i >= 0; i--) { analogWrite(red, i); analogWrite(green, i); delay(ls); } //徐々に消灯 for (int i = 0; i < 1023; i++) { analogWrite(red, i); analogWrite(green, i); delay(ls); } } else if (co2ppm <= 2499) { //徐々に点灯 for (int i = 1023; i >= 0; i--) { analogWrite(blue, i); analogWrite(red, i); delay(ls); } //徐々に消灯 for (int i = 0; i < 1023; i++) { analogWrite(blue, i); analogWrite(red, i); delay(ls); } } else if (co2ppm <= 5000) { //徐々に点灯 for (int i = 1023; i >= 0; i--) { analogWrite(red, i); delay(ls); } //徐々に消灯 for (int i = 0; i < 1023; i++) { analogWrite(red, i); delay(ls); } } else { //正常に取得できていない場合 digitalWrite(red, LOW); delay(2000); digitalWrite(red, HIGH); delay(2000); digitalWrite(red, LOW); delay(2000); digitalWrite(red, HIGH); } //改行 Serial.println(); } |
成功すればこんな感じに動作します↓
・シリアルモニターの表示結果↓
・稼働結果↓
市販でこんなの売ってたらちょっとほしくなりますね!
以上、ご訪問ありがとうございます^^
4件のフィードバック