電子工作で自作した植物の自動水やり機から土壌データをAWS IoT Coreに連携してみた

こんにちは!エンジニアの岩間です。

前回のブログでは、初の電子工作にチャレンジし、植物の自動水やり機を自作しました。

土に差し込んだ土壌センサーで計測した数値が一定の値を上回ると、自動で水やりを開始しLINEに通知する、という装置です。

しかし、ここで一つ気になることが…。センサーの値がどのように変化しているのか、リアルタイムで見てみたくなりませんか?

そこで思いついたのが、AWS IoT Coreとの連携です。
この連携により、センサーのデータをクラウドに送信して、どこにいてもデータの変化を確認することができます。

今回のブログでは、植物の自動水やり機からAWS IoT Coreにデータを送るまでの手順や、プログラムを詳しくご紹介します。
さらに、実際にデータをAWS IoT Coreに送信してみた結果も公開しますので、お楽しみに!

 

構成図

土壌センサーとESP8266(NodeMCU)を接続した状態で、土壌センサーのデータを毎分、MQTTプロトコルでAWS IoT Coreに送信します。

そしてAWS IoT Coreで受け取ったデータは、CloudWatch Logsに送信し、グラフ化して可視化する、といった構成です。

 

 

物理回路部分は下の写真の通りです。組み立て方の詳細は前回のブログで紹介しています。

 

手順

モノの作成

まずはデバイスとクラウドを接続するために、AWSコンソールにログインし、IoT Coreでモノを作成します。

1. AWSコンソールにログインした状態で、検索窓に「IoT Core」と入力→検索します。

 

2.  IoT Coreの画面に遷移したら、左のサイドメニューから「モノ」をクリックします。

 

 

3. 「モノを作成」をクリックします。

 

4. 作成画面に遷移したら、「1つのモノを作成」を選択し、次へをクリックします。

 

5. モノの名前を入力し、それ以外はデフォルト値で次へをクリックします。

 

6. 新しい証明書を自動生成(推奨)を選択し、次へをクリックします。

 

7-1. 次にポリシー選択画面に遷移します。まだポリシーがないため新規作成します。

 

7-2. ポリシー作成画面が表示されるので、以下のJSONドキュメントを設定します。

 

7-3. ポリシー選択画面で作成したポリシーを選択し、「モノを作成」をクリックします。

 

8. 以下の画像のようなモーダルが表示されるので、①デバイス証明書、②プライベートキー、③ルートCA証明書を忘れずにダウンロードします。
ダウンロード後、完了をクリックします。これでモノの作成が完了です!

 

9. モノの作成後、左のサイドメニューから「設定」をクリックし、エンドポイントをコピーしておきます。(後にプログラムで使用します)

 

 

プログラム

次に、PCとマイコンボードを接続し、ArduinoIDE(開発環境)を開きプログラムをマイコンにアップロードしていきます。

Arduino IDEのインストール

ArduinoのIDEはこちらからインストールできます。

 

事前設定

インストール後の各種設定(NodeMCU esp8266用の開発ボード追加)はwayintop社のGitHubの手順書を参考に行います。

 

開発環境情報

ArduinoIDEの開発ボードはesp8266 (v3.1.2)を使用しています。

 

ライブラリは、

  • ArduinoJson (v7.1.0)
  • PubSubClient (v2.8)

を追加でインストールしておきます。

 

プログラム

ArduinoIDEで、

  • secret.h
  • auto-watering-system.ino

の2ファイル作成します。

secret.hには、WiFi のパスワードや秘密鍵などの機密情報を以下のように定義します。

 

auto-watering-system.inoでは、土壌センサーの値を毎分AWS IoT CoreのトピックにMQTTプロトコルでpublishしており、土壌センサー値が閾値600を超えた場合、ポンプを作動させ水やりをするプログラムを書きます。

 

上記2ファイルのプログラムが書けたら、PCとマイコンボードを接続し、ArduinoIDEを開きプログラムをマイコンにアップロードします。

Arduino IDE左上の「→」ボタンをクリックすることで、プログラムをマイコンへアップロードすることができます。

また、ArduinoIDEのシリアルモニタを使うとデバッグが行えます。MOISTURE LEVELがシリアルモニタに表示されていれば正常動作しています。

 

 

ルール作成

次に、マイコンからAWS IoTに送信されたデータをCloudWatchに連携するためのルールを作成していきます。

1 . IoT Coreの画面で左のサイドメニューから「ルール」をクリックし、ルールを作成をクリックします。

 

2. SQLステートメントを以下のように設定し、次へをクリックします。

 

3. 次はルールアクションの設定です。

