日常をテクノロジーでハッピーに!IoTシュフのニチテク
枯れそうなキッチンハーブが「水をくださーい!」と叫ぶ装置の作り方
“おうちにグリーンを取り入れてリフレッシュしたい”“ちょっとした植物があったら気分が上がるかも”
“キッチンでハーブを育てたら、ハーブを添えたおしゃれでおいしい料理をいつでも作れそう”
そう思ってキッチンハーブを買ってきては、水をやり過ぎて根腐れさせてしまったり、土が乾きそうなタイミングで「水をやるんだ!」って分かっていても、忘れて枯らしてしまったり……水やりのタイミングってとても難しいですよね。「水をくださ〜い」って、植物がしゃべってくれたらいいのに……。
「あ、そうか! そういう装置を作ればいいんだ!」
という訳で、日常のちょっとしたアイデアをテクノロジーの力を借りて形にするのが「日常テクノロジー」(略して「ニチテク」)です。IoTシュフのYamada3が、「枯れそうなキッチンハーブが『水をくださーい!』と叫ぶ装置の作り方」を伝授します。
装置に必要なものは何? どんな構成になるの?
ここで改めて何をする装置を作るのか明確にしましょう。
「土の中の水分が減ってきたら『水をくださーい!』と叫ぶ装置」
でしたね。
「土の中の水分」を知るためには、センサーとそれを制御するマイコンボードが必要です。
今回の装置では
- 教育向けマイコンボードのmicro:bit
- micro:bit用 ミニ土壌水分センサー
- ワニ口クリップ・3本
を使用します。
ハーブを育てている鉢の中にセンサーを挿して、ワニ口クリップ3本を下図のようにmicro:bitにつなげてみてください。装置はこれで完成です。
プログラミングしよう!
micro:bitのプログラムはブラウザ上でカンタンに作成できます。
まずMicrosoft MakeCodeのmicro:bitエディターを開いて
「新しいプロジェクト」のボタンを押して、プロジェクトに好きな名前を付けましょう。とりあえず、ハーブが叫ぶのでプログラム名を「HerbCryProgram」とします。
- ミニ土壌水分センサーの値を読み取る
ミニ土壌水分センサーの2本の足(伝導ブローブ)部分の電位差をPin0で読み取って、その値をmicro:bitのLEDで表示させるプログラムを作ってみましょう。
メニューの「入出力端子」から「アナログ値を読み取る 端子P0」を選びます。
次にメニューの「基本」から「数を表示 0」を選択します。
「最初だけ」に「数を表示 0」を入れて、その0の替わりに「アナログ値を読み取る 端子P0」を入れたら、センサーの値が表示されるプログラムの完成です。
パソコンにmicro:bitを接続し、ダウンロードボタンを押してプログラムを実行させましょう。
Pin0のアナログ値は、ミニ土壌水分センサーの2本の足(伝導ブローブ)の間の電位差、つまり0Vから最大3.3Vの電位差を、0から1023の整数の値で表現したものです。
例えば645のような値です。このプログラムの場合、一度だけ表示されて終了になります。
このミニ土壌水分センサーのアナログ値は
- 土の中の水分が多いと値が大きく
- 土の中の水分が少ないと値が小さく
なります。これを使ってプログラミングしていきましょう。
「水分が足りている」「足りていない」の判定をどうするのか?
次に、植物にとって「水分が足りている」「足りていない」を判断する必要があります。
植物の種類によっても違ってくるし、どのように考えたら良いでしょうか?
ここは「水分が足りていない」状態から考えるより「水分が充分な状態」から考えてみましょう。
充分に水をあげて計測した値が最大値になるはずです。その値を初期値として基準にし、水分が最大の状態から何%か少なく(値が低く)なったら「足りていない」と考えれば良さそうです。
では実際どのようにして「今、水をあげたよ。」とmicro:bitに教えたら良いでしょうか?
いろいろ方法があると思いますが、水をあげたらAボタンを押して値を知らせるようにプログラミングしてみましょう。
キッチンハーブに水をあげたときのプログラム
それでは、キッチンハーブに充分水をあげて、Aボタンを押したら初期値を保存して表示するプログラムを作ります。動作としては以下のようになります。
- 電源を入れたらハッピーマークが表示される
- Aボタンを押す
- Pin0のアナログ値がLEDに表示される
まず水分を意味するmoistureとその初期状態を意味するinitを合わせて、
「moisture_init」という変数を作ります。ここに水をあげた直後の値を保存します。
メニューの「変数」から「変数を追加する…」を選んで、作成する変数の名前をmoisture_initにしてOKを選択します。
moisture_initを使って、このようなプログラムを作ります。
「最初だけ」ブロックの中に、「アイコンを表示 ハート」を入れて初期状態を示します。これは、電源が入っているか、いないか、状態を区別できると便利なので入れました。
これで水をあげたときは、Aボタンを押して、水分が最大になったときの値を変数moisture_initに保存できるようになりました。
初期値と現在の値を比べよう!
初期値をmoisture_initとしました。現在値は変数moistureとしましょう。
moisture_initに0.9掛けた値よりmoistureが少ない場合は、メロディを鳴らしてお知らせします。
メロディはギャラリーのMysteryを選びましたが、エディターから自分の好きなように音を鳴らすことができますので試してみてください。
お知らせのタイミングをカスタマイズするには?
先ほどは、水分が初期値の90%になったら知らせてくれるように、moisture_initに0.9掛けた値と比べるプログラムにしましたが、お知らせのタイミングを調節できるようにしましょう。
- Bボタンを押したら……現在の水分量(Pin0のアナログ値)を知らせる
- AとBを同時に押したら……初期値の値を知らせる(知らせるだけで保存はしない)
という機能を追加します。
これで、ご自身の育てている植物に合わせて、何%になったら水をやればいいのか、いい感じにカスタマイズすることができます。
このプログラムの手順は以下の通りです。
- キッチンハーブに水をあげる
- Aボタンを押して初期値を保存する
- そのまま放置
- そろそろ水をあげた方が良いかもというときにBボタンを押して水分量を確認
- micro:bitのロゴ(タッチセンサー)をタッチして初期値を確認
- 現在の水分量、初期値の水分量を計算して、計算結果を0.9の替わりに入れる
これで、プログラムをカスタマイズできました! 完成後は音楽が鳴ったら、水をあげるだけです!
次は音楽が鳴る代わりに「しゃべる」プログラムを作ります。
しゃべる部分をどうやって作るのか?
Python(パイソン)というプログラム言語を元にしたMicroPython(マイクロパイソン)を使ってプログラムすると、おしゃべりができます。
これで「水をくださーい!」とおしゃべりさせるプログラムを作ってみましょう。
import speechで、speechという音声モジュールを呼び出します。
speech.say(“MIZU WO KUDASAI”)でmicro:bit v2付属のスピーカーから音声を出すことができます。
「枯れそうだから、助けてー!」と叫んでいる感じを出したいときは、
speech.say(“MIZU WO KUDASAAAAAAAAAAAAI”)
とすると、叫んでいる感じになります。
プログラムを完成させよう!
次に、水やりをした後、時間が経過して再び土壌が乾燥したら、「水をくださーい!」と叫んでPin0の値をスクロールさせるプログラムを作りました。
試しに動かしてみて、いい具合に「水をくださーい!」としゃべるようになったら、プログラムのsleepを30分ごとや1時間ごとなど適切に変更して、しゃべる間隔を調整しましょう。
こちらでmicro:bit MicroPythonドキュメンテーションがご覧いただけます。このドキュメントを参考に、機能を追加したりして、ぜひ遊んでみてくださいね!
日常テクノロジーなキッチンハーブがある暮らし
これで水やりの問題をニチテクな装置で解決しました!
オリーブオイルにニンニクスライスとローズマリーを入れて炒めた後にお肉を焼いたら格別においしいですよ! 自分で手塩にかけて育てたハーブは、ついつい使うのが少量になってしまいますけどね。
おうちで育てたキッチンハーブを、ぜひ料理に使って楽しんでくださいね。