Table of Contents
Fusicの田んぼと、まもる君
Fusicでは、田んぼ(棚田)を借りて米作りをはじめました。 詳細はFusicってなんしようと?の記事や、オープン社内報の記事を見ていただければと思うのですが、とにかく田んぼがあるのです。
田んぼがあれば、IoTチームがやることは、モニタリングです。 田植えの前にIoTチームでガッとデバイスを作って、田植えの日にサクッと田んぼに刺してきました。
今は「田んぼまもる君」という安直な名前をもらい、日々Slackに様子を伝えてくれています。
この記事では、田んぼまもる君の技術的な概要についてお伝えできればと思います!
田んぼまもる君でやりたかったこと
田んぼを見守る以前に、IoTチームとしてデバイスまわりの知見を貯めたいというのがありました。 なので、そんなに合理的には作っていません。
-
デバイスを作って運用に乗せる経験をしたい
-
なんならうまく動かないとか、壊れる経験もしたい
- なのであんまりこだわって作りすぎない
- でも結果的にちゃんと動いてしまって(?)いて、喜んでいいのかなんなのか。。
田んぼまもる君のざっくり仕様
-
太陽電池+蓄電池のみで電源を賄う
-
いろいろ機能拡張しやすいようにラズパイを使う
- とりあえず取得するのは、温度、湿度、水温、傾き(加速度)、カメラ画像
-
1時間に1回の間欠動作を行う
- 常時稼働させるととても電池が保たないので
-
通信にはSORACOMを利用する
-
SORACOM Funnel -> AWS IoT Coreでデータを受け取る
-
受け取ったデータをSlackに通知する(8:00-18:00, 3時間おき)
材料
※単価や購入先は制作時点での情報ですので、参考情報として捉えてください。
※送料別
デバイス関連
品名 | 数量 | 単価 | 合計 | 購入先 |
---|---|---|---|---|
高性能シールドバッテリー 12V20Ah | 1 | 5,980 | 5,980 | Amazon |
20W ソーラー発電蓄電ケーブルセット | 1 | 8,630 | 8,630 | Amazon |
20Wソーラーパネル用 架台 | 1 | 5,380 | 5,380 | Amazon |
Raspberry Pi 3 B | 1 | 5,428 | 5,428 | RS-Online(取扱中止) |
Raspberry Pi カメラモジュール | 1 | 3,731 | 3,731 | RS-Online |
slee-Pi | 1 | 16,280 | 16,280 | RS-Online |
microSD 32GB | 1 | 880 | 880 | Amazon |
3G対応データ通信端末 AK-020 | 1 | 5,478 | 5,478 | SORACOM |
SORACOM Air SIMカード plan-D (サイズ:標準) | 1 | 902 | 902 | SORACOM |
- 半田や配線等は入れていません。
- ラズパイは最近品薄ですね。。製造・販売からRS Componentsが撤退するというニュースもありました。
- 3G通信について、実際には会社にあった3GPi(生産終了)を利用しましたが、表にあるAK-020でも動くはずです。
什器関連
品名 | 数量 | 単価 | 合計 | 購入先 |
---|---|---|---|---|
ウォルボックス(プラスチック製防雨ボックス) | 1 | 6,390 | 6,390 | モノタロウ |
ステンレスバンド | 2 | 179 | 358 | モノタロウ |
タルキ止めクランプ | 1 | 379 | 379 | モノタロウ |
コルゲートチューブ | 1 | 479 | 479 | モノタロウ |
ラバーブッシング | 2 | 339 | 678 | モノタロウ |
両面テープ | 1 | 589 | 589 | モノタロウ |
単管パイプ | 2 | 1,300 | 2,600 | ナフコ |
クランプ | 2 | 500 | 1,000 | ナフコ |
- 接着剤やネジ、結束バンド等は入れていません。
- ナフコは九州、西日本を中心に展開するホームセンターですw
実装
電源、筐体(毛利)
太陽電池+蓄電池の組み合わせはよくあるパターンだと思います。 太陽電池が発電していないときは蓄電池から電力を供給し、太陽電池が発電しているときは太陽電池から電力を供給、余った分は蓄電池の充電に充てます。
その制御をしてくれるのが、コントローラーと呼ばれるものです。単品ではALLPOWERSのコントローラーがデファクトスタンダードのようですが(見た目を似せた類似品がたくさんある…)、今回は太陽電池に付属しているコントローラーで十分だったのでそれを利用しました。
筐体は、ウォルボックス。これも屋外に電気的な何かを配置するときのボックスとしてスタンダードなものだと思います。今回は箱の中からカメラで風景を撮影できるように蓋が透明なタイプを選びました。 中には厚さ10mm程度の木の板が付属しています。ここにネジでデバイスを留めたり、接着剤+結束バンドで蓄電池を留めたりしました。
ちなみに、接着剤はコニシのエポキシボンドを使いました。毛利は学生時代鳥人間をやっていて、鳥人間をやっている人は大抵エポキシボンドに全幅の信頼を寄せています。ただ、表面がツルツルだと剥がれやすくなってしまうので、木の板にドリルで浅い穴をほったり、蓄電池の接着面に引っかき傷を付けたりしました。
センサー -> ラズパイ(杉本、岡崎)
ここは「センサー→ラズパイ→SORACOM→AWS」というピタゴラスイッチの最初の区間にあたります。今回接続するのは以下4つのセンサーです。
種類 | 用途 | 通信方式 | 参考ページ |
---|---|---|---|
温湿度センサー | 田んぼの周囲の温湿度を測定する | GPIO | 記事 |
ToFセンサー | 水面までの距離(=水位)を測定する | UART | 記事 |
熱電対 | 水温を測定する | SPI | 記事 |
加速度 | まもる君の転倒を検知する | I2C | 記事 |
それなりに利用されているセンサーを選んだことで、参考文献やデータシートがすぐに見つかったので良かったです。
それにしても4つのセンサーの通信方式が綺麗にバラバラ、というところに選定者のセンスを感じました。通信方式を踏まえてこのようにRaspberri Piと接続することにしました。
センサーとケーブルを岡嵜が、ケーブルとRaspberriPiのピンを杉本がはんだ付けしました。Raspberry Piのピンは密集していて直接はんだ付けするのは難易度が高いので、こういった基板を使用しました。 手作り感満載ですが、はんだ付けし終えた状態がこちらです。 ブレッドボードの延長みたいな感じになっていますが、試行錯誤しやすいように一旦はこの形で。
カメラ -> ラズパイ(松山、岡部)
ラズパイにはセンサーだけでなく、カメラも取り付けました。 実際に撮れた写真はこちら。
他のセンサーから撮れたデータと一緒に送るため、写真のバイナリーデータを base64 に変換して、送りました。
ただ、データの送信先に使っている AWS IoT Core が最大 128 KB しか受け取れなかったため、320 × 240 という小さいサイズで送りました。 この AWS IoT Core のサイズ制限に初めは気づかず、「エラー出てないのに、データ送られてない!」と結構ハマりました。
後に、写真を S3 に直接送るようにして、1280 x 720 になりました。 SORACOM FunkでS3の署名付きURLを発行するAWS Lambdaを実行し、取得した署名付きURLに撮った写真をPOSTしています。 こうすることで、ラズパイに AWSの認証情報を配置することなく、アップロードできます!
ラズパイの間欠動作(松山、岡部)
間欠動作をさせるために、メカトラックス社のslee-Pi を使いました。
以下のようなコマンドを実行し、シャットダウンすると、指定した時間 (下の例では 60 分) 後に起動してくる、というものです。
$ sudo sleepi2alarm --set "+60min"
以下のような処理を行うスクリプトを作成します。
- 起動タイマー設定 (60 分)
- センサーデータ取得
- センサーデータ転送
- スリープ
- シャットダウン
systemd のサービスとしてラズパイ起動時に呼び出すよう設定することで、間欠動作を実現しています。 はじめ、4番のスリープを入れ忘れてしまい、すぐシャットダウンするため、ログインすらできないデバイスが完成してしまったのは、良い思い出。
なお、1時間に 1回と謳っていますが、実際は起動した後に60分後に起動するタイマーを設定しているので、起動にかかる時間分ずれていってしまっています。 もう少し厳密にやるなら、次回起動時刻と現在時刻の差分をとって設定するといいかなと思いますが、今回はあまり厳密である必要がないのでこれで。
ラズパイ -> SORACOM(松山、岡部)
ラズパイの通信には、今はなき 3GPi に SORACOM の SIM を挿して実現しています。
実は、セットアップ時に一番苦労したのは、この 3GPi のセットアップです。 なぜなら、3GPi は生産終了しており、パッケージも非公開になっていたのです。 GitHub にソースは公開されていたので、そこから、ファイルを取ってきて、配置するという、めんどくさい作業をしました。
SORACOM の接続には、以下のコマンドで APN を設定することで、できます。
$ sudo nmcli con add type gsm ifname "*" con-name soracom apn soracom.io user sora
最終的に以下のような 4 階建てのラズパイができました!
SORACOM -> AWS(ジホ)
SORACOMに向けてHTTPで送れますし、認証もSORACOMが面倒を見てくれるのでとても楽です。
Soracom Funnel -> AWS IoT Core -> Amazon Kinesis Data Firehose -> Amazon S3の流れでセンサーデータを集めるようにしました。
SORACOM部分含め、全体的な構成は以下のようになりました。
一応、NapterへのSSH接続はできますが、1時間に1回起動するタイミングを見計らって接続して、自動でシャットダウンする処理を止めてから作業をするという健気な操作をしていますw これによって、遠隔で画像の解像度を上げる作業を行いました。
田んぼへのデプロイ
田植えの日にいざデプロイ。はじめてのデプロイ方式ですw
ちなみに、普段よくデプロイデプロイ言ってますが、単語の意味はご存知ですか? (英辞郎 より)
deploy
【他動】
〔軍隊などを〕配備[配置・展開]する、〔布陣を〕敷く
わりと間違ってない!!
単に棒を刺して箱つけて動かして終わりでしょ、みたいに思ってしまいますが、実際に行ってみるといろいろ考えるところがありました。 棒を刺すにもカメラで全体が見えるところ、作業の邪魔にならないところ、ある程度深くさせるところ、などなど。 太陽光パネルに関しても、単に南向きに設置すればいいというわけでもなく、周囲が山に囲まれているのでそれも踏まえて一番日が当たりそうな角度を選んだり。
棒を刺すのにでかいハンマーでガンガン叩いたり(なぜか花園が持っていた)、留め具が固くてそれなりのマッスルを持った人に頼んでようやく留まるだとか、現場感も満喫してきました。
まとめ
普段はクラウドやWebシステムをメインで取り扱っているため、デバイスは不慣れなところが多いのですが、今回の経験を通じて少しだけデバイス側の苦労が理解できるようになったかな。。と思います。
また、今回は「遠いところの情報をモニタリングする」というIoTの定番のユースケースですが、自分たちで作ったデバイスからデータが送られてくると喜びもひとしお。 そのあたりの気持ちはオープン社内報のこちらの記事で代弁してくれているので読んでみてください!
kta-m
先進技術部門 IoTチーム チームリーダー
Related Posts
yukabeoka
2021/12/08
yukabeoka
2021/12/08