3-1. アクションにCloudWatch logsを選択し(画像①)、CloudWatch Logグループを作成(画像②)をクリックします。

 

3-2. CloudWatch Logグループ作成の画面に遷移するので、任意のロググループ名を入力の上、作成をクリックします。

 

3-3. ルールアクションの画面に戻り、新しいロールを作成ボタンをクリック(画像③)します。

 

ロールを作成のポップアップが表示されるので、ロール名を入力し、作成をクリックします。

 

3-4. ロググループに3-2で作成したロググループ、IAMロールに3-3で作成したIAMロールを選択し、次へをクリックします。

 

4. 確認と作成画面が表示されるので、問題なければ作成をクリックします。

これでIoT CoreからCloudWatch Logsへの連携ルールの作成が完了です!

 

CloudWatchLogsの設定

次にCloudWatch Logsのログをグラフ化していきます。

 

1 . AWSコンソールで、検索窓に「CloudWatch」と入力→検索します。

 

2. CloudWatchの画面に遷移したら、左のサイドメニューから「ロググループ」をクリックし、先ほど作成したログ名を検索し、クリックします。

 

3. ロググループの詳細画面に遷移したら、画面右上の「Logs Insightで表示」ボタンををクリックします。

 

4 . ログのインサイト画面に遷移したら、以下のクエリを実行します。
※実行対象の期間に、ログがない期間を選択すると結果が出てこないため注意

 

5. グラフが表示されたら、ダッシュボードに追加をクリックし、保存します。

ダッシュボード追加後、Cloud Watchの左サイドメニューのダッシュボードからいつでもグラフを確認できるようになります。

 

 

結果&まとめ

お疲れ様でした!
これで土壌データがAWS IoT Coreに連携され、Cloud Watch Logsでグラフ化できるようになりました。

 

結果

早速結果を見ていきましょう。

以下の画像は、一週間の土壌測定値の推移を示した実際のグラフです。※鉢は屋外に設置

ここでセンサーの仕組みについて少し説明します。

使用したのは静電容量式土壌水分センサーで、市販のCapacitive Soil Moisture Sensor を使用しています。

静電容量式は地中の水分量に応じて端子間の静電容量が変化することで土壌水分を測定します。水分量が多いと静電容量が増し、アナログ出力電圧が低くなります。逆に、乾燥している状態では静電容量が減少し、アナログ電圧値が高くなります。

つまり普通の湿度とは逆で、水分量が多いほど測定値は小さくなり、水分量が少ないほど測定値は大きくなります。

 

センサーの仕組みを踏まえグラフを見てみると、測定値が600に達したあと跳ね返されている部分がいくつか確認でき、これが水やりされたタイミングとわかります。

計測を始めた当初、水やり後の測定値が思うように下がっていない、という問題に気がつきました。
水やりの様子を観察したところ、センサーと水やりホースの位置が近すぎて、水やり開始直後にセンサーが直接水にさらされ、その後すぐに水やりが停止していました。
センサー周りだけの一時的な水分増加しか反映できず、土壌全体に水分が行き渡っていない状態でした。

そこで水やりホースをセンサーから離れた位置に設置し、固定することで、水やりが長時間行われるようにしました。
調整後は水分が土全体に行き渡り、水やり後の測定値が大きく下がるようになったことが確認できました。

 

また、天候による測定値の変化も見られました。

雨の日には湿度が高くなるため、土壌の測定値は低いままであまり変化は見られませんでした。測定値の安定=雨が土壌に均等に浸透していることがわかります。
一方、晴れた日には土壌が乾燥しやすく、測定値が上昇=乾燥が進んでいることがわかります。

雨が止んだ後、土壌の乾燥が進んでいるので土の水はけは問題なさそうでした。

まとめ

センサーデータをクラウドに連携することで、土壌の状態をリアルタイムで把握でき、水やりタイミングや水はけの良し悪しなど、植物の健康状態の発見ができました!
具体的には、

  • 鉢を置く場所や日当たり角度の調整
  • 風通しの改善
  • 土の水はけ改善、土壌改良剤等の検討
  • 季節ごとのデータ推移で傾向をつかむ
  • 効率的な水やり計画が立てやすくなる

等々、データを活用することでガーデニングの問題解決や発見につながるのではないかと思いました。
また、マイコン側でAWS IoTからの通知をsubscribeすることで遠隔でスマホで水やり、なんてことも実現できそうです。

あらゆるものがチップを持ちIoT化が進んでいる現代ですが、そんな中ガーデニングIoTを体験できて、ガーデニングやスマート農業が進化していく未来を実感することができました。

 

長くなりましたが、ここまでお読みいただきありがとうございました!

この記事が気に入ったら
いいね ! しよう

Twitter で

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