M5 / ガーデニング / プログラミング

M5StickCでガーデニングの水やりセンサを作る ~その1 【測ってみる編】

こんにちは、Lineaです
最近急に晴れて暑くなりましたね~

以前に紹介したM5StickCと水分センサを使ってガーデニング用の水やりセンサを作っています
M5Stickの紹介記事にも書いていたのですが、あれから梅雨で雨続きで防水性がないので測れない日が続き、あまり進めていませんでした
やっと晴れたと思ったら一気に夏の日差しになってきたので植物をしおらせないためにも作るかということで再開しています

今回はその1として水分を測って画面に表示するところまでを解説します
今後の進み具合で続きも書いていきたいと思いますのでお付き合いください
目指すはWebで変動を閲覧して日中に監視できるようにしたいです

M5StickCの紹介記事はこちらです

水分センサー

まずは今回使用する水分センサーについて紹介します
こちらのM5シリーズ用のセンサーユニットを使用しました
M5シリーズで使われているGROVE規格のコネクタが付いてるのでそのままM5Stickに接続して使用できます
価格も400円ほどで安価なのがいいですね
構造は二本の金属端子を土に刺し、土の水分量によって変化する抵抗を計測します


M5Stack用 土壌水分センサユニット https://www.switch-science.com/catalog/4049/

プログラム

センサーの追加

今回は表示するだけと簡素なのでビジュアルプログラミング環境のUIFlowを使用して作ってみます
UIFlowの説明はこちらの記事で解説しています

UIFlowで追加のセンサーユニットを使用する場合、まず追加設定をする必要があります
UiflowのUnitsの+ボタンを押すと追加するセンサーユニットを選択できます
今回使う水分ユニットは”EARTH”を選択しましょう(絵でわかりやすいです)

ユニットを追加するとプログラムのノード選択部分にそれぞれのユニット用のノードが追加されます
今回の水分ユニットではアナログ値とデジタル値を読み取るノードが追加されました

画面の設定

情報を描画するために画面にUIを以下のように配置しました
label0には計測したセンサの数値を表示します
rectangle0にはセンサの数値をゲージとして表示します
画面一番下の枠はグラフの表示部分として作っていますがプログラムでは制御しないのでお好みで

プログラム

プログラムの方は以下の通りです

動作としては次のように動きます

  • タイマーで1秒おきにセンサーの値を計測する
  • 計測した値をlabel0に表示して、rectangle0の横幅を変更する
  • 計測した値を長さ12個のリストに保存して線グラフを表示する

タイマーは生成ノードと開始ノードで時間を指定して起動することができます
今回はSetupにつながる初期化処理の中でタイマーを起動させています
PERIODICモードにすると繰り返し1秒おきにタイマーが呼ばれるので更新処理として使うことができます
”タイマーが呼び出されたとき”ノードはタイマーの時間が経過した際に実行されます
ここに計測の処理を書いて1秒おきに計測させます

計測自体はUnit追加で追加されたアナログ値の読み取りノードで簡単に行なえます
このノードから0~1024の間で水分量の値が取得できます(乾いている:0~1024:湿っている)
特に厳密な物理量を示しているわけではないので目安として考えてください
rectangle0の横幅に1024までの値をそのまま入れると画面の解像度をオーバーしてしまうので10で割っています
自分が使っているPlus(135x 240)に合わせてとりあえず表示できるようにしているだけなので、厳密に画面の横幅に合わせる際には比率を計算する必要があるでしょう

また、ここで結果のリストresultListの先頭要素を削除して、最後に測定値を追加しています
これで一番古い結果が消え、新しい結果が追加されるのでリストの更新処理になっています

グラフの表示更新はupdateGraph関数にまとめています

updateGraph関数ではresultListに保存されている値を10pxおきに線で結んで描画しています
線の描画は幅が1pxで描画され見づらいので高さを1pxづつ変えて描画を10回行っています
結果の値から描画するY座標の位置は更にgetGraphCoordY関数にまとめています

実行

それでは実行してみます

デバッグするときにいちいち土に刺していると往復で結構大変なのですが、濡らしたティッシュに当てると簡単に試すことができます
数字とゲージ、折れ線グラフが計測値に合わせて変化します

うまくいったので実際にベランダの植物たちに刺してみました

サクランボとトマトに刺してみましたが、土やポットのサイズが違うので数値は結構異なりますね
複数の植物の間での絶対的な指標みたいなのは分かりませんでした
今回は1秒おきに計測して12個までしかデータを保存していないので実質12秒間の記録なので変化もほぼありませんでした

水やり後からカラカラになるまでの変動が分かると役立ちそうなので次回はより長い時間の記録ができるようにしていきます
それではまた!!

投稿者

Linea
本業はゲームプログラマー プログラミングやIT系の記事を書いていきます アイコンは愛車のシトロエン DS3です

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA