mBotを使って簡単なゲームプログラミング

mBotを使って親子が、家庭でロボットプログラミングに挑戦する為のWEB講座を連載しています。前回までで、mBotの基本機能と、プログラミングの基本について紹介しました。
準備その1 mBotの組み立てからPC接続まで 
準備その2 ファームウェア更新からログイン設定
基本1 mBotのLEDを光らせてみよう
基本2 mBotのブザーを鳴らせてみよう
基本3 動きブロックを使ってmBotを自在に動かそう
基本4 ライントレースセンサーの基本と使い方
基本5 光センサーの基本と使い方
基本6 超音波センサーの基本と使い方

 これからは、発展編として、乱数・変数・定義(関数)を活用して、自由自在にmBotを動かす方法についてご紹介します。
 このページでは、乱数を使って、mBotとあっち向いてホイのゲームをする方法について解説します。

説明の際の使用環境

・mBot_v1.1 日本国内正規品 Bluetooth版 購入時期は2019年8月
(新型Bluetoothモジュール)
・mBlock_v5.1 (ローカル版)
・オンラインのファームウェアバージョン_06.01.107
・Windows10
・アップロードモードオフ(USBケーブルが邪魔な場合は、PC内蔵Bluetoothか、Makeblock社のBluetooth変換のUSBドングルで接続をお勧めします)

mBlock5の乱数を使ったプログラミングの基本

 これまでは、自分がイメージした動作の通りにmBotをプログラミングしてきました。
このページでは、「わざと、人間が分からない様にmBotに動いてもらう」というプログラムを、「mBotがあっち向いてホイ」ゲームを作りながら学んでいきます。

 その為には、演算ブロックパレットにある「乱数」というブロックを使います。

mBlock5_乱数ブロックの画像

乱数は、ランダムに数が変わるというブロックです。ランダムに数が変わるとは、毎回、数が変わるという意味です。

例えば、サイコロをふると、1~6の数が、「毎回ちがう数=ランダム」に変わりますよね。ブロックでいうとこんな風に表すことが出来ます。

mBlock5_1から6の乱数ブロック画像

まずは、乱数を使うと、これまでのプログラムとどんな違うことが出来るか確認していきましょう。

mBotのLEDを乱数を使ってランダムに光らせる

例えば、LEDを赤く光らせる時に、これまでは、ボード上のすべてのLEDを赤で点灯するというブロックを使っていました。

mBlock5_mBotのすべてのLEDを赤色に店頭するブロック

でも、これだと、LEDの明るさを変えることは出来ません。

LEDの明るさは、下のブロックの数字を変えると変更できます 

mBotのLEDの明るさを変えるブロックの画像

 明るさは、0~255(256段階)の数字で設定できます。「255」が一番明るくて、0だと消えます。試しに、0~255の中で、好きな数字を入れて、LEDの赤の明るさを変えてみましょう。

数字によって、明るさが変わるのを確認したら、

0~255の乱数ブロック画像

上の画像のように、数字を入れた〇に、0~255の乱数ブロックを入れます。

その後、下の画像のように、繰り返しブロックで、繰り返し光らせてみましょう。

0~255の乱数でLEDの光方を変えるサンプルプログラムスクリプト

どうですか?

このプログラムは、「0~255」の数字が「ずっとランダムに変わり」その変わっている数字の明るさにLEDが「ずっと」かわるがわる変化するプログラムです。

次に、赤だけじゃなく、緑と青の数も変えてみましょう。こんなプログラムを作ると、LEDの光り方はどう変わるでしょうか?

RGBLED全てを乱数でランダムに光らせるサンプルプログラム

mBotあっち向いてホイゲーム

 乱数は、あらかじめ、設定した数字の範囲で、毎回数がかわるというイメージがついたでしょうか。次は、あっち向いてホイのプログラムを作りたいと思います。
 あっち向いてホイは、mBotに、前後左右の動きをランダムにさせればよいですね。そういうプログラムを作る場合の考え方は、こんなイメージを思い浮かべましょう。

もし、1から4までの乱数が1の時なら、前向きに動かす
もし、1から4までの乱数が2の時なら、後向きに動かす
もし、1から4までの乱数が3の時なら、左向きに動かす
もし、1から4までの乱数が4の時なら、右向きに動かす

例えば、「1から4までの乱数が1の時」をブロックで表現するには、
演算ブロックパレットの比較演算の「イコール」ブロックと乱数ブロックを使い以下のような条件ブロックを作ります。

1から4までの乱数が1の時の条件ブロック画像

そうすると、「もし、1から4までの乱数が1なら、前向きに動かす」は、以下のようなスクリプトになります。

mBlock5_乱数のサンプルスクリプト1

上のプログラムで、後ろ向きに動かしているのは、前向きに動かした後、すぐに元も場所に戻るためです。あっち向いてホイも、上に顔を向けた後、すぐに正面に顔を向けますよね。

これを、前後左右の場合で、プログラムすれば、mBotあっち向いてホイゲームの完成です。

mBotあっち向いてホイゲームのサンプルスクリプト解説画像

尚、↓の動画は、分かりやすいように、LEDマトリクスで方向を示すようにしています(↑のスクリプトにはその記述はしていません)

ティンカリング 

 超音波センサーの基本と使い方で、障害物が、あった場合にmBotを止めるというプログラムを作りました。
 そのプログラムをさらに進化させ、障害物を検知したら、回避して、違う方向転換してに走る、衝突回避プログラムを作ってみましょう。
 mBotの組み立て後の動作確認で使った、デフォルトプログラムの衝突回避モードと同じ動きです。

ヒント①:STEP6で作った下のブロックを思い出してみよう。障害物を検知していたら、動きを止めていたところに、ランダムに方向転換させるプログラムを入れる

乱数障害物回避サンプルプログラム1

ヒント2

・乱数ブロックの数の範囲は1から2
1の場合右折
2の場合左折 

■衝突回避のサンプルプログラム

乱数障害物回避サンプルプログラム2

ここがポイント:乱数

乱数とは、、指定した範囲からランダムに数を作る仕組みです。1,2,3,4,5,6,7…と順番に並んでいるのではなく、4,1,1,7,2…とランダムに数字が並ぶことが乱数です。

乱数はサイコロと同じです。サイコロを振ると、1~6の目がランダムに出ます。乱数は、サイコロのように1~6と決められてものではなく、数の範囲を自分で指定することが出来ます。

 また、乱数は、サイコロと違い、1・2・3といった「整数」だけではなく、「小数」を出すことも可能です。例えば、0.1~1.2と指定した場合、その範囲で、0.6や1.2のような数が出ます。