入門Scratch

15.MOTORコントロール③【ボットをランダムに動かす!乱数と偶数・奇数判定を使ったプログラミング】

スクラッチでロボットをランダムに動かそう!モーター制御と乱数の活用テクニック

プログラミング教育で大人気の「スクラッチ(Scratch)」を使って、二足歩行プログラミングロボット「クムクム」を制御するチュートリアル解説です。今回は、ロボットの動きに「意外性」を持たせるための重要なテクニック、「2つの動作パターンをランダムに切り替える方法」について詳しく解説します。

単調な繰り返しの動きではなく、ロボットが自分で考えて動いているように見せるためには、「乱数(ランダムな数字)」の使い方が鍵となります。算数の「偶数・奇数」の概念も取り入れた、実践的で学びの多い内容になっています。

今回の目標:右・左の動きを自動で切り替える

今回のプログラムのゴールは、ロボットが自分でサイコロを振るように数を決め、その結果に合わせて以下の2つのポーズをランダムにとるようにすることです。

  • パターンA(右向き):顔を右(0度)に向け、右手を上げ(180度)、左手を下げる(0度)。
  • パターンB(左向き):顔を左(180度)に向け、左手を上げ(180度)、右手を下げる(0度)。
  • 共通動作:ポーズをとった状態で少し待機し、次の動作へ移る。

基本動作のプログラミング

まずは、乱数を入れる前に、基本となる「右向き」と「左向き」のブロックの塊(スクリプト)を作成します。

ロボットプログラミングの基本として、最初に必ず「モーター電源ON」「全モーターをまっすぐ(初期位置)」にするコマンドを入れます。これにより、前回の動作の影響を受けずに正しい姿勢からスタートできます。

次に、顔用モーターと腕用モーターの角度を指定します。クムクムロボットの場合、顔は0度が右、180度が左などの仕様に合わせて角度ブロックを組み合わせていきます。動作確認を行い、スムーズに右手を挙げて右を向くか、逆に左手が挙がるかをチェックしましょう。

「乱数」を使って動きを変化させる2つの方法

動きのベースができたら、いよいよ「ランダム性」を組み込みます。動画では、初心者向けの簡単な方法と、少し応用的な算数を使った方法の2パターンが紹介されています。

方法1:単純な「1から2までの乱数」を使う

最も直感的な方法は、「1から2までの乱数」ブロックを使うことです。コイン投げと同じ感覚です。

  • もし「乱数 = 1」なら、右向きの動作。
  • もし「乱数 = 2」なら、左向きの動作。

これを実現するために、「変数」を用意します。変数の中に乱数の結果を格納し、「もし~なら(if文)」ブロックで変数の数字を判定させて分岐させます。非常にシンプルで分かりやすいロジックです。

方法2:大きな数と「あまり(余り)」を使った偶数・奇数判定

動画の後半で紹介されているのが、よりプログラミングらしい、そして算数の勉強になる方法です。「1から100000」のような大きな乱数を発生させ、その数字が「偶数か奇数か」で動きを決めます。

ここで登場するのが「〜を〜で割った余り(mod)」という演算ブロックです。

  • 奇数の判定:変数を2で割った余りが「1」の場合 → パターンAを実行
  • 偶数の判定:変数を2で割った余りが「0」の場合 → パターンBを実行

この方法のメリットは、扱う数字の幅がどれだけ大きくても「2つのパターン」にきれいに振り分けられる点です。プログラミングにおいて「モードの切り替え」や「スイッチ判定」などで非常によく使われるロジックですので、ぜひ覚えておきましょう。

ロボットに数字を喋らせてデバッグする

プログラムを作っていると、「本当に今は偶数が出ているのか?」「なぜ動かないのか?」と不安になることがあります。そこで動画では、ロボットの音声合成機能(おしゃべり機能)を活用しています。

動作ブロックの中に、以下のような発話コマンドを追加します。

  • 「(変数の中身)!」と数字を読み上げる。
  • 判定結果に合わせて「ぐうすう」「きすう」と喋らせる。

実際にロボットを動かすと、「23962、ぐうすう!」と言いながら指定のポーズをとってくれます。これにより、目(動き)と耳(声)の両方でプログラムが正しく動作しているかを確認でき、デバッグ(修正作業)が非常に楽しく、かつ効率的になります。

注意点と学習のポイント

変数の使い方に注意

乱数を使う際、直接「もし<乱数=1>なら」というブロックを2回続けて書いてしまうミスがよくあります。これだと、1回目の判定と2回目の判定で違う乱数が引かれてしまう可能性があります。必ず「一度変数に乱数を保存」してから、その変数を判定に使うようにしましょう。

モーターの可動域と速度

連続して動かす際、モーターの動く速度が速すぎるとロボットに負荷がかかったり、動きが追いつかなかったりします。動画内でも「0.5秒」待つなどの調整をしています。また、スクラッチ上で動作確認をする際、ループ処理(ずっと)を使う場合は、動きが早くなりすぎないように適度な「待ち時間」を入れるのがコツです。

応用への道:このロジックをどう活かす?

今回学んだ「乱数」と「偶数・奇数判定」のテクニックは、単なる左右運動以外にも様々な場面で応用可能です。

  • ジャンケンゲーム:乱数を3で割った余りを利用すれば、グー・チョキ・パーの3パターンをランダムに出すことができます(余りが0, 1, 2の3通りになるため)。
  • おみくじロボット:大吉、中吉、小吉などの運勢をランダムに発表させることができます。
  • ダンスの振り付け:いくつかの決めポーズを用意しておき、ランダムに組み合わせることで、毎回違うダンスを踊るロボットが作れます。

プログラミングにおいて「ランダム」は、ゲーム性や生き物らしさを演出する魔法のスパイスです。まずは基本の左右切り替えからマスターし、自分だけのユニークな動きを作り出してみてください。

コメント

タイトルとURLをコピーしました