簡易水位監視装置「生産二課・みずた係長」の製作メモ
こどもパソコンIchigoJamの互換機で、さくらインターネットのIoTサービス sakura.io のLTE通信モジュールが装着できるIchigoSodaを使って、田んぼの水位を監視できる装置を作ってみました。
名付けて、「生産二課・みずた係長」です!
平地の田んぼは比較的大丈夫ですが、法面の広い田んぼは水が抜けやすく、また、逆に水が多すぎると法面が崩れる危険もあるので、父親がこまめにチェックしています。
いちいち田んぼに見に行かなくてもWebでチェックしてみようという試みです。
掲載内容は、気ままに製作した結果ですので、あくまでメモ程度で。チャレンジしようという方は、自由にカスタマイズしてください。
必要なもの
材料
- IchigoSoda
- sakura.io LTE通信モジュール(残念ながら2021年6月末で製造終了)
- アウトドアバッテリー(使用したのは45,000mAhのもの。Amazonで調達)
- USB充電器(スマホの充電器でOK)
- microUSBケーブル(100均でOK)
- フロートスイッチ × 3個(Amazonで調達)
- NFボックス(使用したのは11サイズ。ホームセンターで調達)
- 塩ビパイプ類、ネジ・金具類、線材等(ホームセンターで調達)
※合計で30,000円くらい。バッテリーが一番高くて12,000円くらいですw
登録関係
- さくらインターネットの会員登録
- sakura.ioの利用申し込みとモジュールの登録
- レンタルサーバーサービスの利用申し込み(WebとMySQLが使えるところ)
※このページでは登録や申し込みについては説明していません。ゴメンナサイ…
センサー部の製作
高精度なセンサーだと静電容量式のものがあったり、超音波式があったりしますが、田んぼの水位は5~6センチ程度で、今回は水があるのかないのかを確認できれば良いので(知識もありません!)、フロートスイッチを3つ使って、計4段階でざっくりと水位を測ります。
フロートスイッチは、タンク内の水が減ればポンプをONにしたり、満水になればOFFにしたりできるON/OFFスイッチです。
フロートの中に磁石が仕込まれていて、軸の中がリードスイッチになっています。磁石が近づくとONになるという感じです。
使用したフロートスイッチは、フロートが下がるとONになります。
このフロートスイッチを横に3つ並べますが、3段階に高さを調整する必要があり、この高さの加減は田んぼに設置してみないとわかりませんので、L字型のスライド金具に取り付けて調整できるようにしてみました。
取り付けるベースは、たまたま手元にあったアクリル板の端材に無理やり固定していますが、パキッといったら終わりですので、おすすめしませんw
フレームは、一般的な塩ビパイプです。コーナーも使って適当なサイズでコの字型に組みます。
田んぼに設置してみないと土壌の深さがわかりませんので、余裕をみた足の長さにしておきました。
センサー部とフレームを合体させたら完成です。
設置環境に応じて、フロートスイッチからのコードを延長し、スイッチの上部やコードの延長部などを融着テープ等で防水しておきます。
送信側の製作
送信には、さくらインターネットのIoTサービス sakura.io を利用しますので、sakura.ioのLTE通信モジュールを装着できる、IchigoJamの互換機であるIchigoSodaを使用します。
IchigoJamは、子どもたちが楽しくテキストプログラミングを体験できるように開発されたシングルボードコンピューターで、起動するとすぐにIchigoJam BASICでプログラミングができて、入出力にも対応していますので、センサーやLEDなど電子工作も手軽に楽しめます。
さらに、IchigoJam BASICにはsakura.ioとデータを送受信するためのコマンドも用意されていますから、とても簡単にセンサーの値を送信できます。(ファームウェアver1.3.1~)
ちなみに通信費はなんと1カ月税込み66円で10,000回の通信ができます!
センサー部の接続
3つのフロートスイッチは、IchigoSodaのINポートとGNDポートに接続するだけです。
使用するINポートは、IN1・IN4・BTN(IN9)です。GNDポートは3ヶ所ありますからそれぞれに接続します。
IN1・IN4・BTN(IN9)は、内部プルアップとなっているため、別途プルアップ抵抗の準備が必要なく、シンプルに接続するだけですので、チョイスしています。
写真では、接続しやすくするため、PCN北はりまで製作したIchigoJam用I/Oシールドを利用していますが、なくても大丈夫です。
フロートスイッチの状態を確認するには
フロートスイッチの状態を確認する場合は、IchigoSodaを起動し、BASICで次のコマンドを入力します。
?IN(1)
?IN(4)
?IN(9)
これで、それぞれのON/OFFの状態を確認できます。
内部プルアップのため、フロートスイッチがOFFの場合1が表示されます。反対にONの場合は0になります。
sakura.ioに送信するには
とてもかんたん。次のコマンドを入力します。
IOT.OUT 1
これだけで、sakura.ioに1の値が送信されます。
これだけです。
プログラム
これを踏まえてプログラムを作ります。
条件としては、
- IN1が一番水面に近い位置、IN4が真ん中、BTN(IN9)が一番水面から離れた位置という配置
- IN1のフロートだけが浮いていれば(OFFであれば)1を送信
- IN4のフロートが浮いていれば(OFFであれば)2を送信
- BTN(IN9)のフロートが浮いていれば(OFFであれば)3を送信
- どれも浮いていなければ(すべてONであれば)0を送信
- 送信は、15分間隔
文章にすると複雑そうですが、プログラムは簡単です。
10 @ARUN
20 VIDEO 0
30 '
40 N=0
50 [0]=IN(1)
60 [1]=IN(4)
70 [2]=IN(9)
80 '
90 IF [2]=1 THEN N=3:GOTO 120
100 IF [1]=1 THEN N=2:GOTO 120
110 IF [0]=1 THEN N=1
120 '
130 IOT.OUT N
140 '
150 FOR I=1 TO 3
160 WAIT 60*60*5
170 NEXT
180 GOTO 30
【プログラムの説明】
10行 … セーブ領域0番のプログラムをスイッチONで自動起動するおまじない。
20行 … 画面表示は不要ですので、表示モード0で省電力を図ります。
40行 … sakura.ioに送信する値を変数Nとして、初期値を0にします。
50~70行 … 配列にそれぞれのフロートスイッチの状態を代入します。
90~110行 … フロートスイッチの状態が1、つまり浮いている(OFF)状態を確認して、それぞれ1,2,3を変数Nに代入します。
130行 … sakura.io に変数Nの値を送信します。
150~170行 … 15分間待機します。60*60*5で5分、これを3回繰り返し。(WAIT 60で1秒)
180行 … 30行へ戻る
これで、sakura.ioまでデータが届くようになりました。
田んぼ側完成!
以上で田んぼ側の準備は完了です。
ちなみに電源はキャンプ用に購入してあった、45,000mAhのアウトドアバッテリーを使いました。(どのくらい持つかはテスト中です)
ほんとうならバッテリーのUSBポートから電源を取るのですが、省電力過ぎてバッテリーの自動OFFが働いてしまいます。一方、バッテリーにはコンセント端子も付いていますが、こちらは自動OFFしませんので、USB充電器を経由してIchigoSodaの電源にしました。
sakura.ioからDBへ
sakura.ioまでデータが届くようになりましたが、以後このデータを活用しやすいように、さらに自前のデータベース(MySQL)に転送します。
※IoTデータ可視化サービスのAmbientを利用すると以下の作業はぐんと楽になると思いますが、自分でいろいろといじってみたいので、自前の環境に持ってきました。
データの流れ
IchigoSoda → sakura.io → PHP → MySQL
そのために、sakura.ioからのデータをデータベースに格納するPHPファイルをWebサーバーに準備し、sakura.ioのサービス連携でOutgoing-WebhookとしてPHPファイルのURLを登録しました。
このあたりのくわしい情報は、以下の参考サイトでご確認ください。
複雑そうですが、やってみると意外と簡単です。
参考サイト
ボクにもわかるIchigoJam用マイコンボード
IchigoSoda / sakura.io の接続方法
https://bokunimo.net/ichigojam/sakura.html
sakura.ioのOutgoing WebhookでMySQLデータベースにデータを保存
https://qiita.com/kaz19610303/items/5904e86cf9f2346ff088
データの閲覧
あとは、データベースに登録したデータを閲覧できるようにするだけです。
MySQLのデータを参照して、グラフ化し表示するPHPを作成しました。
このあたりの情報もネット上にたくさんありますので、ここでは割愛します。
グラフ化については、Google Chartsを使用しました。
いざ、田んぼへ!
実際に田んぼに設置しました。
フレームの足を長めにとっていましたが、意外と土壌に差さらず、ある程度現地でカットし、抜けないようにしっかりと差し込みました。
そして、大切なのが3つのフロートスイッチの高さ調整。
今回は、真ん中(2)のスイッチを平時の水位レベルとし、そこから上下それぞれ約1.5cm程度ずらしました。
1のスイッチが下限、3のスイッチが上限です。
あとは実際に運用してみて一番いい高さに再調整していきます。
最後に
PHPまわりについては割愛してしまいましたが、IchigoSodaやセンサー工作については非常に単純な仕組みになっています。
これだけ簡単になっているのもIchigoJamのおかげ。電源を入れてBASICのコマンドひとつ打ち込むだけで送信完了という簡易さは、他のシングルボードコンピューターにはなさそうです。
同じ仕組みを使って、まったく別の用途にも使えると思いますので、参考になれば幸いです。
なお、sakura.ioの通信モジュールは製造終了ですが、後継サービスの準備も進んでいるようですので期待したいと思います。
PS.目玉シールを貼るとなんでもキャラ化できるのでおすすめ!