調子にのってセンサーを社内にばら撒いてたら電池交換作業が苦痛になってきた話 (TWE-Liteシリーズでソーラー駆動)

記事タイトルとURLをコピーする

みなさんこんにちは!4月になり、新しい年度が始まりました。 と同時に、私がIoT担当になってから1.5ヶ月が経過しました。そろそろ何か成果を出さないとまずい、と焦りを感じてきております。

IoT担当の仕事の一つとして、先輩が作成した格好良い室温計の管理、メンテナンスがあります。SensorTagとEdisonを使った室温計のシステムです。

SensorTagは色々なセンサーが付いていてとても高機能なのですが、電池が比較的早く切れてしまうことが欠点です。現在は2分に1回の間隔で値を取得していて、この状態でも2週間程度で電池が切れてしまいます。

今のところ社内にあるSensorTagの数は6個なので電池交換作業はぎりぎり許容範囲内ですが、刺し身タンポポ作業なのもあり正直なところ結構苦痛です。センサーの電池を交換しているだけで「センサーおじさん」という呼称までついてしまいました。

6個ですらこの状況なので、今後センサーを増やしていくことを考慮して改善策を考えるわけです。さてどうしたものか。SensorTagのファームウェアをいじってこれを改善(電池切れまでの時間を伸ばす)できる可能性はあるのですが、前任者曰く心が折れたとのことですので、ここは別の手段で改善をしてみようと思います。

…というわけで、長い前置きでした。 上記の別の手段というのは「デバイスの変更」です。今回はソーラーパネルで動作する無線モジュール(+センサー)の検証を行いましたのでレポートしてみたいと思います。

無線モジュール

modules

これが今回使うモノたちです。 左下のマッチ棒のようなものがついているモジュールがモノワイヤレス社様のTWE-Lite DIPという製品で、この製品自体は無線モジュールです。この無線モジュールにセンサーや電源(今回はソーラーパネル)を接続していきます。残りは後ほど紹介していきます。 TWE-Liteシリーズでは、実はTWE-Lite 2525aという製品を以前ブログで紹介したりもしています。この製品は無線モジュールと加速度センサーが一体になったものです。アンテナを取り付けて電池を入れればすぐに使い始められるのでこちらもオススメです。

さて、このTWE-LiteシリーズにはTWE-Zeroアプリという専用のアプリケーション(ファームウェア)が何種類か用意されていて、省電力で稼働させたい場合は、無線タグアプリを使います。

無線タグアプリは低消費電力を追求したアプリケーションで、コイン電池での長期稼働や、ソーラーパネルでの稼働を想定しています。そのため、子機はデータを送るだけ、親機はデータを受け取るだけです。ACKやリトライ処理等はないため、親機と子機の間で通信が安定しない場合は、後述する中継器を用意する必要があります。 (ちなみに親機と中継器は常時稼働となり電力を多く消費するため、TWE-LiteのUSB版 MoNoStickがおすすめです。USBから給電できます。)

構成

architecture

親機、子機、中継器というキーワードが出てきたので、今回の構成をざっくり説明します。センサーからデータを取得して送るのが子機、子機からデータを集めるのが親機、子機から親機へのデータの受け渡しを行うのが中継器です。 今回の構成では、子機、中継器、親機としています。親機と中継器はMoNoStickで、親機のMoNoStickはEdisonに接続しています。Edisonで親機のデータを受け取ってからは、AWS IoTに送って、クラウドでいい感じにゴニョゴニョします。ちなみに、データを実際にクラウドに送る役割のデバイス(ここではEdison)は、IoT業界ではゲートウェイと呼ばれることが多いです。

パーツの調達

ここまでのおさらいとして、TWE-Lite DIPが子機、MoNoStickが中継器と親機、そしてゲートウェイはEdisonです。 あとは必要なのは、センサーと電源です。

無線モジュール

無線モジュールは以下の3つを用意しました。

ちなみに、TWE-Lite RはTWE-Lite DIPをPCに接続するためのモジュールです。TWE-Lite DIPの設定を行う際に必要になります。

センサー

センサーはBME280を使用します。今回はBOSCH社のBME280センサーモジュールキットを利用しました。

ソーラー

TWE-Lite DIPでソーラー電力を使用する場合は、TWE-EH SOLARという電源管理モジュールが便利です。これを組み込むと、ソーラーパネルから受け取った電力から、必要な分だけTWE-Liteに流し、余った分は蓄電デバイスに貯めておくことができるようになります。 ソーラーパネルとTWE-EH-SOLARがセットになったものが売っているこれがおすすめです。 あと、蓄電デバイス(コンデンサ)も忘れずに。これです。

その他、必要なもの

その他、ジャンパーワイヤー、ブレッドボード、半田ごても用意しておきましょう。

工作のお時間

というわけで、材料が揃いましたので、早速作っていきましょう!

BME280の工作

まずは、センサーを使える状態にします。やることは2つです。

ピンを基盤にハンダ付け 買ってきた状態だと基盤とピンがバラバラだと思いますので、半田ごてを使ってピンを基盤に接続します。

J3をジャンパ接続 BOSCH社のBME280モジュールは、I2Cで接続する場合はJ3をジャンパ接続する必要があります。丸い部分がつながれば良いので、半田ごてでチョンっとつなぎます。 こんな感じです。 bme280

アプリケーションの書き換え・設定

センサーの準備ができたら、次は無線モジュールの準備をします。ここで行うことは2つです。

