水温計測システム
数年前から職場である海老の養殖池に水温を計測するシステムを設置したいと色々とやっていたのですが、色々な方の協力によりようやく完成。手始めに小さな池に交尾させるための海老(卵を産んでもらって孵化を行うため)を飼い始めたので、1週間程設置したのであります。
使ったのは、Raspberry Pi向けにメカトラックスという会社が出している3つの商品。
3G通信モジュールの”3GPi”、太陽光発電で電源の無いところでもRaspberry Piなどの使用を可能にする”Pi-field”、タイマー動作で必要な時だけRaspberry Piを起動し消費電力を抑えることを可能にする”slee-Pi”。そして、こいつにSORACOMのSIMをセット。
水温センサーは、水面に近いところ(浅いところ)と遠いところ(深いところ)の2箇所の水温を測りたかったので2つつけてみました。ちなみにつけたセンサーは、こいつ↓
https://strawberry-linux.com/catalog/items?code=12332
耐久性が心配だけど、扱いやすかったので(^^;
そして、pythonから数値を読み出すのには、以下のサイトを参考にさせていただきました↓
http://www.taneyats.com/entry/raspi-smart-aquarium-2
購入したセンサーは、パラサイトパワーモードのもので2本線。Raspberry Piの接続に間違えがなければ、ここのプログラムで数値を読み出すことができます。ただ、1点、注意点が。
このセンサー、うまく値が返ってこない時に85000(温度換算で85度!)を返してきやがります(^^;そのため、ERR_VALに85000を設定してあります。85000が返ってきた際の処理を13行目(get_water_temp.py)で行っているんだけど、センサーから読み取ったものは文字列で返ってきているからERR_VALと比較する時は数値に型を変換してあげてください。
さて、これらの組み合わせで作ったシステムを設置したうちの環境はこんな感じ↓
- 過疎化が進み過ぎて光回線が引かれる予定なし。モバイル回線が最速。ただし、ドコモ回線以外は入りにくい。
- 海老の養殖池は広いのと山に囲まれているところがあるため、Wi-Fiが届かないところが出てしまう。
- 養殖池の電源は基本的に200V。ラズパイにつなぐならダウントランス必要よね(多分)。
- 電源をひくために延長コードなどを使うと、作業上邪魔になる。
IoTなシステムを導入するには、結構ハードルが高い環境だと思います。けど、これらの機器の組み合わせで導入することができました。機器の進歩、ありがたやありがたや。そして、このシステムだと電源を必要としないのでこのボックスを移動すれば使用する場所の変更が簡単。ボックスにはバッテリーが入っているから結構重いけど(^^;電源のある場所だけに縛られないし、配線をやり直したりも必要なしってのは嬉しい。
メカトラックスさんの商品を使って感心した点が1つ。それは、ラズパイに繋げば少しの作業で簡単に動いてくれるという点。これ、凄く重要なことだと思います。
こんなシステムは、自分で作るよりできる人にお願いした方が早いし確実。でも、自分で作ってみると分かること多いし新しいアイデアも浮かんでくるから、こういう機器を使ってハードルを下げて自分でやってみることを辞めないようにしたいところ。あと、自分で作ると費用が抑えられるってのも小さい企業にとってはありがたい(^^;
さて、どうやって動かしたかを説明したいところだけど、3G通信に関しては3GPiに同梱してある稼働環境構築済のmicroSDを差し込んで3GPiをはめ込めば3G通信してくれる(笑)
ただ、もしラズパイに3G通信以外にWi-Fiの設定をした場合はちょっと注意。Wi-Fi (eth0 または wlan0) を併用しているとSORACOMのネットワーク側(ppp0)に送信せず、Wi-Fiのネットワーク側に送信してしまうことがあるみたいです。これ、私、結構な時間ハマってSORACOMのサポートに助けてもらった(^^;その時の金言がこちら↓
この状態を解決するためには netstat -r コマンドの結果で default のルートの経由先が ppp0 のみになるように設定を変更する必要がございます。
一般的な Raspberry Pi であれば下のコマンドで、eth0/wlan0 向けの default ルートを削除することができます。
sudo route del default dev eth0
または
sudo route del default dev wlan0
もしこれで解決しない場合は、SORACOMさんに聞いていただいたらと(^^;ちなみに、サポートの方にはとても気持ちよく対応いただけました〜。
slee-Piに関しては、パッケージをインストールしてあげればあとは問題なく動くかと。slee-Piの動かし方の詳細は以下のサイトを参考にしました。
https://qiita.com/syasuda/items/dd1564896e75b03b2b7d
ちなみに、私は、cronに水温を計るスクリプトを実行(10分間隔で)後、Slee-piに5分後に起動するように予約するスクリプトを実行してシャットダウンするように書きました。
取得したデータについては、SORACOMのHervestというサービスに送るようにしています。
json形式でデータを送ってあげれば、ユーザーの管理画面で数値だけでなくグラフ化(可視化)をして見せてくれるので、凄く便利です。ただ、データは40日しか保存されないから、SORACOM Beamってサービスを使って自分のサーバーにもデータを送るようにしています。SORACOM BeamはデータをSORACOM経由で指定の場所に転送してくれるサービスです。転送先は管理画面で設定できるので、わざわざプログラムを書き換える必要がないから楽です。
あと、最近リリースされたLagoonっていうサービスもあって、これもグラフ化(可視化)してくれるサービス。でも、こっちは、もっと多機能。Harvestにはない機能として以下の点があるとのこと。
- 複数パネルを使ったダッシュボードによる可視化
- 閾値を超えた場合のアラート通知
- ダッシュボードの複数名(社内、お客様など)との共有
ちなみに、うちでは、今回の水温データ以外に事務所の気象データ(気温、湿度、気圧)も別でHarvestに送っているので、この気象の中から気温データと水温をLagoonのグラフに表示するとこんな感じに。
このダッシュボードを共有するためにはLagoonのユーザーを作ってその情報を渡してあげればOK。Lagoon専用のユーザーなんで、SIMの設定の部分を間違って触ることもないので安心。
“LagoonはHarvestをご利用のお客様から頂いたご要望をもとに開発されたサービス”ってことなんで、痒い所に手が届く感じ。とりあえずは、データの可視化はHarvestとLagoonで十分という感じだな〜。
色々と作業をしてみて感じたのは、1年前に比べて疑問を解決してくれる記事(ブログ)が増えているな〜と。もし、1年前に挫折した人がいれば、もう一度情報を調べなおしたら欲しい情報が手に入るかもしれないので、ぜひ挑戦して欲しいな〜と。
情報だけじゃなくて、DO(溶存酸素)なんかを測れるセンサーなどの欲しかった商品も出てきているようなので挑戦したい。
https://qiita.com/fftcy-sttkm/items/eb4c4c64c5aba454cf55
DOとかpHとかのデータも取得できるようになるとありがたい。
まあ、長々と書いたけど情報を取得するのはあくまで出発点。取得した情報を元に自動で状況に対する動きしてくれるところまで作りたいもんだ。車海老の養殖業界は、働き手の高齢化が半端ないもんで、作業は自動化をしていかないとキツい。。例えば水温が上がり過ぎると太陽の光を遮断するための寒冷紗を張るとか。養殖池は大きいから相当大きな寒冷紗が必要ってところから大変だけど(本当は水を冷やすシステムを導入したいけど、大量の水を冷却するのは非現実的)。そんな、何かを動かすような大きな動力と取得したデータを連携させている事例とかあったら見学とか話を聞きにいきたいな〜。