じーろぐ

日々の記録。コンピュータやプログラミングの話題が多め。

TWELITE PALを使って窓の施錠確認システムを電子工作なしで作る

窓の鍵閉め忘れをなくしたい

夏になり暑くなってくると窓を開ける機会が多くなるのですが、「窓閉めたっけ?」とか「閉めたつもりなのに空いてた…」ということが多々発生してきます。 この閉め忘れをなんとかしたいと思っていたら、こんなページを発見しました。

qiita.com

この記事では窓の開閉状況の送受信にZigbee互換の無線通信モジュールTWE-Liteを使っているようです。TWE-Liteの特徴は、

  • 超低消費電力
    • 親機と間欠的にセンサーデータを送信するだけならコイン形リチウム電池で数年間動作させられる
  • バイスに書き込むアプリがいくつか用意されていてプログラミングがほとんど不要
    • 出来合いのアプリケーションが用途に合わせていくつか用意されているので、インストールして配線すればすぐ使える(SDKも公開されているので自分でも作れるみたい)
  • 長距離通信できる
    • TWELITE-Blueで1km、REDで3kmの通信距離。実際の通信距離はモノとの干渉でもっと短くなるが、家の中で使う場合は通信距離を実質気にせず使用できる
  • 産業仕様で信頼性が高い
    • 熱や振動試験が実施されていて、-30~90℃とか(製品によってはもっと)過酷な環境でも使用できる。暗号通信も可能。もちろん技適取得済み。

低速かつ間欠的な通信で良く、電池で長期間、センサーデータを遠隔地に送信したいときに便利なデバイスで、今回の用途に向いています。

上記の記事では、汎用のTWELITE DIPに電池アダプターとドアセンサー(ホール素子)を自分で組み合わせてデバイスを作っていますが、 最近TWELITE PALという無線タグシステムが発売されていて、このTWELITE PALと開閉センサーパルを購入し組み合わせるだけで、全く同じことが簡単に実現できそうです。

そこで、実際に購入して開閉センサーを作ってみました。

購入したもの

購入したTWE-Lite関連の物品。

  • Mono stick
  • Blue pal
  • Open-close sense pal

f:id:z_logger:20190811012805j:plain

f:id:z_logger:20190811012926j:plain
上がTWELITE BLUE PAL、下が開閉センサーPAL。基板背面角にホールセンサがついていて磁場を検知できる。

その他に以下も購入しました。

f:id:z_logger:20190811013031j:plain

システム構成

以下がシステム構成の概略図です。

f:id:z_logger:20190818003443p:plain

子機は窓に設置して、開閉状態を監視し、Raspberry Piに接続された親機(MonoStick)に送信します。1分おきの定期送信と窓が開閉したとき(素子近くの磁場が変化したとき)データを親機に送信します。 送信されたデータは、Raspberry Piで動いているPythonスクリプトで受け取ってログファイルに記録するほか、開閉状態が変化したときは、携帯電話にPushbulletを使ってプッシュ通知します。

アプリケーションを書き込む

まずは、親機にパルアプリ(App_pal)をインストールします(子機は購入時点でインストール済み)。親機のMono Stickにダウンロードしたアプリを、TWELITEプログラマを使って書き込みます。

f:id:z_logger:20190818004311p:plain

このTWELITEプログラマ、単一の実行ファイルなのですが、デスクトップに置いて実行しようとしても動作しないようです。Cドライブのルートディレクトリとかに置くと動作します。

窓に子機を設置する

以下のように設置して、ロックレバーの位置を監視します。磁石はレバーの内部に設置しました。 ロックの解除とロックしたときに開閉センサーパル付近の磁場が変化するので、その状態を監視しています。

f:id:z_logger:20190818161059j:plain

親機をRaspberry Piに設置する

続いて、パルアプリをインストールしたMonoStickをRaspberry Piします。 Raspberry Piからはシリアルデバイスとして認識されるので、データを取得してロギングと通知を行います。

ログをグラフ化するとこんな感じになります。

f:id:z_logger:20190818161117p:plain
LQIが電波状況、lock stateが窓の開閉状態。バッテリーの電圧も自動送信される。

スマートフォンへの通知はPushBullet経由で行うようにしました。

f:id:z_logger:20190818004501p:plain

スマートフォンにプッシュ通知したり、PushBullet上に開け閉めの履歴が残って便利です。

f:id:z_logger:20190818004449p:plain

なお、データの収集とプッシュ通知は以下のPythonスクリプトで行っています。

github.com

まとめ

ドアの開閉監視だけなら、TWELITEを使うとほとんど工作無しで作ることができます。Wifiではないので、親機と子機を用意する必要がありますが、長距離でも安定して通信できるようですし、少量のデータを定期的に送信したい用途で、子機は電池で長時間駆動させたい場合などはとても便利だと思いました。