今回は他のデバイスからデータを取得して、表示するようなプログラミングを勉強します。
事前準備
M5Stackには様々な外付けのモジュールが用意されています。当初プログラミングの勉強でM5Stackを選んだ理由の一つにこれがありました。
今回は、この中からM5Stack用土壌水分センサユニットを使いたいと思います。
【注意】今回の題材の準備の過程で知ったのが、UI.Flow用のM5GOやM5Stack FIREの場合は、これらの拡張デバイス用のポートが用意されているが、私が使っている通常のM5Stack BasicだとポートAしか無いので、ここで説明する作業が必要になります。(この問題について参考になったサイトはこちらです
M5Stack Basicに土壌湿度センサーEarthをつなげてAmbientに送信するまでの過程 - Qiita)
ポートBを持たないM5Stackで使う場合
UI.Flowで使うにはポートBに刺さっていないと使えないみたいなので、Basicで使う場合はGroveケーブルをそのまま使って指すことが出来ません。そこで、M5Stackのバスポートに直接させるように、片側のコネクターを外します。端子がそのままだとあれなので、伸縮チューブで絶縁しておきます。
黒=GND、赤=5v、白=アナログの36、黄色=デジタルの26に挿せば使えるようになります。
UI.FlowにEarth Unitを追加する
IDEの左側にUNITを追加するためのボタンがあるので、それを押します。
Earth Unitを探して選択してからOKをクリックして追加します。
そうするとブロックグループのUnitsのところに「アース」が表示され、利用できるブロックが表示されます。
これで準備ができました。
課題1 アナログ値を表示する
まず最初に、UIのラベルを追加して、そこにアナログ値を表示するものを作ってみましょう。
以上で完成なので実行してみて、ウエットティッシュや水の入ったコップに入れて(電極が見えている部分だけが濡れるように注意すること)みてどうなるかを確認します。
課題2 一定の値を超えたら音を鳴らす
先程の課題で、水に入れたときの数値が確認(私の場合5〜700)できたと思うので、次はその数値を超える場合は音を鳴らすということを試します。
まずは、変数を使って取り出したアナログ値を使い回せるようにします。今回はwaterという変数を作りました。
「もし」のブロックを使って判定しますが、「変数>500」という判断をしたいので、ロジックの中から比較用のブロックを使います。
あとは、比較のブロックで数値と変数を比較して、条件を満たす(Trueになる)のであれば、音を鳴らすようにします。
課題3 一定の値を超えたら音を鳴らしながら画面の色を変える
音だけではなく、視覚的にもわかるようにしたいので、背景色を変えるようにします。
画面を塗りつぶした後、ラベルを再表示させないと文字が見えないのでそのようにしています。
これで、外部のセンサーと連動するプログラムを作ることが出来ました。
実際に動いているもの
まとめ
今回は外付けのセンサーと組み合わせることで、センサーとアプリの連携みたいなことを体験してもらいました。Earth Unitは電極間の電気の通りやすさによってアナログ値が変わります。デジタル値のブロックを使うと、一定の通電状態になると入力が「0」から「1」に変化するので、応用編としてやってみるのもいいともいます。
水の種類のよってアナログ値が変わるので、水道水、ミネラルウォーター、水道水に醤油を入れたりと、色々と試してみると子供も楽しみながら、電気と水の関係についても理解が深まる回となりました。
そろそろネタが切れてきたけど、子供は週に1回だけだとなかなかプログラミングの理解が進まないようなので、ある程度自分でできるようになるまで、ここまでの内容の応用編をやるのがいいのかなと思います。