幼稚園バストラッカー続編

例によって「Try! SORACOMキャンペーン」です!

https://www.lp.soracom.jp/202112-blog-campaign

はじめに

前回の投稿でSORACOMのGPSマルチユニットを使った幼稚園バストラッカーを紹介しました。

既製品のデバイスを手軽に使えて良かったのですが、このシステム、以下が課題だなーと思ってました。

  1. (デバイスの仕様上)位置情報の送信が1分に1回しかできない
  2. (機能が無いので)距離が正確に算出できない
  3. (機能の都合で)移動していない時も1分に1回情報を送り続ける

「もっと細かい設定ができたらなー・・」と思ってたら、ハッ!

前々回の投稿でスマホ(RedMobile)という絶好のIoTデバイス(武器)を手に入れていました。

早速調べると、やはりありました!locationノード。

お試し

最低限で以下のフローで動かせます。

subscribeノードのSensorを「GeoLocation」にしてデプロイします。

subscribeノード

injectノード実行でデバッグウィンドウに数秒おきに緯度経度が表示されます。

RedMobile最高!

ついでにダッシュボードに表示。

実装

ここからSORACOMです。

SIMグループのHarvest Data設定などは割愛させていただきます。

まず取得した緯度経度をflow変数にセットします。

そしてinjectノードで設定した周期でSORACOM(Unified Endpoint)にhttp request。

injectノード
http requestノード

「送信データ作成」functionノードは以下。

var data = {};
data["lat"] = flow.get("lat");
data["lon"] = flow.get("lon");

msg.payload = data;

return msg;

これで課題1(短周期での送信)が解決!

続いて課題2(ちゃんとした距離の算出)。

2点の距離は緯度経度、三角関数で出せるそうです。

前回は緯度経度を使い、三平方の定理もどきで距離っぽいものを出していましたが、今回はコレが使えます。

距離取得のfunctionノードを追加します。

var base_lat = (起点の緯度);
var base_lon = (起点の経度);
var now_lat = msg.payload.latitude;
var now_lon = msg.payload.longitude;

var dist = 6371 * Math.acos(Math.cos(base_lat * Math.PI / 180) * Math.cos(now_lat * Math.PI / 180) * Math.cos(now_lon * Math.PI / 180 - base_lon * Math.PI / 180) + Math.sin(base_lat * Math.PI / 180) * Math.sin(now_lat * Math.PI / 180)) * 1000;
flow.set("dist", dist);
msg.payload = dist;

return msg;

そして送信データに距離を追加するだけ。

var data = {};
data["lat"] = flow.get("lat");
data["lon"] = flow.get("lon");
data["dist"] = flow.get("dist");

msg.payload = data;

return msg;

課題3(移動時のみ位置データ送信)は同じ方法で前回の送信場所からの移動距離を判定して「移動していなければ送らない」を実装して解決(手抜きですみません・汗)。

実証

開発はSORACOM Arcでやりましたが、本番はSORACOM Air(SIM)を挿して息子のバッグに忍ばせます。

そしていつものSORACOM Lagoonで可視化。

いい感じです。

拡大するとわかるのですが、短周期なので、より細かいトラッキングができていました。

前回のオチで書いた通り、世のシステムが立派すぎてコレもお蔵入りですが、今後どこかで使えたらいいなーって思います。

補足

せっかく作ったので、通勤の時に持って歩いたところ、アレ?

実際のルート(赤線)は直線的なのに超ジグザグ・・

というのも私、河川敷を徒歩で通勤しているのですが、どうやらRedMobileのlocationは道じゃないところは苦手なようです。

やってみてわかることってあるなーと感じた2021年年末でした(雑な結び)。

みなさま、よいお年を・・

IoTで子育てHack

この記事は、「子育てエンジニアAdvent Calendar 2021」17日目の記事です。

私事ではありますが、10月に第三子(長女)が生まれ、10月中旬から1カ月強の育休をいただきました。

今回このアドベントカレンダーを知り、たぶん人生で最初で最後の育児休暇の間の育児と家事を通じ、エンジニアとして何か改善できないか取り組んだ記録を残してみたいと思います。

自己紹介と家族構成

私は社会人21年目の中年おじさんで、プログラマーとしてキャリアをスタートし、いろいろ経て今は社内情シス(主にインフラと雑用)をしているなんちゃってエンジニアです。

妻(専業主婦)と息子2人(5歳と3歳)、新入りの長女の5人で暮らしています。

幸い私も妻も実家が近い地元暮らしなので、母と義母に助けてもらいながら子育てができる恵まれた環境(感謝!)で、少しですが趣味の時間もとれる状況です。

育休中大変だったこと

育休中、家事と育児、色々大変でしたが、その一つが長男(5歳)の幼稚園バスのバス停までの送迎です。

