教育版 レゴ マインドストーム EV3 基本セット

自動運転車両を作る

ユーザーが定義した動作コマンドに従う自動運転車両を設計してください。

120分以上
基礎
Grades 9-12
roaming-vehicles-gps

レッスンプラン

5分

準備

  • こちらの先生向け資料をお読みください。
  • 必要に応じて、EV3 ラボソフトウェアまたは EV3 プログラミングアプリに入っている導入用資料を使いながらレッスンを計画します。これにより、生徒が教育版レゴ® マインドストーム®</sub) EV3に慣れることができます。

興味付け (30分)

  • 「ディスカッションを活性化させる」セクションのアイデアを参考に、生徒の学習への関心を喚起します。

  • プロジェクトの説明。

  • 生徒にペアを組ませます。

    • 生徒にブレインストーミングの時間を与えます。

    探求 (30分)

    • プロトタイプを複数製作するよう指示します。
    • 本体とプログラミングの両方の面で複数のアイデアを試すよう促します。
  • 各ペアに2つのアイデアを制作させ、動作をテストさせます。

    説明 (60分)

    • 生徒に2つのモデルの動作をテストし、優れた方を選ぶよう指示します。
    • 構造とプログラミングの両方の面で複数のアイデアを試すよう促します。
    • 各ペアがプロジェクトの仕上げをし、作業プロセスを記録するのに必要な資料をまとめる時間を設けます。

    仕上げ (60分) - 生徒が最終レポートを作成する時間を設けます。

    • 各ペアがクラスの前で成果を発表する発表タイムを設けます。

    評価

    • それぞれの生徒に取り組みを評価して伝えます。
    • 評価の際は、以下に提示するルーブリックを参考にすると良いでしょう。

ディスカッションを活性化させる

15~30分

現在、自動車には様々なナビゲーションシステムが使われています。このようなシステムの中には、乗客を目的地まで安全に運ぶという責任を運転手に代わって担うものも出てきています。A地点からB地点まで移動する最適なルートを特定する前に、自動運転車両はユーザーが入力するデータに基づいて決められた動作を実行できなくてはなりません。

ev3-robot-driving-base

活発なブレインストーミングになるよう促します。
生徒に以下の質問について考えてもらいましょう:

  • 自動運転車両とは何ですか?どのような仕組みですか?
  • 自動運転車両はどこから指示を受け取りますか?
  • 道路が東西南北に走る町を走行するには、どのような動作を実行する必要があるでしょうか?

生徒が質問の答えを考える時間を設けてください:

ブレインストーミングで思いついた全てのアイデアと、最初のプロトタイプに選んだアイデア、選んだ理由を記録するよう促します。このプロジェクトでアイデアの有効性をどのように評価するのかを考え、記録してもらいます。こうすることで、見直しや修正を行う際にアイデアを評価し、効果的に問題を解決できるかどうかを判断する評価基準として使うことができます。

疑似コードとは、生徒が実際のプログラム作りに取り組む前に考えをまとめるのに役立つ便利なツールです。

*組み立てのヒント *
まずは車両ロボットを組み立てます。推奨されている教育版レゴ® マインドストーム® EV3 駆動ベースモデルの中から好きなものを選ぶか、自分で考えたモデルでも構いません。EV3 ブロックの上にあるボタンに手が届きやすいようにしましょう。このボタンは、アクティビティで車両の方向をコントロールするのに使います。

coding-08-01

プログラミングのヒント
このタスクでは、EV3 ブロック上のボタンから与えられる指示に従って、ロボットが動作するようにプログラムするということを、子どもたちに説明してください。 以下のパラメーターを使います:

  • 上ボタンが押されると、ロボットが30 cm前進する
  • 下ボタンが押されると、ロボットが30 cm後退する
  • 左ボタンが押されると、ロボットが左に90度曲がる
  • 右ボタンが押されると、ロボットが右に90度曲がる

1つの動作を記録しロボットを動作させる

coding-08-01

ブログラムの説明
1.プログラムを開始します。
2.「Drive 」という変数ブロックを作成します。
3.インテリジェント ブロックボタンが押されるまで待機します。
4.サウンド「Click 2」を再生します。
5. 押されたボタンの数値を変数ブロック「Drive」に保存します。
6. 2秒間待機します。
7. サウンド「G02」を再生します。
8. 変数「Drive 」に保存されている値を読み取り、その値をスイッチに送信します。
9. 数値スイッチ:

