Slide 1

Slide 1 text

Pi-field × SORACOMで キャベツ圃場を定点監視してみた! 2024/03/29@SORACOM UG九州

Slide 2

Slide 2 text

まず

Slide 3

Slide 3 text

上場おめでとうございます🎉🎉🎉

Slide 4

Slide 4 text

身の上 株式会社Fusic IoTクラウドエンジニア(since 2023.04) あと三日しかない新卒26歳です! 特に理由もなく埼玉から福岡に就職! でも海があるから幸せ! 普段はRuby, RoR, AWS, TS, Pythonを主戦場に 船酔いと日焼けのダブルパンチ

Slide 5

Slide 5 text

みなさん、キャベツ食べてますか?

Slide 6

Slide 6 text

キャベツの旬は3~5月!! JA グループ とれたて大百科 - キャベツ, https://life.ja-group.jp/food/shun/detail?id=1

Slide 7

Slide 7 text

いちばん美味しい時期に、安く食べたい!

Slide 8

Slide 8 text

需要予測 × 広告 => 需給連携の最適化!! Fusic - News “衛星データ活用によるテレビ広告の高度化と需給連携に向けた取り組みを開始”, https://fusic.co.jp/news/692

Slide 9

Slide 9 text

需要予測 衛星データ解析 →旬の予測 でも、モデルの検証には現地に行く必要が...

Slide 10

Slide 10 text

そこで!!

Slide 11

Slide 11 text

Pi-field × SORACOMで キャベツ圃場を定点監視してみた!

Slide 12

Slide 12 text

要件 ● 稼働期間: 半年 ● 毎日キャベツの画像を報告 ● 電源はない ↓ ● 屋外に長期間合っても壊れない ● 自分で発電するor低消費電力で 大容量の電源リソースが必要 DALL-E画伯の秀作 「キャベツ畑」

Slide 13

Slide 13 text

弊社田んぼまもる君 Fusicでも田んぼを撮るデバイスは作っていたが...

Slide 14

Slide 14 text

弊社田んぼまもる君 パネルの故障!! → 信頼を求めてメカトラックスさんのPi-fieldを選択! 田んぼまもる君の記事, https://tech.fusic.co.jp/posts/2022-09-05-iot-tambo-mamoru-kun/

Slide 15

Slide 15 text

What is Pi-field 機能 ● 高耐久性(防水ボックス) ● 間欠動作可能(slee-Pi 3) ● 太陽電池で電源レスで動く ● SIM通信モジュール(4GPi) →畑のモニタリングには最適! https://mechatrax.com/products/pi-field/ Pi-field Liteさん

Slide 16

Slide 16 text

What is Pi-field 外装 ① ケーブルグランドで粉塵や水から保護 ② アルミフレームによる拡張性 ③ 防水・防塵性能の高い筐体 (パッキンもついている) https://mechatrax.com/products/pi-field/ ① ② ③

Slide 17

Slide 17 text

通信・クラウド部分 まるで チュートリアルのような構成図(Beam, Harvest, Napter, Lambda, Slack)

Slide 18

Slide 18 text

通信・クラウド側Tips あまりにもBeamのtutorial記事が良すぎて何も困らなかった...!! SORACOM document - IAM 認証を利用して Amazon S3 にファイルをアップロードする 強いて言えば, 開発時にWiFiとLTEを一緒に使う時は注意! Qiitaに記事を載せています デバイスに証明書置かなくていいの,本当に楽です...

Slide 19

Slide 19 text

ハード, ラズパイ部分 ● 単管パイプ+パイプキャッチでPi-fieldと接続 パイプ類はホームセンターの通販が安い パイプキャッチ: タキゲン C-486-BNを使用 C-486-BN: https://www.takigen.co.jp/products/detail/26011780100

Slide 20

Slide 20 text

ハード, ラズパイ部分 ● カメラはアルミフレームを延長して接続 ● アルミフレームとカメラの接続は3Dプリント部品を使用 ● 二台のカメラは、防水性能の高いUSB webカメラ

Slide 21

Slide 21 text

カメラに関して(ソフトウェア) ● OpenCVはインストール周りで大変そう... ● fswebcamを使用して、Pythonのsubprocessで呼び出し ● カメラが二台あるので、デバイスファイルの特定が必要 https://manpages.ubuntu.com/manpages/focal/man1/fswebcam.1.html https://iganari.github.io/post/2021-05-05_raspi-camra-photo/