特に行きはバスの到着時間がまちまちで、待ち時間が長いときは「なんだかなぁ」と思ってました。

幼稚園バスのイラスト

IoTで課題解決

概要

なんちゃってエンジニアの私ですが、2018年からIoT(Internet of Things)にちょろちょろ携わっていて、特にソラコムのデバイスやサービスを使うのが好きです。

今回、以下のGPSマルチユニットを使って、幼稚園バスの現在地を可視化(および通知)をしてみようと思い、挑戦しました。

https://soracom.jp/store/5235

実装

GPSマルチユニットの設定の方法は以下にあります。

https://users.soracom.io/ja-jp/guides/iot-devices/gps-multiunit

今回は送信モードを「定期送信 – 手動モード」、送信間隔を最短の「1分」にしました。

さらに高頻度に送信するため、加速度割込みも設定します。

これにより移動中は1分未満で位置情報が送れます(たぶん)。

可視化はSORACOM Lagoonというツールを使い、Soracom MAPパネルを使って地図を表示します。

https://soracom.jp/services/lagoon

実験

いきなり幼稚園に「バスにコレ載せてください」はお願いしにくいので、息子のカバンに手持ちの2台のGPSマルチユニットを忍ばせました(それもどうなの・・?って感じですが・汗)。

結果、いい感じでデータとれました。

行き(マップはぼかしてます)

残念ながらSORACOM Lagoonには距離を取得する機能がない(知らないだけかも)ので、下段の幼稚園の距離は幼稚園とバスの緯度経度の差の二乗和(×1,000,000)で出してみました(SQRTもなく苦肉の策)。

「緯度」と「経度」は幼稚園の緯度経度
($A - 幼児園の緯度) * ($A - 幼稚園の緯度) + ($B - 幼稚園の経度) * ($B - 幼稚園の経度) * 1000000

※幼稚園の緯度と経度はGoogleマップから取得しました。

この値でアラート機能を使えば出発&お迎え通知機能もできそうです。

オチ

「さて、幼稚園に提案しようかな」と思ったのですが、ふと「幼稚園バス GPS」でググってみたら、月にわずか数千円で使えて、より高機能なサービスが山のように。

ま、そりゃそうか・・

しかしこういうものがDIYでできるようになったのは「テクノロジーの民主化」、すごいなーって思います。

今回は微妙な結果でしたが、引き続き子育てや家事に役立つシステムを日曜大工的に作るのも悪くないなーと感じたなんちゃってエンジニアおじさんでした。

スマホで簡単IoT

今回の投稿は以下のイベントで発表した内容です。

https://iotlt.connpass.com/event/227874

せっかくなので、(締め切り直前ですが)いつものキャンペーンに参加してみます。

https://www.lp.soracom.jp/202110-blog-campaign

経緯

私事ではありますが、先日第三子(長女)が生まれ、育休をいただいています(現在4週目)。

育休中、資格の勉強や積読(つんどく)&積みデバイスの片付けをしたかったのですが、(先人の教えの通り)家事&育児でほとんどできていませんでした。

そこにイベント登壇の依頼があったので、せっかくなので育児にかかわるシステムを作りたいと思い立ち、赤ちゃんの見守りシステムを作ってみることにしました。

どうやって?

SORACOM UGでもお世話になっている「しょーちゃん」さんが先日、スマホでPoCするブログをアップされていました。

https://zenn.dev/showm001/articles/2021-08-12-01

今回、このAndroidスマホ+Node-RED(RedMobile)+SORACOMサービスで挑戦しました。

準備

RedMobile

RedMobileはスマホ内蔵センサーのノードを組み込んだNode-RED環境を提供するもので、有償(500円)ですが、Google Playからインストールするだけで使えます。

インストール後Wi-Fiに接続した状態でアプリを起動し、Startをタップします。

RedMobileの起動

Node-REDが起動され、「http://(ローカルIP):1880/red」と表示されます。

Node-RED起動後の画面

同一ネットワークのパソコンでブラウザを起動し、先ほどの 「http://(ローカルIP):1880/red」 にアクセスするとNode-REDの編集画面になります。

Node-RED編集画面

SORACOM Arc

SORACOM Arcというサービスを使うと、SIM不要でインターネット環境からSORACOMのサービスを利用することができます。

SORACOM ArcはスマートフォンにWireGuardというアプリをインストールして設定します。

詳細の手順は前述の「しょーちゃん」さんのブログをご参照ください。

つくったもの

以下の機能を持つ赤ちゃんの見守りシステムにしました。

  • スマホ内蔵の明るさセンサーで夜間の照明点灯時間を計測
    →授乳回数やおむつ交換の参考とする
  • スマホカメラで赤ちゃんの睡眠の様子を観察する

携帯画面

Node-REDのダッシュボード機能でこんな画面を作りました。

