見出し画像

第6回 - UIFlowで遠隔操作 編【PLEN5Stackでプログラミング学習】

こんにちは!
PLEN Projectの松原です。

第6回となる UIFlowで遠隔操作 編では、
・UIFlowの「リモコン」について
・リモコンを用いたPLEN5Stackの遠隔操作
以上をご紹介致します。


この記事は連載形式となっておりますので、
他の回は以下のマガジンよりご確認ください!



0. 下準備

まずUIFlowにアクセスしましょう。

☆UIFlowはM5Stackをビジュアルプログラミングするためのツール
☆Chrome系ブラウザでのご利用を推奨します
☆ブックマーク登録を行うと次回以降便利です


以下から最新版のライブラリーをダウンロードし、UIFlowで開いてください。



下準備の詳細に関しましては、第1回の記事をご確認ください。



1. UIFlowの「リモコン」について

今回は、「リモコン」ブロックを用いて、PLEN5Stackを遠隔操作してみます。

UIFlowの「リモコン」を開いてみましょう。

画像1


いくつかブロックがありますが、まずは「Set Title」と「リモコンページの二次元コード」を配置してみます。

画像2


再生ボタンを押し、実行してみると、

実行


リモコンページにアクセスするためのQRコードが表示されました。

画像4


カメラアプリ等を用いてリモコンページにアクセスします。

画像5


リモコンぺージを開くと、先ほど設定したリモコンタイトルが表示されました。

画像6


ただ、リモコンにはスイッチが必要ですね(>_<)。

画像43


UIFlowに戻り、スイッチブロックを配置してみます。タイトルindexは以下のように設定してください。

画像7


再生ボタンを押し、

実行


リモコンの更新ボタンを押します。

画像17


すると、先ほど配置したスイッチが増えているのが確認できました。ボタンはindex順に配置されます。

画像10

スイッチ
 True/False (オン/オフ) を切り替える
ボタン
 押すと処理が始まる
スライダー
 変数の値を0~100の間で変更する
ラベル
 M5Stackから送信したデータを表示する


スイッチやボタンを活用すれば、PLEN5Stackを自由にコントロールできそうな感じがしますね!

では、一つづつ確認していきましょう。



2. リモコンを用いたPLEN5Stackの遠隔操作

2-1. スイッチ

例えば、スイッチON/OFFに応じて、PLEN5Stack両目LEDの点灯/消灯を切り替えてみましょう。

画像39



まず、いらないスイッチを削除し、スイッチ名を「目のオンオフ」に変更します。

画像11


リモコンのスイッチを押すと、スイッチブロック内の処理が実行されます。
でも、スイッチをONにしたときと、OFFにしたときで処理を分けたいですね。

画像18


ですので、スイッチの ON/OFF (True/False) を受け取る変数を設定します。
設定⚙ボタンを押し、入力名を「flag1」に変更してください。(日本語は使用できないようです)

画像12


これでスイッチを

ONにしたとき
  flag1 に true 代入 → 処理実行
OFFにしたとき
  flag1 に false 代入 → 処理実行

となります。


物理スイッチでは、電気が流れる/流れないによって、LEDのON/OFFを切り替えます。
リモートスイッチでは、インターネットを介してM5Stackに命令を送り、M5StackがLEDのON/OFFを切り替えます

M5Stackが『LEDのON/OFFを切り替えます』 ← ここはプログラミングする必要がありますね。

画像17


LEDのON/OFFを切り替えます』のフローチャートは以下のようになりますね。

プログラム例
『スイッチでLEDを点灯/消灯するプログラム』

画像13


では、フローチャートを参考にプログラムを作成してみましょう。




↓解答↓




フローチャート通りに作るとこうなりますが、

画像14


以下のように簡略化してください。
(flag1 には true/false が直接代入されるので、簡略化できますね)
(点灯時の色は自由に変更して頂いて大丈夫です)

画像15


実行してみると、

画像16


遠隔で目のコントロールができました!


ここまでのプロジェクトデータは以下より確認できます。
(UIFlowにライブラリーを追加してから開いてください)



2-2. ボタン

次は、ボタンを用いて、PLEN5Stackを動かしてみましょう

画像40


前後左右、4つのボタンがあれば基本的な動作はできそうです。又、おじぎボタンやランダムボタンを作っても良いかもしれません。


まず、ボタンを作成します。

画像19


リモコンのボタンを押すと、ボタンブロック内の処理が実行されます。

画像20


では、作ってみましょう。




↓解答↓




ランダムボタンは難しかったかもしれません。以下の例では、ダンスモーション(30~38)をランダムに再生するようにしています。
ボタンを追加してみたり、モーションを変えてみたり、色々アレンジしてみてくださいね。

画像21


実行してみると、

画像22


ここまでのプロジェクトデータは以下より確認できます。
(UIFlowにライブラリーを追加してから開いてください)