Slide 22

Slide 22 text

カメラに関して(ソフトウェア) ● 当日, カメラのパラメータを調整して屋外で綺麗に映るように fswebcam -r {解像度} -F {撮影するフレーム数 } -S {撮影しないが露光する数 }

Slide 23

Slide 23 text

カメラに関して(ソフトウェア) カメラ撮影フロー v4l2-ctl -—list-devices STDOUT subprocessでLinuxコマンドを実行 「HD USB Camera」で絞り込み /dev/XXX fswebcamでカメラ撮影 IMG: 20240329.png SORACOM Beam & S3 リクエスト catchした例外は全て Slackへ

Slide 24

Slide 24 text

カメラに関して(ハードウェア) ● USBの端子がケーブルグランドに入らない ● 切断して、内部で半田付け 切断と引き込み 皮膜を剥がす 半田付け

Slide 25

Slide 25 text

カメラに関して(ハードウェア) ● アルミフレームのナットは先入れを使用(接触面積を増やすため) ● →入れるときにキャップが外しづらいので注意 一般的には後入ナットを使用する想定か

Slide 26

Slide 26 text

間欠動作 slee-pi3 ● ラズパイ専用の電源管理・死活監視モジュール ● 電源電圧のチェックや間欠動作, RTCの利用などが可能 ● slee-piの機能にアクセスするLinuxコマンドも ● 電源ボタンアリ!!(これがテストに便利...) →ざっくりいうと、使用したい時だけラズパイを起動できる! slee-pi: https://mechatrax.com/products/slee-pi/#description slee-pi3で何が可能か?: https://mechatrax.com/blog/what-is-possible-with-sleepi3/

Slide 27

Slide 27 text

間欠動作 以下の2点に気を付ける必要がある. 1. 電圧低下からの復電時に, 正しく次の起動が予約される 2. 予約がない時にshutdownをしないようにする 以下の要件で実装 ● 次の起動予約、撮影・通信、shutdownをデーモン化して起動時実行 ● 日が出ている特定の時間のみ撮影するように ● →失敗or予約不備の時、起動し続ける&Slackに通信

Slide 28

Slide 28 text

間欠動作 set_alarm.sh send_images.sh shutdown.sh set_alarm.sh: 次の予約時刻を現在時間から決定. 15分以内に次の時刻がある時, さらに次の時刻を予約. 実行前に30秒のスリープ処理を入れる. send_images.sh: カメラ撮影・アップロード処理スクリプト shutdown.sh: 10分後にshutdownを予約するスクリプト. 次の起動予約がない場合, 実行せずラズパイは起動し続ける. 全体をデーモン化

Slide 29

Slide 29 text

当日あると便利な道具 ● PC+ポケットWiFi → NapterでSSHするために使用 ● マルチメータ ● その他諸々の工具 ● 植え込み用のハンマー 納期が迫っていても、リハーサルはしましょう!!見落としを当日カバーするの は至難の業です! 特に南京錠は忘れがちです!!!!

Slide 30

Slide 30 text

Harvestのデータ 一度電圧が落ちたものの , 正常に 復旧 mechatrax, sleepi3ctl, https://github.com/mechatrax/sleepi3-utils sleepi3ctlを使用して電圧を取得 ↓ Harvestに送信 from subprocess import run, PIPE import requests def get_voltage () -> tuple[str, str]: cmd1 = ['sudo', 'sleepi3ctl' , 'get', 'voltage', '1'] cmd2 = ['sudo', 'sleepi3ctl' , 'get', 'voltage', '2'] cp_result1 = run(cmd1, stdout=PIPE, check=True, encoding='utf-8') cp_result2 = run(cmd2, stdout=PIPE, check=True, encoding='utf-8') return (cp_result1.stdout, cp_result2.stdout)

Slide 31

Slide 31 text

キャベツの画像 左: 11月初頭 右: 3/28日 12時 1/17以外, 毎日元気に画像を送信してきます!

Slide 32

Slide 32 text

そろそろ食べごろです!!

Slide 33

Slide 33 text

まとめ ● IoTは本当に総合格闘技だった ● Pi-fieldは偉大 ● SORACOM Beamは偉大 質問対応していただいたmechatrax様、ありがとうございました! ぜひ楽しいIoTライフを!