mBotのLEDの明るさを「だんだん」明るく光らせたり、mBotを「だんだん」ゆっくり走らせよう

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

 発展編の第1回は、乱数を使って、LEDの明るさや色をランダムに変えるプログラムを作りました。STEP2では、LEDをだんだん明るしたり、mBotをだんだん早く走らせたりします。ロボットの動作をだんだんに変化させていく場合、「変数」が便利です。変数は、名前は、難しいですが、ロボットプログラミングをする上での基本の使い方は、3つです。

・何回も使う値を、名前を付けて保存したいとき

・値(数字や文字)を加算したり、減算したりする

・ロボットの動作の回数やボタンが押された回数を数える(記録する)→次回発展3の回でやります。

変数は、実際にプログラムをしながらイメージを掴んでいく事が重要なので、早速一つずつ見ていきましょう。

説明の際の使用環境

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

ブザーの鳴る音に変数名(名前)を付けよう

 ロボットプログラミングをする時に使う変数の機能の一つ目は、「何回も使う値を、名前を付けて保存する」です。 基本2「mBotのブザーを鳴らしてみよう」 では、きらきら星をプログラミングしました。その時に使ったブロックは、以下を使いました。

C4の音階を0.25秒鳴らすは、「ド」の「16分音符」でした。小学校や中学校で習う場合は、「C4」や「秒」じゃなく、「ドレミ」や「4分音符」のような名前なので、プログラムを作る時も、使い慣れた名前に変えたいと思います。

mBot_ブザーの音の長さと音符の関係図

変数名「16分音符」を作る

1:ブロックパレットにある「変数」をクリック

mblock5_変数_ブロックパレット画像

2:変数を作るをクリック

mBlock5_変数を作る画像

3:変数に名前をつける

mBlock5_変数に名前を付ける画像

4:16分音符の変数ブロックが出来る

mBlock5_変数ブロックが出来た図

同じようにして、ド・レ・ミ・ファ・ソ・ラ・シ・ド、全音符・2分音符・4分音符・8分音符の変数ブロックを作りましょう。

5:作った変数ブロックに、数字を設定します。●●音符には、秒数を入れます。ドレミに対応する周波数を入れます。ドレミと周波数の関係は、「ドレミ・周波数」などで検索すると、情報が出てきます。ここでは、以下のように入力してみました。

mBlock5_変数で周波数と音符を対応させる

この設定をすると、それぞれの丸いブロックの中に、設定した秒や周波数の数字が入ります。↓の図のようなイメージを持っておきましょう。

変数ブロックに数字を入れるイメージ

16分音符という変数名のついたブロック「箱」に0.25という数字を入れたイメージ、ドという変数名のついたブロック「箱」に262とうい数字を入れたイメージを持つことが重要です。箱の中には、数字がひとつしか入らないという決まりごとがありますので、忘れないでください。

6:作った「16分音符」、「ド」の変数ブロックを、ブザーブロックに入れるに入れる変数を入れたブザーブロック

7:音を試す

変数で音を出す

下のブロックは、2つとも、同じ音ですが、普段、音楽の時間で習う言葉と同じだから、プログラムが見やすいですよね。

2種類のブザーブロック

このように、何回も出てくる数字に、分かりやすい名前を付けたいときに、変数を使う事が出来ます。

変数を使って、mBotのLEDをだんだん明るく光らせよう

次は、変数の機能の2つ目、「値(数字や文字)を加算したり、減算したりする」についてです。変数ブロックには、「数」を一つだけ入れることが出来ます。変数ブロックという箱の中に、数が1個入っているイメージです。

変数は、さらに、変数ブロックの箱の中の数を変えていく事が出来ます。その機能を使って、LEDがついていない状態から、一番明るい状態まで、だんだん明るく光らせていくプログラムを作ってみましょう。

1:変数ブロックを作る

LEDの「明るさ」は0~255の数字で変えることが出来ますね。まずは、この0~255の数字を入れる変数ブロックを作ります。

変数ブロック_明るさ

変数の名前は、ここでは「明るさ」にしていますが、「ひかり」「LED」など、自分で分かりやすい名前にして構いません。

