夏休み自由研究!?
主題のInstrument Screen とは和訳すると、百葉箱になります。
百葉箱にIoTを絡めているということは・・・・・
作ってみました、ベランダ百葉箱にセンサーを設置して、気象観測データ収集システム!!
学生時代の練習船、船橋当番に気象観測当番があったな。船橋から離れるときは”気象観測行ってきます”と当直航海士に告げて、当番作業していたが、活舌悪く、たまに”きそうかんしょく行ってきます”と大声で言っていたな。
気相を感触、一体どんな感触?
システム概略
絵に描いてしまうと、シンプルな構成ですね。
各構成機器の役割は、
1. ベランダ手作り百葉箱
ググると、小型百葉箱は、植木鉢の下皿を流用するのがコストも性能もベストとあり、採用。
センサーは、BME280、BOSH社のセンサーを用いたモジュールを採用、気温 / 湿度 / 気圧が計測可能。(以下写真参照 サイズ 10mm X 16mm >なまら小さい)
2. Raspberry Pi
ラズパイの役割は、センサーからデータを取得して、無線LANを経由して、NASに構築している、データベースにデータを送信。プログラムはPythonを使っています。
データサンプリングは10分毎で、高度な計算は全くしないので、性能は低くても大丈夫かな?安価なZERO W/WHで大丈夫だと思います。でも、筆者は手元に4B 4GBモデルしかなかったので、贅沢に4Bを使いました。
3. NAS (Synology DS218J)
ラズパイから送られてきたデータを、データベース化して、保存。データベースは、この来歴補助簿 (WordPress)でも使っているMy-SQL系のMaria DB 10です。phpのプログラムを入れて、インターネットからphpプログラムにアクセスがあると、気象観測データを送信する仕掛けになっています。
DS218Jですが、3年電源入れっぱなしですが、壊れる気配無く順調に動いています。
ドキドキi2c長距離通信
ラズパイとベランダ百葉箱内センサーBME280の通信は、配線がシンプルなI2C通信を採用しました。電源の+3.3V と GND (アース) が2本、通信線の2本(SDA & SCL)、計4本の線があれば、通信できてしまいます。
ただし、この通信規格、基板上もしくは数十センチの通信距離で使われることを想定しているようで、長距離は大変そう。
今回は5m程度ですが、問題はケーブルがアンテナとなりノイズが乗ってしまう事が心配。
船では、CAN (Controller Area Network)が機器に多用されていますが、ノイズに強い長距離通信規格はすごいですね。
どのようにノイズ対策したかというと、シールド付き多芯ケーブルを用いました。LANケーブルのCat6以上のケーブルでも大丈夫なようです。
シールド付き多芯ケーブル効果は絶大で5m程度ですが、安定してデータが来ているようです。ただし、周りにあるアマチュア無線機で送信状態で試したことはないので、アマチュア無線機で電波を出ているときはダメかな?
そういえば、船の機器も通信ケーブルシールドは、ノイズ対策として、制御装置キャビネットやコンソールにしっかりと接地されています。船はノイズで誤作動が起こると、最悪は推進機関が止まってしまいます。
ベランダ百葉箱
ベランダ百葉箱は、鉢植え下皿をひっくり返して作りました。最上面はねじ穴開けていますが、一応シリコンシーラントと、キャップナットでなんちゃって防水しています。
中間の皿は、片刃フリーカッターで中心をくりぬいています。
一番下の皿は、ケーブルグランドを取り付けて、一応見た目も気にしてみました。皿は3本の寸切りボルトで串刺し、皿の間には、20mm高さの6角両雌ねじスペーサーを入れています。
工作精度はいまいちでしたが、皿がプラスチックなので、しっかりと誤差を吸収してくれました。(木工 / 鉄工だったら駄目だったな(笑))
穴あけ電動工具が無かったので、ちゃっかりマキタの”ペン電動ドリルドライバー (DF012DSHX) 買っちゃいました・・・・
今までは、ピンバイス(手動ドリル)とリーマでひたすら手作業で穴をあけていました。
ちなみに、後ろに写っている、防水箱の中には、アマチュア無線の同軸切り替えスイッチが入っています。そして植物は、スチューベンというブドウですが、最初の1年のみブドウが収穫できて、その後は全くできていません。単なる緑になっていますヽ(`Д´)ノ
ソースコードは??
偉そうなこと書きましたが、ソースコード (プログラム)はやっぱり、ググって、拝借させていただきました。主に利用させていただいたソースは、こちらを参照しています。
そのまま、コピペすると、データベースにアクセスができない、また作者のホームページと全然見た目が違うページになってしまうので、その点を中心に手を入れさせてもらいました。
プログラムの構成ですが、
1. Raspberry Pi
センサーBME280との通信 < Python
センサーBME280からデータ取得 < Python
取得したデータをNSAのデータベースに送る < Python
2. NAS (DS218J)
データベースに保存されているデータを引き出す < php
引き出されたデータを見える化 < html
データベース関連は思ったよりも、あっさりとでき、ビックリ。WordPressやBBSで鍛えられたか?
絶対に違う、運がいいだけだな
Raspberry Piにプログラムに実装する際は、いっちょ前にSSHでRaspberry Piにアクセスして、コマンドプロンプトで格闘しました。何とかなるもんですね。
見た目は?
見ていただける読者は皆無と思いますが、我がホームページで、観測 (計測)データを公開しています。
生データに加えて、グラフ化もされています。グラフ化には、CanvasJSというライブラリを使っています。データベースにあるデータの見える化が結構簡単にできます。びっくりです。
東京 / 北区の気温が気になったら見に来てください。
今回の学び??
息子の夏休みの自由研究にはちょっと高度すぎる内容なので、実は息子向けには、ラズパイピコを使って、温度湿度を計測して、熱中症指数(WBGT)を疑似的に計算して、小型液晶に生データ表示、WBGTが危険値になったら、赤LED点灯 / 安全値であれば緑LED点灯する、熱中症指数計を作成しました。こちらはラズパイピコで作成したので、ネットワーク接続機能はなく、スタンドアローンです。
では、今回なんちゃってIOTシステムを作ったかというと、今船では、ほぼ同じ仕掛け(以下図参照)で、本船の各センサーで取得した、航海 / 機関データを一定時間 (数十分毎)に、陸上側に衛星通信を介して、陸上のクラウドサーバに送信、そしてデータの見える化をするシステムの導入が進んでいます。すなわち、データの密度は低いですが、本船の状態が、陸上でほぼリアルタイムである程度把握できます。
上記のようなIOTに仕事上携わることが、不可避になりつつあるので、本船システムの勉強かねて作ってみました。(もちろん船の方は、プロの方がシステム構成、データ見える化しています)
来年の息子の自由研究は、自動記録しているデータを使って、データの見方の研究でもさせようかな?
今回の収穫
- Linux / SSH の基礎 (ラズパイ触ったので)
- 新たなプログラム言語入門 Python
- php & htmlの復習
- MySQL系のデータベース管理の復習
- 物理センサーの取り扱い、センサー通信の基礎
- 工作 (結構新たな工具をそろえてしまった・・・・)
ちょっとは賢くなったかな?
コメント
ラズパイ4B 4GBだともったいなので、ラズパイ ZEROに変えました。
問題無く、バリバリデータ取得しています。