a. Drive = 0 (初期条件) の場合、何もしません。
b. Drive = 1 の場合、ロボットを左折させます。
c. Drive = 3 の場合、ロボットを右折させます。
d. Drive = 4 の場合、ロボットを車輪2回転分前進させます。
e. Drive = 5 の場合、ロボットを車輪2回転分後退させます。

  1. サウンド「Game Over 2」を再生します。

複数の動作を記録しロボットを動作させる
一連のデータを保存するには配列操作ブロックを使用します。
配列操作ブロックはしばしば、「列が複数あり、行が1つある表」にたとえられます。

coding-08-02

解決策の説明

  1. プログラムを開始します。

  2. 変数ブロック「Drive 」を作成します。
    「数値配列書き込み」オプションを選択します。

  3. ループを作ります。サンプルプログラムは5回実行されるよう設定されています。

  4. インテリジェント ブロックボタンが押されるまで待機します。

  5. サウンド「Click」を再生します。

  6. 変数ブロック「Drive 」を読み込みます。「数値配列読み込み」オプションを選択します。

  7. 配列操作ブロックを使います。「インデックスで書き込み - 数値」を選択します。

    a. 変数ブロック「Drive」を接続します。
    b. ループの先頭にあるループ インデックスから、配列操作ブロックのインデックス位置にワイヤー接続します。
    c. 「インテリジェント ブロックボタンが押されるまで待機」ブロックからの値を、配列操作ブロックの値の位置にワイヤー接続します。

  8. 配列操作ブロックの出力を変数ブロック「Drive 」にワイヤー接続します。

  9. 2秒間待機します。

  10. サウンド「Go」を再生します。

  11. 2つ目のループを作ります。サンプルプログラムは5回実行されるよう設定されています。最初のループと同じ回数です。

  12. 変数ブロック「Drive 」を読み込みます。「数値配列読み込み」オプションを選択します。

  13. 配列操作ブロックを使います。「インデックスで読み込み - 数値」オプションを選択します。

  14. 数値スイッチ:

    a. Drive = 0 (初期条件) の場合、何もしません。
    b. Drive = 1 の場合、ロボットを左折させます。
    c. Drive = 3 の場合、ロボットを右折させます。
    d. Drive = 4 の場合、ロボットを車輪2回転分前進させます。
    e. Drive = 5 の場合、ロボットを車輪2回転分後退させます。

  15. サウンド「Game Over 2」を再生します。

サンプルプログラムをダウンロード 32 KB、EV3 ラボソフトウェアが必要

タブ「1」と「2」

EV3 MicroPython プログラム例

1つの動作を記録しロボットを動作させる

#!/usr/bin/env pybricks-micropython

from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port, Stop, Button, SoundFile
from pybricks.tools import wait
from pybricks.robotics import DriveBase

# The Left, Right, Up, and Down Buttons are used to command the robot.
COMMAND_BUTTONS = (Button.LEFT, Button.RIGHT, Button.UP, Button.DOWN)

# Configure 2 motors with default settings on Ports B and C.  These
# will be the left and right motors of the Driving Base.
left_motor = Motor(Port.B)
right_motor = Motor(Port.C)

# The wheel diameter of the Robot Educator Driving Base is 56 mm.
wheel_diameter = 56

# The axle track is the distance between the centers of each of the
# wheels.  This is 118 mm for the Robot Educator Driving Base.
axle_track = 118

# The Driving Base is comprised of 2 motors.  There is a wheel on each
# motor.  The wheel diameter and axle track values are used to make the
# motors move at the correct speed when you give a drive command.
robot = DriveBase(left_motor, right_motor, wheel_diameter, axle_track)

# Wait until one of the command buttons is pressed.
while not any(b in brick.buttons() for b in COMMAND_BUTTONS):
    wait(10)

# Store the pressed button as the drive command.
drive_command = brick.buttons()[0]
brick.sound.file(SoundFile.CLICK)

# Wait 2 seconds and then play a sound to indicate that the robot is
# about to drive.
wait(2000)
brick.sound.file(SoundFile.GO)
wait(1000)

# Now drive the robot using the drive command.  Depending on which
# button was pressed, drive in a different way.

