WioLTEでポストの投函通知システムを物理的に作る

2018年11月24日

どうもくろにゃんこたんです。
今回はSORACOMアドベントカレンダー2017に面白い記事が載っていたので、触発されて自分なりになんとか出来ないものかと考えてみました。

「タワマンとWio LTE」
https://qiita.com/zakky/items/fb0eab0c909d7f7501bf

結論から言ったところなんとか成功しています。
下記詳細です。

前書き

自宅の郵便ポストとは

タワーマンション・もしくは自宅の郵便受け
どちらかと言うと郵便受けを見に行くのが大変なタワーマンションの方が需要がありそうです。

考える前提条件

  • タワーマンションでも利用可
  • SORACOMを使うシバリ(LoRaWanやSigfoxはまたの機会)
  • ハガキ一枚でも検出したい
  • バッテリー交換は面倒なので毎日交換というのは現実的ではない
  • 1回でも投函されたら、見に行くでしょ(´ω`)という継続性の切り捨て
  • 安くあげる。

自分としては特に、ハガキ1枚入ったとしても検出可能にしたいです。
特に宅配ボックスがあるマンションですと、「ボックスに入れてあります。」という伝票が郵便受けに入ることがあるので、
それも含めて検出したいです。

本当は何回も通知を受けたいと思っていたところなのですが、

「何かいい考えは無いかね?と妻に聞いたところ、最初の一度の通知で十分だと思う。どうせ見に行くでしょ?」

とご意見を頂いたので、なるほどと思い

今回の目的は「空振り」を防ぐことと設定しました。

ということで1回検出が出来たら、荷物を取りに行く&センサー再設定。という前提で考えようと思います。

問題点

センサー+WioLTEを使って検出をし続けるとどうしても、電源の問題に差し掛かります。
どんなに長くても1日そこらで電源が尽きてしまうと、正直使い物になりません。。。
大容量バッテリーなんて入れてたら、それこそ荷物が入らないなんて本末転倒なことにもなりかねないですし、
共用部分なので電源を貰うことも、だいたい日が当たらない閉鎖空間なので太陽光も当てに出来ません。

くろにゃんこたん的ブレイクスルー

じゃあ物理的に電源を入れてしまえばいいじゃん\(^o^)/

ブレイクスルー(・ω・)ノ pic.twitter.com/rnJMgMuh3W — くろにゃんこたん (@kuronyankotan) 2017年12月31日

マグネットでmicroUSB端子をくっつける便利グッズがあるのですが、これは使える・・・気がする!

要は・・・

こうなれば良い。と

やってみました!
こんな風に

斜めにくっつけておいて、絶縁体を引き抜けば自動的に電源がバッテリーと接続されてONになります。

カチッとな(´ω`) pic.twitter.com/5db3sBr5vx — くろにゃんこたん (@kuronyankotan) 2018年1月3日

やってみた動画がこちらです。
なんと上手くいきました!
色々ものすごくシンプルになりそうですね!

設置してみた

デモテスト。
きっちりバミると何だか分からなくなるのでバラしました。

どちらかと言うとTwitter映えを狙って割り箸でトリガーを作りました。
(安く上げるためです!)
絶縁体というか、厚紙とかで良いのですが、SORACOMのSIMカードケースが手元にあったので、わかりやすくこちらを養生して使いました。

ちょっとよく見えないのですが、割り箸の先が投函口と接触しています。
これで何らかの衝撃(押し込みなど)が発生したら割り箸が落ちて、絶縁体がずれてマグネットケーブルが結線します。

分かりづらいので図解。
樹脂製の筐体の中には、奥に郵便物を入れるところがあるのですが、うちのマンションではバラバラの暖簾の様な形になっているので、
青い線の通りにバミりました。
そうすると端っこでも割り箸トリガーに届きます。

ちょっと反対側からぱしゃり。
わざと割り箸が見えるようにしています。

投函するときにきっと接触しますよね。

このやり方、本当はピアノ線を使って~~~とかいろいろな形を考えてみたのですが、なんだかこんがらがってコナン風になってしまうので、
シンプルに、棒でやるようにしました。
もう少しこの辺りは工夫しても面白いかもしれません。

あれですよね、デスノートの3巻あたりで出てきたらしい、ドアを開けられたかチェックする方法みたいな感じです。