2-3. スライダー

次は、スライダーを用いて、モーション速度を変更してみましょう。

画像41


まず、スライダーを作成します。

画像23


リモコンのスライダーを動かすと、スライダーブロック内の処理が実行されます。

画像25


スライダーの値(0~100)を受け取る変数を設定します。
設定⚙ボタンを押し、入力名を「speed」に変更してください。(日本語は使用できないようです)

画像24


モーション速度を代入する変数を作成します。

画像26


変数には初期値を代入します。

画像27


そして、フローチャートは以下のようになりますね。

プログラム例
『モーション速度を変更するプログラム』

画像30


では、UIFlowでプログラミングしてみましょう。



↓解答↓




フローチャート通りにプログラムを作成すると、以下の通りとなります。

画像28

画像29


実行し、リモコンを更新してみると、スライダーが追加されました。

画像34



ただし、このプログラムにはいくつかの改善点があります。以下の改善を行ってみましょう。

改善点①
【現在】
スライダーが100のとき、モーション再生速度100(%)

【改善】スライダーが100のとき、モーション再生速度300(%)




↓解答↓




変数 再生速度 には、受け取ったスライダーの値×3 を代入すれば良いですね。

画像31



改善点②
【現在】
スライダーが0のとき、モーション再生速度0(%)

【改善】スライダーが0のとき、モーション再生速度10(%)




↓解答↓




再生速度が遅すぎる場合は、条件分岐を用いて修正してあげます。

画像32



動かしてみると、

画像33


ここまでのプロジェクトデータは以下より確認できます。
(UIFlowにライブラリーを追加してから開いてください)



2-4. ラベル

最後は、ラベルを用いて、PLEN5Stackのステータスを確認できるようにします。

画像42

モーション再生速度やバッテリー残量を確認できると便利ですね!


ラベルを配置します。

画像35


ラベルブロックには、更新間隔や更新時の処理、表示内容などを設定します。

画像36


今回は、再生速度とバッテリー残量が確認できれば良いですので、以下のように設定してげましょう。

画像37


実行し、リモコンを更新してみると、ラベルが追加されました。
モーション再生速度は100(%)、バッテリー残量は50(%)のようです。

画像38


ここまでのプロジェクトデータは以下より確認できます。
(UIFlowにライブラリーを追加してから開いてください)



3. +αプログラミング

リモコンブロックを用いて、発展した内容のプログラミングを行ってみます。プログラミング中級者・上級者の方は是非チャレンジしてみてくださいね!


3.1 目の色を変更する

スライダーを用いて、目の色を変更できるようにしてみましょう。
スライダー3本を用いて、R,G,Bを設定しても良いですが、今回は、1本のスライダーで設定できるようにしてみます。


図のように、スライダーの0~100を4分割し、R,G,Bの値を0~255で変化させると、全ての色(白を除く)が表現できますね!

画像57


また、RGB値は以下の計算で求めることができます。

画像57



では、プログラミングしてみます。
まず、R,G,Bを格納する変数を作成し、初期値を代入しておきます。

画像44


目の色を設定するスライダーを作成します。

画像46


スライダーの入力値を4分割します。

画像47


計算式を参考にしながら、プログラムを作成します。

画像56


画像49


動かしてみると、

画像50


ここまでのプロジェクトデータは以下より確認できます。
(UIFlowにライブラリーを追加してから開いてください)



3.2 目の明るさを変更する

現在、目の明るさは最大ですが、自由に変更できるようにしてみます。


目の明るさを格納する変数を作成し、初期値を代入しておきます。

画像51


目の明るさを変更するスライダーを作成します。

画像52


目の明るさの最大は、255であるので、変数 LED明るさ255×スライダーの値/100 を代入します。
(255×スライダー%))

画像53


目の色を変更するスライダー内の 255 を変数 LED明るさ に差し替えます。

画像54


実行してみると、

画像55


ここまでのプロジェクトデータは以下より確認できます。
(UIFlowにライブラリーを追加してから開いてください)


リモコンを活用した+α、他にもアイデアがあれば、是非作ってみてくださいね!



4. 終わりに

ロジック編が終わり、内容が実践的になりましたが、いかがでしょうか?
是非、実践を通じて、ロジック編の理解を深めると共に、プログラミングの自由さ・楽しさを実感して頂ければと思います。

次回以降はM5Stackの拡張モジュール(センサー)やPLEN5StackのIoT化などを取り上げていく予定ですので、お楽しみに!


ご意見・ご質問等ございましたら、
ご気軽にコメント欄まで頂ければありがたいです。

この記事は連載形式となっておりますので、
是非以下のマガジンをフォローしてくださいね。


それでは、また次回の記事でお会いしましょう!
See you next time!


画像56



この記事が気に入ったらサポートをしてみませんか?