携帯画面

SORACOMダッシュボード

SORACOMサービスとしては、明るさセンサーのデータはSORACOM Harvest Data、カメラで撮影した画像はSORACOM Harvest Filesに保存し、SORACOM Lagoonで可視化しました。

Lagoon画面

実装

Node-RED

以下のようなフローとなりました。

Node-REDフロー

詳細は別の機会に紹介できればと思います。

SORACOM

光センサーデータの送信は「しょーちゃん」さんのブログ、画像の送信&可視化は以下を参考に実装しました。

https://users.soracom.io/ja-jp/docs/harvest/send-files

https://users.soracom.io/ja-jp/docs/harvest/lagoon

画像送信はいろいろ問題があったので、後日まとめてQiitaにでも上げておきます。

テストの結果

結論から言うと失敗でした。

理由はスマホの明るさセンサーが作業時の常夜灯に反応せず、0だったが原因です。

写真も当たり前ですが、電気を消すと真っ暗…

テスト運用結果画面

まとめ

今回の開発システムは失敗でしたが、特別なデバイスを使わず、スマホだけでセンサーデータ、カメラ画像をSORACOMにアップロードできるのはいろいろと可能性が広がります。

また、「スマホだけでできる」というのはビギナーにとって「試してみる」のハードルを下げられるのではないかと思っています。

謝辞

くどいですが今回のシステムは「しょーちゃん」さんのブログのおかげで作ることができました。

また「しょーちゃん」さんには「もくもく会」でも直接アドバイスをいただき、感謝です。

https://soracomug-tokyo.connpass.com/event/229776

またイベント登壇のお声がけをいただきました武村さん、ブログ書くモチベーションをくださるソラコムさんいつもありがとうございます。

SORACOMを使ったIoT草刈りゲーム「草刈ルゥーーン」

先日、つくばミニメイカーフェアというイベントでチーム「まさお」としてIoT草刈りゲーム「草刈ルゥーーン」というものを展示してきました。

展示に関する紹介はこちらです。

ホーム

技術的にはすごくシンプルで、草刈り機にGPSを取り付け、刈った範囲を可視化するものです。

このシステム(?)の通信から可視化についてはIoTプラットフォーム「SORACOM」のサービスで構築しています。

簡単に説明すると、草刈り機が動いている間、一定の間隔でSORACOMに位置情報を送り、Harvestにデータを溜めて、Lagoonで可視化するプロトタイプです。

試作機

1号機

電子工作未経験だったこともあり、Groveというはんだ付け不要のキットをSORACOMのサイトで購入しました。
https://soracom.jp/products/kit/grovestarter_kit_lte/

このキットにはGPSとSORACOMのSIMカード(SORACOM IoT SIM)も含まれています。

 

草刈り機が動いているかの判定はエンジン部に取り付けた振動センサで行います。

 

ついでに稼働時間をカウントするディスプレイも取り付けました。

 

実際の機器はこうなっています。

この機器を使い、広島県呉市のレモン農家、末岡新果園さんご協力のもと、実際のレモン農場で実証試験を行いました。

前日にすったもんだありましたが、初の実証試験、無事に動きました。

SORACOM Lagoonでも無事表示できました。

また、この実証試験の様子は「地方版IoT推進ラボ」というサイトでも紹介いただきました。
https://local-iot-lab.ipa.go.jp/article/hiroshima-pref-iot-2002091438.html?fbclid=IwAR3v8xGMnQJeZ3oxbYWl_H9YXcsXLzq4sLvNQ6k0akqUzYwpr8ZkIDgquO0

2号機

実証試験のあと、つくばミニメイカーフェアまで少し時間があったので、別の用途で購入していたM5Stackで2号機を作ることにしました。

振動センサは1号機と同じものを使い、GPS3G通信は別途モジュールを購入しました。

そしてここでもソラコムさんにも大変お世話になりました。

というのも、GPSモジュールと3G拡張ボードはそのままでは同時に使えないとのこと・・

対応方法をソラコムのMAXこと松下さんがQiitaにて紹介してくれていました。
https://qiita.com/ma2shita/items/e6f84f1d2e8c94e12e31

ソースコードまで提供いただき、実際には半日程度で開発できました。

展示

2月のつくばミニメイカーフェアはリーダーが突貫で制作したバーチャル草刈りもあり、非常に盛り上がりました。

実際の草刈り機は展示できないので、1号機、2号機をおもちゃに取り付けました。

デモデータを取ってみました。

まとめ

この「草刈ルゥーーン」のアイデアはハッカソンから生まれましたが、実装は「IoTの民主化」を掲げるソラコムさんをはじめ、Qiitaなどの先人たちの知恵を借りて容易に実現できました。

まだまだ課題は多いですが、引き続き改良し、社会実装を目指してユルユルと頑張ります。