投函してみると、絶縁体が外れバッテリーと結線して通信が始まります。
僕のところは樹脂製の箱物だったので、中にアンテナを入れたままでも通信が行うことが出来ました。
場合によってはアンテナだけでも、箱の外に出す必要があるかもしれませんね。(´ω`)
本当は投函される様子を動画で撮りたかったのですが、独りだったのでやめました。

ちょっと勢いつけ過ぎて割り箸が結構飛んでますが、郵便屋さんの投函のスピード感ならこんな感じになると思ってます!
あ、この写真シャッタースピード5秒で撮影したのですが、割りときれいじゃないですか?(笑)

郵便受けをじっと撮影しているなんて、他のマンションの人には怪しまれそうですが・・・

SORACOM Beam で飛ばしてみた

こちらは単純にSORACOM Beamで飛ばして応答OKであれば、もう通信もしない。という感じです。
SeeedさんのWio LTEを省電力に使おうを参考にさせていただきました。
そのうちWioLTE自体をシャットダウン出来るライブラリも準備中とのことで、大分バッテリーは節約できそうです。

#include
#include

#define INTERVAL (6000)

WioLTE Wio;
bool send_flag = false;

void setup() {
delay(200);

SerialUSB.println("");
SerialUSB.println("--- START ---------------------------------------------------");

SerialUSB.println("### I/O Initialize.");
Wio.Init();

SerialUSB.println("### Power supply ON.");
Wio.PowerSupplyLTE(true);
delay(5000);

SerialUSB.println("### Turn on or reset.");
if (!Wio.TurnOnOrReset()) {
SerialUSB.println("### ERROR! ###");
return;
}

SerialUSB.println("### Connecting to \"soracom.io\".");
delay(5000);
if (!Wio.Activate("soracom.io", "sora", "sora")) {
SerialUSB.println("### ERROR! ###");
return;
}
}

void loop() {
char data[100];

if (send_flag == false) {

SerialUSB.println("### Open.");
int connectId = Wio.SocketOpen("beam.soracom.io", 23080, WIOLTE_TCP);
if (connectId < 0) {
SerialUSB.println("### ERROR! ###");
goto err;
}

SerialUSB.println("### Send.");
sprintf(data, "{\"uptime\":%lu}", millis() / 1000);
SerialUSB.print("Send:");
SerialUSB.print(data);
SerialUSB.println("");
if (!Wio.SocketSend(connectId, data)) {
SerialUSB.println("### ERROR! ###");
goto err;
}

SerialUSB.println("### Receive.");
int length;
do {
length = Wio.SocketReceive(connectId, data, sizeof (data));
if (length < 0) {
SerialUSB.println("### ERROR! ###");
goto err;
}
} while (length == 0);
SerialUSB.print("Receive:");
SerialUSB.print(data);
SerialUSB.println("");

SerialUSB.println("### Close.");

send_flag = true;
SerialUSB.println("### Power supply OFF.");
Wio.PowerSupplyLTE(false);

if (!Wio.SocketClose(connectId)) {
SerialUSB.println("### ERROR! ###");
goto err;
}
}

err:
delay(INTERVAL);
}

それにしてもいつも引っかかるのですが、
Wio.Activate(“soracom.io", “sora", “sora")
ここで毎回タイムアウトしてから、通信ができちゃうんですよね。
誰も何も言ってないので自分だけなのかな・・・(汗)

その後の動き

今回は自分のレンタルサーバ上に飛ばして、予めシークレットキーなど揃えてあるTwitterAPIからPHPで叩きます。
この辺は僕の拙いコードを晒すよりも、色んな所で紹介されているので割愛します。

--------------------------------------------
ポストに投函があったかも
[[時間]]
#WioLTE #SORACOM
--------------------------------------------

と投稿するように叩きました。

動作状況のつぶやきは下記

当初何も言ってないのに、いいねが付いていてビビりました(´ω`;)

そして先程もう一度。

どちらかというとセンシティブな内容なので、LINEかメール通知が良いと思います。
わざわざハッシュタグつけるのもおこがましいですしね(´ω`;)

が、ブログに埋め込みたかったのでわざわざAPIを叩きに行きました。(笑)

改善点

一度通知があったらそれでおしまい。絶縁し直す。というところがとても面倒です。。

これでも大分省電力にはなったのですが、WioLTEの方で完全にシャットダウンが出来る。
もしくは通信が成功したら電源のマグネットを自分で外す。なんてことが出来たら1ヶ月位は電池交換無しでも十分運用出来るのかなーと。

マグネットの片側が、コイルならもう少し考えられますが、それにはさらにサードパーティを追加しないといけないので・・・ブツブツ(´ω`)
サーボモータで物理的にマグネットをはずすにも、それこそピタゴラスイッチの世界なので。。。
ポストの開閉のときだけ電気が走るようにも出来なくは無いですが、それだと通信する前に途切れてしまう。(コンデンサがあればまぁ秒数は稼げるけども・・・でも通信が出来たのか判定は出来ないので、信用は担保出来ないですね)

今のところマグネットの端子に紙を挟んで絶縁しているのが一番手っ取り早い。という結論になりました。

まとめ

  • タワーマンションでも利用可
    →SORACOM回線を使っているので、どこでもOK
  • SORACOMを使うシバリ(LoRaWanやSigfoxはまたの機会)
    →達成。
  • ハガキ一枚でも検出したい
    →達成
  • バッテリー交換は面倒なので毎日交換というのは現実的ではない
    →待機自体には交換の必要無し。OK
  • 1回でも投函されたら、見に行くでしょ(´ω`)という継続性の切り捨て
    →OK
  • 安くあげる。
    →WioLTEとモバイルバッテリー(小型でOK)と追加投資「マグネットケーブル 約1,000円」
    安い\(^o^)/

とまぁ前提条件はクリアでしょうか。。

今回は余計なセンサーを必要としないで、物理的にWioLTEを電源ONにしてしまう方法をとりましたが、
数ヶ月スパンで寝かせておくことが出来るので、応用はかなり出来るんじゃないかなと思っています。WioLTEは小さいし。
マグネットのケーブルなんて今時ドンキで売っているので、WioLTEを持っている人はすぐ実践出来るところが良いかなと。
コード自体はほぼサンプルコードだけで実装出来るので、ハンズオンに参加した人なら必ず出来るというところがミソですかね。

また、必要なときだけ電源ON発想はありましたが、WioLTEというかArduinoの特性によって、すごく開花したと思います。
ラズパイだと、OS立ち上げて、自動起動スクリプト立ち上げて、、、とか結構面倒ですからね。
そして、大きくて郵便受けには「邪魔」という(´ω`;)

考え方と実装をシンプルにしていくとそれだけ、応用範囲が広がります。

もうね、2017年からの時代は複雑なフレームワークとか機材とか流行らないと思う(´ω`;)
もっとシンプルにいきましょう(´ω`)

長くなりましたが、読んでいただいてありがとうございます(・ω・)ノ