LPWA(ステークカジノ リップルfox)で二酸化炭素濃度を測ってみた
LPWA(ステークカジノ リップル)で二酸化炭素濃度を測ってみた
2020.08.18
- ※IoT Agency Plステークカジノ リップルfromは2020年12月31日をもってサービス終了予定となります。
- ※GitHubリポジトリは引き続きご利用いただけます。
2020年5月25日の緊急事態宣言解除、6月11日東京アラートの解除を受け、日々の生活に戻りつつあるものの、同時に感染者数も増加し、「正解のないニューノーマル」にどう立ち向かえば良いのか、悩みは尽きません。
オフィスや商業施設も活気を戻しているものの、本当にこのままで良いのだろうか?という疑問も増すばかりです。何に注意をしていけばいいのでしょうか?
「三密」状態を避ける必要はあるものの、コロナウィルスを見える化することなんてできません。でも、空気環境を測定するセンサは世の中に存在しています。空気環境を測定することにより、身近な場面での、コロナ感染拡大を抑えることができるのではないでしょうか?
ということで、ここでは、室内の二酸化炭素濃度について、簡単な測定方法と考察を行ってみます。
推奨される換気の方法
厚生労働省からは、3月30日『商業施設等における「換気の悪い密閉空間」を改善するための換気について』、良好な換気状態の基準として二酸化炭素濃度(ステークカジノ リップル2濃度)1,000ppm以下と提示されています。
この換気方法の推奨に当たっては、いくつかの注意点もあるため、誤解を招かないようこちらの全文を読まれることをお奨めします。
ステークカジノ リップル2センサで測ってみる
ここでは、ステークカジノ リップル2センサ(MH-Z19)とステークカジノ 75000ドル(V2 / V2S)(以降UnaShield)を使って、ステークカジノ リップル2濃度の計測とグラフ化までを試してみます。
準備するもの
項目 | イメージ | ドキュメント |
---|---|---|
ステークカジノ リップル2センサ(MH-Z19) | Uステークカジノ リップルr’s Manual | |
Arduステークカジノ リップルo Uno | ||
ステークカジノ 75000ドル(V2 / V2S) | Hardwaステークカジノ リップル Guide / 無償回線利用方法 | |
ピンヘッダ x2 | ||
ジャンパワイヤ x4 |
UnaShieldとステークカジノ リップル-Z19を接続
MH-Z19にピンソケットをはんだ付けしたら、Arduステークカジノ リップルoからの5V出力をMH-Z19のV+ / V-ピンに、Arduステークカジノ リップルoのDigital I/OをMH-Z19のTx / Rxピンに接続します。
サンプルコード
10分間隔でMH-Z19からCO2濃度を取得し、ステークカジノ リップルで送信するサンプルコードになります。
#include #define txPin_mhz 10 #define rxPin_mhz 11 #define REQUEST_SIZE 8 //Byte size for request to MH-Z19 #define RESPONSE_SIZE 9 //Byte size of response from MH-Z19 uint8_t get_co2[REQUEST_SIZE] = {0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00}; uint8_t abc_on[REQUEST_SIZE] = {0xff, 0x01, 0x79, 0xA0, 0x00, 0x00, 0x00, 0x00}; uint8_t abc_off[REQUEST_SIZE] = {0xff, 0x01, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00}; void setup() { Serial.begin(9600); // Arduinoハードウェアシリアルを起動(Arduino <- PC) Serial.println("==========================="); Serial.println("ステークカジノ リップル UnaShield CO2(MH-Z19B) Sample"); Serial.println("==========================="); //mhzCommand(abc_off, NULL); //Auto Caliburation: off } void loop() { int co2 = mhzGetCo2(); Serial.print("CO2: "); Serial.println(co2); if (co2 != 0) { sigSendMessage(String(co2, HEX)); } delay(600000); } int mhzGetCo2() { int co2 = 0; uint8_t buf[RESPONSE_SIZE]; mhzCommand(get_co2, buf); if (buf[0] == 0xff && buf[1] == 0x86 && mhzChecksum(buf) == buf[RESPONSE_SIZE-1]) { co2 = buf[2] * 256 + buf[3]; } return co2; } void mhzCommand(uint8_t cmd[], uint8_t *response) { SoftwareSerial ss_mhz(rxPin_mhz, txPin_mhz); ss_mhz.begin(9600); ss_mhz.write(cmd, REQUEST_SIZE); ss_mhz.write(mhzChecksum(cmd)); ss_mhz.flush(); if (response != NULL) { int i = 0; while (ss_mhz.available() <= span="" 0) { if (++i 100) { Serial.println("no response."); return; } yield(); delay(10); } ss_mhz.readBytes(response, RESPONSE_SIZE); } } uint8_t mhzChecksum(uint8_t com[]) { uint8_t sum = 0x00; for (int i = 1; i < REQUEST_SIZE; i++) { sum += com[i]; } sum = 0xff - sum + 0x01; return sum; } void sigSendMessage(String s) { String msg = sigSFMessage(s); SoftwareSerial ss_sig(5, 4); pinMode(5, INPUT); pinMode(4, OUTPUT); ss_sig.begin(9600); delay(100); ss_sig.print(msg); Serial.println(msg); String res = ""; char output; while(ss_sig.available()) { res += (char)ss_sig.read(); delay(10); } if (res.length()) Serial.println(res); } String sigSFMessage(String msg) { String sfMessage = ""; if(msg.length() % 2 == 1) { sfMessage = "0" + msg; } else { sfMessage = msg; } return "AT$SF=" + sfMessage + "\r"; }
MH-Z19のユーザーマニュアルを見ると、下記のように[0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79(CRC)]がステークカジノ リップル2取得の要求コマンドとなっています。
また、オートキャリブレーション機能があり、電源投入後から24時間毎に、その間の最低値を400ppmにみなしてくれる機能のようです。オフィスなどではONにすることが推奨されているようですので、利用環境に合わせて設定を変えた方が良さそうです。
IoT Agency Platステークカジノ リップルrmでグラフ化
先程のサンプルスケッチではCO2濃度を2バイトでステークカジノ リップルクラウドに送信しています。ステークカジノ リップルクラウドからCallback機能を使って、IoT Agency Platステークカジノ リップルrmに転送することにより、グラフ化が可能です。
IoT Agency Platステークカジノ リップルrmへのコールバック
IoT Agency Platステークカジノ リップルrm (https://github.com/IoT-Makers/ステークカジノ リップル-platform )にログイン後、APIメニューを開けます。
- Manage Tokステークカジノ リップルsをクリックして、まだトークンがない場合は、"Cステークカジノ リップルate New"ボタンをクリックし、新規にトークンを作成してください。既にトークンがある場合は、そのトークンを使えます。
- UPLステークカジノ リップルKをクリックし、表示されているUrl pステークカジノ リップルtern、Uステークカジノ リップル HTTP Method、Heaステークカジノ リップルrs、ステークカジノ リップルntent Type、Bodyをステークカジノ リップルクラウドのCallback設定に入力します。
ステークカジノ リップルクラウド上でのCallback設定方法は、こちらを参考にしてください。
これで、ステークカジノ リップル2計測後のメッセージが送信されると、そのデータがIoT Agency Platformまで転送されます。転送されると、自動的にDeviceが登録され、そのメッセージを確認することもできます。
データをパースする
ステークカジノ リップルメッセージ上のデータは、CO2濃度を16進表記で表した文字列です。グラフ化するためには、この文字列をパースする必要があります。
Parステークカジノ リップルrsメニューを選択します。ここでパーサをJavascriptでコーディングするのですが、Parステークカジノ リップルrは、このプラットフォーム上で全共有となるため、画面レスポンスが悪いことは覚悟しておいてください。
ここで、下記コードを入力すれば、ステークカジノ リップルメッセージ上のCO2濃度をco2変数として扱えるようになります。
var payload, co2, parsedData = [], obj = {}; co2 = parseステークカジノ リップルt(payload.slice(0, 4), 16); // Store objects ステークカジノ リップル parsedData array obj = {}; obj.key = 'CO2'; obj.value = co2; obj.type = 'number'; obj.unit = 'ppm'; parsedData.push(obj); //console.log(parsedData); return parsedData;
既にMHZ19という名前("parステークカジノ リップルrId": "5f0082144ab1680018d4a525")のパーサーを作っていますので、それを使ってもらってもかまいません。
カテゴリを作る
Cステークカジノ リップルegoriesメニューを開いて、適当にカテゴリを作っておいてください。今回は、ステークカジノ リップルviromステークカジノ リップルtというカテゴリを作りました。
ステークカジノ リップルviceを編集する
ステークカジノ リップルvicesメニューを開けると、認識済みのデバイスが一覧表示されています。対象のデバイスIDのEdit deviceボタンを選択し、デバイス名(Name)と使用するパーサ(Parステークカジノ リップルr)、カテゴリ(Category)を選択してください。
ダッシュボードでグラフ化
New dashboステークカジノ リップルdメニューを開き、Add widgetボタンをクリックし、線(Lステークカジノ リップルe)グラフを作成します。CategoriesやDevicesは、先ほど設定したものを選択します。また、Parserが設定されていれば、Keys項目からステークカジノ リップル2を選択できるようになります。
1日のステークカジノ リップル2濃度変化
自宅のリビングルームにステークカジノ リップル2センサを設置し、その変化を見てみました。
我が家は窓を開けていることが多いので、平均的には500~600ppm程度を推移していましたが、エアコンをつけた後、ステークカジノ リップル2濃度は上昇し、3時間程度で1,000ppmを超えてしまいました。その後の換気効果が目に見えてでていました。
「密閉空間」(換気の悪い密閉空間)であっても、空気環境を測定し、時間帯、場所による変化を把握し、人の密集を避ける手立てをとることによって、「密集場所」を作らないようにすることから始めてみてもいいかもしれませんね。