2:変数ブロック「明るさ」に、LEDがついていない時の数字を入れる

LEDがついていない時の数字は、0でしたので、「0」を明るさ変数ブロックに入れます。

変数ブロックに数字を入れるイメージ

3:LED点灯ブロックに、数(0)が入った変数ブロックを入れて、変数ブロックの数が、1ずつ増えていくブロックを作る。

変数を減算ブロック

※1ずつ変えるは、1ずつ増えると考えてください。逆に、1ずつ減らす場合は、「-1」を入れます。

変数の値を変えるイメージ

変数ブロックという箱には、「数」が1個しか入りませんので、1ずつ変えると、前の数字が1ずつ出ていきます。

4:一番明るい数字(255)まで、繰り返す ブロックを使う

LEDは、0~255まで明るさを設定してあげることが出来るので、255まで繰り返すという条件ブロックを作って、繰り返します。

mBlock5_変数でLEDの明るさをだんだんに変えるスクリプト

LEDが全く点灯していない状態から、だんだん、赤く、明るく光っていく事が確認できると思います。

課題:mBotを減速しながら、ストップさせるには?

さて、それでは、ここで、課題に挑戦です。先ほどは、mBotのLEDの光をだんだん明るくさせていきました。次は、mBotを最高スピード(100%の速さで動かす)から、だんだんゆっくり減速していって、最後は止まるというプログラムに挑戦しましょう。ここまで変数の理解が出来れば、難しくないですよね。

 

 

mBotをだんだんゆっくり減速していくプログラム

ここがポイント:グローバル変数・ローカル変数

変数とリスト

 変数とは、データ(値=文字や数)を記憶しておく入れ物のことです。変数という箱には、一つの数しか入らないりません。つまり、新しくデータを変数という箱に入れると、それまで入っていたデータは消えてしまいます。ちなみに、mBlock5では、(リスト・配列とは違う)もし、複数の変数ブロック(箱)を、一つにまとめて、入れるリスト(配列)というブロックを作ることも可能です。
 
 プログラムでは、色々な変数を作るので、どんなデータが入っているかを見分けるために必ず名前を付けておきます。これを「変数名」と呼びます。変数名は、自分が分かりやすい名前を自由に着ける事が出来ます。
 
 また、変数には、プログラムのどこからでも利用することのできるグローバル変数と、特定の範囲内でのみ利用できるローカル変数があります。

mBlock5(Scratch3.0)では、グローバル変数は、「すべてのスプライト用」として設定が出来、ローカル変数は、「このスプライトのみ」という設定が可能です。

 例えば、mBotで、「変数名」を「明るさ」として「すべてのスプライト用」とすると、「明るさ」の変数ブロックが、スプライトで使う事が可能です。

 もし、「このスプライトのみ」とすると、デバイスタブ上にある「mBot」だけで変数ブロックが使え、スプライトでは変数ブロックが使えなくなります。

 mBotを使ったロボットプログラミングの場合、「すべてのスプライト用」と設定しておけば問題ないことがほとんどです。

■グローバル変数を使ってmBotとスプライトを連動させる

 例えば、mBotの超音波センサーの基本と使い方をマスター では、超音波センサーの値を、スプライトエリア上に表示させました。その値をスプライト(パンダ)に言わせる場合は、このグローバル変数を使えば可能になります。

① mBotに変数名「超音波センサ」・「すべてのスプライト用」の変数ブロックを作る

グローバル変数の使い方スクリプト

② mBotのスクリプトエリアに、変数名「超音波センサ」に、超音波センサーの値を入れるような、以下のブロックを作る。

グローバル変数スクリプト_スプライト側スクリプト

③ スプライトのスクリプトに、同じ変数名「超音波センサー」のブロックを使った以下のスクリプトを作り、実行する

因みに、変数ブロックは丸い形をしていますが、mBlockには、他にも、センサーの値や、乱数ブロックのように、数がどんどん変わっていくブロックがあります。

 これらの丸いブロックには、かならず、数や文字=値が1つ入っていて、それがどんどん変化していきますので、変数の仲間として考えると分かりやすいでしょう。

 センサーの値ブロックは変数ブロックの仲間