無線モジュールに無線タグアプリを書き込む アプリケーションの書き込み方は、Windowsであれば書き込みアプリ、Linux系であれば、jenprogを使用します。 MoNoStickとTWE-Lite DIPにそれぞれbinaryファイルを書き込みます。親機(MoNoStick)は Samp_Monitor_Parent_JN5164_MoNoStick_1_5_5.bin 、中継器は Samp_Monitor_Router_JN5164_1_5_5.bin 、子機(TWE-Lite DIP)は Samp_Monitor_EndDevice_Input_JN5164_1_5_5.bin です。それぞれこちらからダウンロードできます。

※実は Samp_Monitor_EndDevice_Input_JN5164_1_5_5.bin の作りはBME280をソーラー電力で動かすことを想定していないため実はこのままでは正確な値は取れません。具体的には、BME280はTWE-Liteがスリープ中でも稼働していて、ずっとADし続ける仕様となっているそうです。そのため、この記事で利用しているソーラーパネルでは電源不足になる可能性があるとのことです。この件については、モノワイヤレス社サポートの方とごにょごにょした結果無事値を取れるようになりました!ありがとうございます!正式に対応したバージョンのリリースをぜひお願いします…!

無線タグアプリの設定を変更する

親機と子機にアプリケーションを書き込み終わったら、続いてアプリケーションの設定を行っていきましょう。 設定はインタラクティブモードに入って行います。 MoNoStickはシリアルで接続して「+」キーをぽんぽんぽんとリズミカルに3回叩くとインタラクティブモードに入れます。(公式によると、+と+の間隔は0.2秒から1秒が良いそうです。) TWE-Lite DIPは26番PINとGNDをワニクリップ等で繋いだ状態でPCに接続(給電) -> シリアル接続して「Enter」キー1回でインタラクティブモードに入れます。

設定内容はざっくり以下の様な感じです(一部値を伏せています)。細かい説明は省きますが、ポイントはいくつかあります。

  • 親機のoの1桁目を1にする -> 親機のモードを通常モードに指定
  • 子機のdを12000 -> 120秒間隔で起動
  • 子機のmを0x39 -> センサーがBME280であること
  • 子機のoの3桁目を4にする -> OTAを無効化

親機

a: set Application ID (xxx) i: set Device ID (--) c: set Channels (15) x: set Tx Power (3) b: set UART baud (115200) B: set UART option (8N1) k: set Enc Key (xxx) o: set Option Bits (0x00000001)

子機

a: set Application ID (xxx) i: set Device ID (xxx) c: set Channels (xxx) x: set Tx Power (13) d: set Sleep Dur (12000) w: set Sensor Wait Dur (30) m: set Sensor Mode (0x39) p: set Sensor Parameter () P: set Sensor Parameter2 () k: set Enc Key (xxx) o: set Option Bits (0x00000400)

設定を変更したら、Shift + Sを忘れずに。

配線

アプリケーションの設定を終えたら、配線をしていきましょう! ブレッドボードにぶすぶすっと色んな物を挿していきます。

完成したものがこちらです。どん! figure-side figure-top

いざ、通電!

正しく通電できていれば、子機からはすでに電波が送信されています。 早速親機(MoNoStick)にシリアル接続して、ちゃんと値を取得できているかどうかを見てみましょう。

ここまで正しく設定できていれば、以下の様な値が取れているはずです。tmがtemperature(気温)、huがhumidity(湿度)、atがatmosphere(気圧)ですね。(気温と湿度は1/100してあげると正しい値になります。)

::ts=326425
::ts=326426
::ts=326427
::rc=80000000:lq=138:ct=020F:ed=81011E04:id=0:ba=2770:a1=0388:a2=0311:tm=2831:hu=6695:at=1004
::ts=326428
::ts=326429
::ts=326430
::ts=326431

可視化

ここまでとても長かったですが、それも後もう少しです。 とれた値をクラウドに送って可視化をしてみましょう!

Elasticsearchで可視化は既にブログにありますので、今回はAWS IoT -> Kinesis Firehose -> (S3) -> Redshiftとデータを流して、Power BIで可視化を行ってみました。 構成は以下のような感じです。

architecture2

とりあえずここでは結果だけをお見せします。ここの可視化の話については、また別の記事でじっくり書こうと思います!

ambient

ちゃんとデータが取得できていますね!このデータだけではただの温度湿度気圧ですが、将来的には色んなデータを集めて、気温、湿度、気圧がどのような影響を及ぼすのかを調べてみたいです。ちなみに前半の直線になっている部分は、後述しますがソーラーパネルで充電できない時間帯です。

まとめ & 余談

…というわけで、温度センサーのリプレイスの話でした。 材料を揃えて、設定して、作って…と実現までの作業は盛りだくさんですが、やりきった暁には電池交換作業から開放されますので、皆様もぜひチャレンジしてみてください!

ここからはちょっとした余談です。

消灯してからどれくらい持つか

今回の回路にはTWE-EH SOLARとコンデンサーを組み込んでいるので、余った電力はTWE-EH SOLARがいい感じにコンデンサに貯めてくれます。そして、溜まった電力を夜間、ソーラーパネルで発電できない時間帯にちょっとずつ切り崩していきます。

気になるのが日中貯めた電力で夜を越せるか、というところ。 結果としては、2分間隔の起動、1日の点灯時間が15時間で消灯後1~2時間は持ちこたえることができました。 現状はこれを許容して運用していますが、夜をどうしても越したい場合は、ソーラーパネルとコンデンサの拡大、及び起動頻度を下げることでしょうか。

EdisonでUSB Serialのデバイスが読み込めない件

EdisonでUSB Serialを読み込むのに大分苦労しました。色々試すも結局解決せず、現在は第三者によるカスタムイメージ利用することによってEdisonでMoNoStickを利用しています…。 https://communities.intel.com/thread/62198?tstart=0

MoNoStickのようなUSB Serialのデバイスを扱うときは、EdisonよりRaspberry Piのほうが楽かもしれないですね…。