こんにちは。マイクロアドでインフラエンジニアとして勤務している伊東です。
今日はインフラエンジニア視点で導入してみた社内 IoT、間接的な業務効率改善の話をいろいろ脱線しながらユルくご紹介したいと思います。
IoT の歴史とマイクロアドの現在と
近年よく聞く「IoT」ですが調べてみると意外と歴史は古いようです。まだ IoT という名前もなくインターネットすら一般的ではなかった 1992 年頃、コーラの自動販売機の残量、温度のデータを送ったのが始まりだとか・・・。または、それよりも1年前、ケンブリッジ大学で研究室のコーヒーメーカーにコーヒーがあるかどうかを確認するために設置されたカメラも「残量」や「温度」を知りたいというコーヒーメーカーに対する欲求であり、間接的ですがそれを実現した IoT です。
さて、マイクロアド社内ではどんな要望、課題があったのでしょうか。
それは、ビッグデータの分析、ミリ秒単位の処理速度に気を配るRTBの開発エンジニアでも解決できないトイレ個室渋滞です。一人ひとりの処理速度には限界がありました。空き状況がわからず席をたちトイレの前で待たされるオフィス環境。遠の昔から飛行機ではトイレの空き状況が表示されていたのに・・・とてもIT企業とは思えません。そこで無駄な待ち時間を解消すべく、個室監視システムの制作へと進みました。
設計とこだわり
すでにこの手の製品は世の中に幾つか存在しますので導入すれば即解決なのですが、それではつまらない。自由にチャレンジできる環境があるのですから、ハードウェアから自作します。
こだわりポイントは3つ
- ZigBee 使いたい
- PCB作りたい
- コードは書きたくない
ZigBee
センサーネットワーク用に設計された無線通信規格で IEEE 802.15.4 として規格化されています。センサーネットワーク用なので通信速度は最大 250Kbps と低速ですがとにかく省電力で、さらに1つのネットワークに理論上 65,536 台接続できます。間欠動作の復帰速度が早いことや中継機能があるのがとても良いですね。BLE (Bluetooth Low Energy)も選択肢としてはアリですが規格が混沌としているので今回は導入を見送りました。
PCB
PCB は( Printed Circuit Board )プリント基板のこと。パソコンのマザーボードなど電子部品がハンダ付けされているやつです。ちょっと前までは数十万円以上かかった基板製作ですが今では数千円で試作出来ます。これは作ってみるしかないでしょう。
これらを踏まえて全体設計を進めていきます。
図1
センサー
ドアの開閉を監視し、無線でセンサーGWまでデータを送ります。ドアに設置しますので小型かつ省電力で動作することが必須です。
今回は MonoWireless TWELITE DIP を採用しました。技適取得済みのとても使いやすいZigBee モジュールです。
センサーGW
複数のセンサーからのデータを各フロア1台のGWが中継しデータベースサーバへ送信します。データを中継するスクリプトを最低限書く必要がありますのでここは Raspberry Pi 一択です。
データベース
各フロアのセンサーGWからのデータを蓄積し、表示プログラムにリクエストに応じて渡します。設定運用は面倒なので可能な限り楽なものが良いです。最近流行りの Prometheus を選択しました。バイナリ1つなのが良いですね。
表示
Web 表示を基本とします。Prometheus ときたら表示は Grafana 一択です。セットアップも簡単ですし、見た目が良いグラフを簡単に作れるところがステキです。
ここまで来たらタスクの整理です。
主なタスクはこの2つ
- PCB の作成
- 中継用 Python スクリプトの作成
このあとは PCB 作成のお話だけ。開発チームの目の前でインフラが Python を語る勇気はありません。
試作とテスト
まずはブレッドボード上で試作し全体の動作検証を行います。この作業はとても重要です。
消費電力から電池の寿命を計算し自宅で電波の飛び具合を確認したりしました。しかし実際のオフィスは想像以上に広く、パーティションなど電波を遮るもの、弁当用電子レンジ、2.4GHz 帯の Wi-Fi、 流行りの Bluetooth イヤホンなどとの混信と悪条件が重なります、省電力な ZigBee には過酷な環境でした。
ZigBee は 800MHz 帯、900MHz 帯もありますが、それぞれ欧州、アメリカ向けであり、日本国内では許可されていない周波数の為、周波数を変えるという逃げ道がありませんし、そもそも選択したモジュールも 2.4GHz しか対応していません。出来ることは基板上のアンテナではなく、より良い外付けアンテナにするぐらいです。
結果高出力タイプのモジュールを選択せざるを得ず、電池駆動1年は達成できそうにありません。
PCB の作成
さすがに開発設計段階で使用するブレッドボードをトイレのドアに張り付けるわけにはいきません。品質も見た目もステキな基板を制作し、ケースに組み込みます。(ケースに入れたら見えないんですが・・・)
設計には CAD を使用します。基板設計専用のものがあり、フリーでは「KiCad」「DesignSpark PCB」、商用では「EAGLE」が有名です。今回は入門向きの「KiCad」を使用します。どのソフトも一長一短癖があり慣れるまでは苦労しますが基本的に作業は同じで
- 回路図作成
- レイアウト作成
- 専用フォーマットで出力
- データを工場へ送る
- 完成品受け取り
となります。
実際の手順は図2の通りで、回路図エディタで論理回路を作成し、論理回路図を基にプリント基板エディタで部品レイアウトと基板上の配線を作成します。部品テンプレートが用意されていない特殊なパーツの場合はコンポーネントエディタとフットプリントエディタで作成します。
図2
図3:回路図の作成
図4:基板レイアウトの作成
「ヤード・ポンド法」と「メートル法」が混在していて慣れるまでつらいです。ケースなどは mm ですが、ICなどは mil (1/1000 インチ)で表します。
完成へ
センサーからデータを受けてサーバに送る Python スクリプト、prometheus、grafana の設定をして完成です。
その後
年初から運用を開始し半年が経過しました。一定の効果があったのでしょうか、現在では個室前に並んでいる人を見かけることはほとんど無くなったように思います。そして長時間利用も減ったような・・・
心配していた電池も8ヶ月程度は持ちそうです。これなら運用負荷も許容範囲でしょう。さて次はなにをつくろうか
※電波送受信に関わる部品はすべて Mono Wireless 純正品を組み合わせており電波法上問題はありません。