観葉植物のお世話をDX! その1~ M5StickC Plusを利用して土の中の水分を数値化する ~
はじめに
こんにちは。SHIFT DAAE 開発グループ所属の櫻井です。
こちらの記事では、我が家の課題をDXすることで解消します。
その課題とは、、
「観葉植物(ポトス)の水やりのタイミングが良くわからない。。。」
です!!
在宅勤務が増え、部屋の環境を整えるべく観葉植物を購入した方も少なくないのではないでしょうか。私も今年ポトスを購入し、仕事中に考え事をしながら見つめたりしています。部屋に緑があるのは良いですね。
しかし、やはり気になるのが育て方。
簡単と言われるポトスでも正しく水やりができているか不安になります。
ですので、まずはインターネット検索で調査しました。
基本的には春夏なら2~3日に1回、秋冬なら週に1回程度が目安だそうです。
今は上記を心掛けてなんとなく水やりを行っていますが、
どうしても水やり忘れが起きてしまいますよね。。
解決策として、スマホにTODOとして定期的にスケジュールを入れることも検討しましたが
TODOとして通知する場合に季節ごとに通知タイミングを変更する必要がある。
季節ごとの切り替えはいつ行えば良いの?
という問題があり、あまり良い解決にはならなそうです。。
ということでこれらの課題を解消できるようDXしてみましょう!
DXして実現したいこと
我が家のポトスさんに適切なタイミングで水やりができるようになる。
解決方法の検討
ということで、実現を目指してどうすれば解決できそうかを考えます。
今回は
水やりが必要=土の中の水分が少なくなっていると仮定。
土の中の水分が少なくなった場合に何らかの方法で通知を受け取る。
というシステムが出来れば解決!と考えましょう。
では本当に実現できるか、さらに調査を進めます。
-土の中の水分の状態を確認する。
世の中には土壌水分センサーというものがあるらしく、これを使えば土の中の水分量を数値化できそうです。
-土の中の水分が少なくなった場合に何らかの方法で通知を受け取る。
センサーで取得した水分量を記録し、視覚化することで水やりのタイミングを判断できそうです。
そして水やりが必要なタイミングがわかればそのタイミングで通知を送ることが出来そうです!
ということで実現するためのシステムの構成を以下のように考えてみました。
利用する技術のざっくりした説明です。
水分量の確認、送信
Raspberry PiやArduinoが最初に思い浮かびましたが、
M5Stackの小型版であるM5StickC Plusを利用するとより手早く簡単に実現できそうでしたので
今回はこちらを利用します。
https://www.switch-science.com/catalog/6470/
https://www.switch-science.com/catalog/4049/
obnizというものもあり、こちらは買い切りでクラウド環境を
利用できるということでそちらも良さげでしたが、こちらを試すのはまた別の機会とします。
https://obniz.com/ja/products
データの蓄積、通知
当初はAWSでAPI Gateway + LambdaでHTTPリクエストを受信する構成を考えましたが、AWS IoT Coreを利用したMQTTプロトコルでの通信の方がより良さそうなので、今回はこちらの構成にします。
そして、受信した数値についてはDynamoDBに保存します。
通知についてはLINEやTwitterなど普段利用しているSNSで受け取れると便利かなと思いました。
このあたりはデータが溜まってきたところで再度検討します。
-M5StickC Plusで土の中の水分量を数値化する
ということで今回はM5StickC Plusで土の中の水分量を数値化するところまで実施します。まずはM5StickC Plusとセンサーを購入します。
ポチ。
届きました。では開発していきましょう。
M5StickC Plusでの開発では、公式の開発環境であるUIFlowを利用することとしました。
こちらはMicroPythonまたはUIFlowで用意されているブロックでの開発が可能です。センサーから値を取得して表示だけであれば少しのブロックを組むことで出来ました。 また、コードも生成してくれます。 便利!
// main.m5f
from m5stack import *
from m5ui import *
from uiflow import *
import time
import unit
setScreenColor(0x111111)
earth_1 = unit.get(unit.EARTH, unit.PORTA)。
label0 = M5TextBox(42, 106, "Text", lcd.FONT_DejaVu24, 0xFFFFFF, rotate=0)
while True:
label0.setText(str(earth_1.analogValue))
wait(1)
wait_ms(2)
無事数値化できました。
ということで今回はここまで。
次回はこの取得した値をAWS環境に蓄積するところまで実施します。
\もっと身近にもっとリアルに!DAAE公式Twitter/
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/