# The robot turns 90 degrees to the left.
if drive_command == Button.LEFT:
    robot.drive_time(100, -90, 1000) 

# The robot turns 90 degrees to the right.
elif drive_command == Button.RIGHT:
    robot.drive_time(100, 90, 1000)

# The robot drives straight forward 30 cm.
elif drive_command == Button.UP:
    robot.drive_time(100, 0, 3000) 

# The robot drives straight backward 30 cm.
elif drive_command == Button.DOWN:
    robot.drive_time(-100, 0, 3000)

# Play a sound to indicate that it is finished.
brick.sound.file(SoundFile.GAME_OVER)
wait(2000)

複数の動作を記録しロボットを動作させる

#!/usr/bin/env pybricks-micropython

from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port, Stop, Button, SoundFile
from pybricks.tools import wait
from pybricks.robotics import DriveBase

# The Left, Right, Up, and Down Buttons are used to command the robot.
COMMAND_BUTTONS = (Button.LEFT, Button.RIGHT, Button.UP, Button.DOWN)

# Configure 2 motors with default settings on Ports B and C.  These
# will be the left and right motors of the Driving Base.
left_motor = Motor(Port.B)
right_motor = Motor(Port.C)

# The wheel diameter of the Robot Educator Driving Base is 56 mm.
wheel_diameter = 56

# The axle track is the distance between the centers of each of the
# wheels.  This is 118 mm for the Robot Educator Driving Base.
axle_track = 118

# The Driving Base is comprised of 2 motors.  There is a wheel on each
# motor.  The wheel diameter and axle track values are used to make the
# motors move at the correct speed when you give a drive command.
robot = DriveBase(left_motor, right_motor, wheel_diameter, axle_track)

# Pressing a button stores the command in a list.  The list is empty to
# start.  It will grow as commands are added to it.
drive_command_list = []

# This loop records the commands in the list.  It repeats until 5
# buttons have been pressed.  This is done by repeating the loop while
# the list contains less than 5 commands. 
while len(drive_command_list) &lt; 5:
    # Wait until one of the command buttons is pressed.
    while not any(b in brick.buttons() for b in COMMAND_BUTTONS):
        wait(10)

    # Add the pressed button to the command list.
    drive_command_list.append(brick.buttons()[0])
    brick.sound.file(SoundFile.CLICK)

    # To avoid registering the same command again, wait until the Brick
    # Button is released before continuing.
    while any(brick.buttons()):
        wait(10)

# Wait 2 seconds and then play a sound to indicate that the robot is
# about to drive.
wait(2000)
brick.sound.file(SoundFile.GO)
wait(1000)

# Now drive the robot using the list of stored commands.  This is done
# by going over each command in the list in a loop.
for drive_command in drive_command_list:
    # The robot turns 90 degrees to the left.
    if drive_command == Button.LEFT:
        robot.drive_time(100, -90, 1000) 

    # The robot turns 90 degrees to the right.
    elif drive_command == Button.RIGHT:
        robot.drive_time(100, 90, 1000)

    # The robot drives straight forward 30 cm.
    elif drive_command == Button.UP:
        robot.drive_time(100, 0, 3000) 

    # The robot drives straight backward 30 cm.
    elif drive_command == Button.DOWN:
        robot.drive_time(-100, 0, 3000)

# Play a sound to indicate that it is finished.
brick.sound.file(SoundFile.GAME_OVER)
wait(2000)

発展課題

45分

国語の発展課題

オプション 1
テキストベースのプログラミングを使用する:

  • 様々なプログラミング言語を比較できるよう、子どもたちにテキストベースのプログラミング言語について知ってもらいましょう。

オプション 2
このレッスンでは、配列形式で与えられる指示に従って運転する自動運転車両を制作しました。未来の自動運転車両では、人間の運転手からの入力をオーバーライドするようプログラムすることが可能だとしたどうでしょうか?
言語能力を発達させるために、生徒に以下のタスクに取り組んでもらいます:

  • 自動運転車両には乗客からの入力を無視して速度を自動制御する機能を設けるべきではないとする主張を支持する論拠を書く。
  • この主張の妥当性を指示する具体的な証拠を用いて、このような機能が乗客のデメリットとなる状況の例を述べる。
  • 自動運転車両の自動速度制御は乗客の安全や交通安全を向上させる効果的な戦略だという反対意見にも必ず反論する。

数学の発展課題

このレッスンでは、自動運転車両のすべての動作を細かく指示するシーケンスを制作しました。自動運転車両はセンサーや機械学習を用いることで、指示に従って運転したり、新しい環境に基づいてこれらの指示を修正したりすることができます。
数学スキルの向上を取り入れ、自動運転車両における機械学習の応用を詳しく取り上げたい場合は、実行できる方向転換の数に上限を設けてください。そのうえで、以下の課題に取り組ませます:

  • 道路として使う格子(東西方向の道路5本と南北方向の道路5本など)を作成する。
  • スタート地点と目的地を選び、方向転換の数が最も少ないコースが最も優れたコースであることをふまえて、スタート地点から目的地までの3つの交差点を分析する。
  • 車両をランダムな方向に発車させた場合に方向転換の上限数を越えずに目的地に到着できる可能性を特定する。

学習評価

35分

この学習におけるルーブリックの例
次のルーブリックを参考に、評価規準や判定基準を作成します。
1.課題を部分的にこなした。
2.課題を十分にこなした。
3.期待を上回る達成度であった。

以下の成功基準を使用して、生徒の達成度を評価します。

  • 問題の重要な要素を見出すことができる。
  • 自主的に、実用的で独創的な解決方法を開発している。
  • 自分のアイディアを明確に伝えることができる。

自己評価
生徒たちが製作した装置の動きのデータをある程度収集できたら、自分たちの解決方法について考察するよう促します。以下のような質問をするとよいでしょう:

  • あなたの解決方法は課題設定の条件を満たしていますか?
  • ロボットの動作をさらに正確にすることはできますか?
  • クラスメートはどのような方法で問題を解決しましたか?解決方法を改善する方法を2つ考えて記録するよう促してください。

生徒同士のフィードバック
フィードバックの時間を設け、各グループに、自分たちのプロジェクトとほかのグループのプロジェクトを評価させます。相互評価は建設的なフィードバックをするスキルだけでなく、物事を分析するスキルや、自分の意見の根拠として客観的なデータを使う力を育てるのに役立ちます。

職業適性

この授業を楽しむことができた生徒は、以下の進路について興味がある可能性があります。

  • 起業家
  • システム建築エンジニア

教師用サポート

学習内容:設計プロセスを用いて実生活に基づいた問題を解決する

 情報(共通教科):
情報Ⅰ 2-(3)コンピュータとプログラミング
    情報Ⅱ 2-(3)情報とデータサイエンス
2-(4)情報システムとプログラミング
2-(5)情報と情報技術を活用した問題発見・解決の探求
数学:数学A 2-(3)数学と人間の活動
    数学B 2-(3)数学と社会生活
    数学C 2-(3)数学的な表現の工夫
理科:科学と人間生活 2-(1)科学技術の発展
   物理基礎 2-(1)物体の運動とエネルギー
2-(2)-(オ)物理学が拓く世界
   物理 2-(1)様々な運動
2-(3)電気と磁気
理数:理数探求基礎 2-ア〜イ、
理数探求 2-ア〜イ
工業:第1 工業技術基礎〜第28コンピュータシステム技術
情報(専門教科):情報産業と社会、課題研究、情報の表現と管理、情報テクノロジー、情報システムのプログラミング、情報デザイン、コンテンツの制作と発信、情報実習

国語:現代の国語 [知識及び技能] 2-(2)話や文章に含まれている情報の扱い方
[思考力、判断力、表現力等] A話すこと・聞くこと、B書くこと
論理国語
国語表現 [知識及び技能] 2-(1)-エ、
[思考力、判断力、表現力等] A話すこと・聞くこと-(2)-オ、
B書くこと-(2)-イ、ウ
美術:美術Ⅰ〜Ⅲ 2-A-(2)デザイン、(3)映像メディア表現
総合的な探求の時間

文部科学省高等学校学習指導要領(平成30年告知)
http://www.mext.go.jp/a_menu/shotou/new-cs/1407074.htm

生徒用資料

生徒用ワークシート

Download to view and share the student worksheet.

Download, view or share the student worksheet, either as an online HTML page or a printable PDF

以下でシェア:

Google ClassroomGoogle Classroom