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

仕分け装置を作る

レゴ® パーツの色を3色以上識別し、別々の容器に仕分けることができる装置を設計、組み立て、プログラムしましょう。

120分以上
中級
高校
1_Make_a_Sorting_Machine

レッスンプラン

準備

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

興味付け (30分) -

  • 「ディスカッションを活性化させる」*セクションのアイデアを参考に、生徒の学習への関心を喚起します。
  • プロジェクトの説明 -生徒にペアを組ませます。
  • 生徒にブレインストーミングの時間を与えます。

探求 (30分) -

  • プロトタイプを複数製作するよう指示します。
  • 本体とプログラミングの両方で複数のアイデアを試すよう促します。
  • 各ペアに2つのアイデアを制作させ、動作をテストさせます。
  • 仕分けされた物を入れるカップまたは容器を生徒に配布します。

説明 (60分) -

  • 生徒に2つのモデルの動作をテストし、優れた方を選ぶよう指示します。
  • 各ペアに自分たちでチェック表を作成できていることを確認させます。
  • 各ペアがプロジェクトの仕上げをし、作業プロセスを記録するのに必要な資料をまとめる時間を設けます。

仕上げ (60分)

  • 生徒が最終レポートを作成する時間を設けます。
  • 各ペアがクラスの前で成果を発表する発表タイムを設けます。

評価

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

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

仕分け装置は、大きさや重さ、品質、色などの特性に基づいて様々な物を仕分けることができます。仕分け装置はいくつものセンサーを使ってこのような特性を測定し、それぞれの物を正しいカテゴリーに分類します。

Engage-Sorting-Machine-Cover

活発なブレインストーミングになるよう促します。

生徒に以下の質問について考えてもらいましょう:

  • どの色を仕分けしますか?
  • どの大きさのパーツを仕分けしますか?
  • 仕分けするパーツを動かすにはどのような駆動メカニズムを使えばよいでしょう?
  • どうすれば仕分け装置が複数の場所を感知できるでしょうか?
  • どのような設計の機能によって、装置の動きが正確で繰り返し可能であることが保証されますか?

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

発展課題

国語の発展課題

オプション 1
言語能力を発達させるために、生徒に以下のタスクに取り組んでもらいます:

  • 文章やスケッチ、写真などを使って設計プロセスの概要をまとめ、最終レポートを作成する。
  • 最初のアイデアから完成モデルまで、設計プロセスを解説するビデオを作成する。
  • 自分たちのプログラムについてのプレゼンテーションを作成する。
  • 自分たちのプロジェクトを、同じようなシステムを使った実社会での実用例と比較しながら、制作したモデルをもとに開発できる新しい発明品を発表するプレゼンテーションを作成する。

オプション 2
このレッスンでは仕分け装置を制作しました。食品業界や農業では仕分け装置を使って大規模な製造や流通を管理しています。
言語能力を発達させるために、生徒に以下のタスクに取り組んでもらいます:

  • 学校がある自治体と地域の食品業界または農業の規模をまとめる。
  • 小規模から全国、国際規模までの特定の規模で生産されている食品または農産物を1つ選び、その製品に関連するサイバーセキュリティ上の問題を調べる(安全かつ信頼性の高い食品製造を確保する方法など)。

数学の発展課題

このレッスンでは、物体を色に応じて分類する仕分け装置を制作しました。機械学習は、色よりも複雑な特性によって物体を仕分けする機械に使用されているテクニックです。このような装置の開発では、機械学習プロセスの1つである「分類」が使われています。
数学スキルの向上を取り入れ、機械学習プロセスの1つである分類を詳しく取り上げたい場合は、以下の課題に取り組ませてください:

  • 仕分けできる様々な物体(石、果物、ブレスレットなど)を集めて、観察できる質的・量的な違いをまとめたデータ表を生成する。
  • 観察できる様々な特性のうち、それぞれのカテゴリーの物体を理想的なものと理想的でないもの(重量、色、大きさ、傷など)に仕分けするのに利用できるものを特定する。
  • ロボットで大きさや重量など追加の特性を用いた仕分けが可能になるよう、新しい仕分けシステムのデザインとプログラミングアルゴリズムを提案し、可能であれば実際に制作する。

組み立てのヒント

組み立てのアイデア
生徒が下のリンクからいくつか例を選び、組み立てる時間を設けてください。
選んだシステムの仕組みについて考えるよう促し、課題設定に対する解決策にどのように生かせるかブレインストーミングをしてもらいます。

テストのヒント
生徒にテストツールとテスト手順を自分たちで設計し、最適なものを選ぶよう促します。
生徒がテストを準備する際に以下のヒントをあげるとよいでしょう:

  • 仕分け装置が物を置くべき場所に印をつけます。
  • カップまたは容器を使って仕分けされた物を入れます。
  • 結果や考察を記録するチェック表を作成します。
  • 予測内容と実際の結果を比較し、制作した装置の精度を評価します。
  • テストを3回以上繰り返してください。

製作例
課題設定の条件を満たす製作例です:

sorting-machine-solution-bi-cover
Sorting-Machine-Solution-Cover

プログラミングのヒント

EV3 MicroPython プログラム例

#!/usr/bin/env pybricks-micropython

from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor, TouchSensor, ColorSensor
from pybricks.parameters import (Port, Button, Color, ImageFile,
                                 SoundFile)
from pybricks.tools import wait

# The Color Squares are red, green, blue, or yellow.
POSSIBLE_COLORS = (Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW)

# Configure the belt motor with default settings.  This motor drives
# the conveyor belt.
belt_motor = Motor(Port.D)

# Configure the feed motor with default settings.  This motor ejects
# the Color Squares.
feed_motor = Motor(Port.A)

# Set up the Touch Sensor.  It is used to detect when the belt motor
# has moved the sorter module all the way to the left.
touch_sensor = TouchSensor(Port.S1)

# Set up the Color Sensor.  It is used to detect the color of the Color
# Squares.
color_sensor = ColorSensor(Port.S3)

# This is the main part of the program.  It is a loop that repeats
# endlessly.
#
# First, it moves the 2 motors to their correct starting positions.
# Second, it waits for you to scan and insert up to 8 Color Squares.
# Finally, it sorts them by color and ejects them in their correct
# positions.
#
# Then the process starts over, so you can scan and insert the next set
# of Color Squares.
while True:
    # Initialize the feed motor.  This is done by running the motor
    # forward until it stalls.  This means that it cannot move any
    # further.  From this end point, the motor rotates backward by 180
    # degrees.  This is the starting position.
    feed_motor.run_until_stalled(120)
    feed_motor.run_angle(450, -180)

    # Initialize the conveyor belt motor.  This is done by first
    # running the belt motor backward until the Touch Sensor is
    # pressed.  Then the motor stops and the angle is reset to "0."  
    # This means that when it rotates backward to "0" later on, it
    # returns to this starting position.
    belt_motor.run(-500)
    while not touch_sensor.pressed():
        pass
    belt_motor.stop()
    wait(1000)
    belt_motor.reset_angle(0)

    # Clear all the contents from the Display.
    brick.display.clear()

    # Scanning a Color Square stores the color in a list.  The list is
    # empty to start.  It will grow as colors are added to it.
    color_list = []

    # This loop scans the colors of the objects.  It repeats until 8
    # objects are scanned and placed in the chute.  This is done by
    # repeating the loop while the length of the list is less than 8.
    while len(color_list) < 8:
        # Display an arrow that points to the Color Sensor.
        brick.display.image(ImageFile.RIGHT)

        # Display how many Color Squares have been scanned so far.
        brick.display.text(len(color_list))

        # Wait until the Center Button is pressed or a Color Square is
        # scanned.
        while True:
            # Store "True" if the Center Button is pressed or "False"
            # if not.
            pressed = Button.CENTER in brick.buttons()
            # Store the color measured by the Color Sensor.
            color = color_sensor.color()
            # If the Center Button is pressed or one of the possible
            # colors is detected, break out of the loop.
            if pressed or color in POSSIBLE_COLORS:
                break

        if pressed:
            # If the button was pressed, end the loop early.  It will
            # no longer wait for any Color Squares to be scanned and
            # added to the chute.
            break
        else:
            # Otherwise, a color was scanned, so it is added (appended)
            # to the list.
            brick.sound.beep(1000, 100, 100)
            color_list.append(color)

            # It should not register the same color again if it is
            # still looking at the same Color Square.  So, before
            # continuing, wait until the sensor no longer sees the
            # Color Square.
            while color_sensor.color() in POSSIBLE_COLORS:
                pass
            brick.sound.beep(2000, 100, 100)

            # Display an arrow pointing down and wait 2 seconds to
            # allow some time to slide the Color Square into the
            # motorized chute.
            brick.display.image(ImageFile.BACKWARD)
            wait(2000)

    # Play a sound and display an image to indicate that scanning is
    # complete.
    brick.sound.file(SoundFile.READY)
    brick.display.image(ImageFile.EV3)

    # Now sort the bricks using the list of colors that have been
    # stored.  Do this by looping over each color in the list.
    for color in color_list:

        # Wait for 1 second between each sorting action.
        wait(1000)

        # Run the conveyor belt motor to the position that corresponds
        # to the stored color.
        if color == Color.BLUE:
            brick.sound.file(SoundFile.BLUE)
            belt_motor.run_target(500, 10)
        elif color == Color.GREEN:
            brick.sound.file(SoundFile.GREEN)
            belt_motor.run_target(500, 132)
        elif color == Color.YELLOW:
            brick.sound.file(SoundFile.YELLOW)
            belt_motor.run_target(500, 360)
        elif color == Color.RED:
            brick.sound.file(SoundFile.RED)
            belt_motor.run_target(500, 530)

        # Now that the conveyor belt is in the correct position, eject
        # the colored object.
        feed_motor.run_angle(1500, 90)
        feed_motor.run_angle(1500, -90)

職業適性

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

  • 農業及び園芸(農業技術者)

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

学習評価

この学習におけるルーブリックの例
次のルーブリックを参考に、評価規準や判定基準を作成しましょう。

  1. 課題を部分的にこなした。
  2. 課題を十分にこなした。
  3. 期待を上回る達成度であった。

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

  • 生徒は優先される条件と妥協できる点を考え、複数の設計案を評価することができる。
  • 自主的に、実用的で独創的な解決方法を開発している。
  • 生徒は、自分のアイデアをはっきりとわかりやすく伝えることができる。

自己評価
生徒たちが十分な性能データを収集できたら、それぞれの解決方法について考察するよう促します。
次のような質問をするとよいでしょう:

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

解決方法を改善する方法を2つ考えて記録するよう促してください。

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

教師用サポート

学習内容:

  • 設計プロセスを用いて実生活に基づいた問題を解決する

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

仕分けされた物を入れるカップまたは容器
場所に印をつけるテープ

 情報(共通教科):
情報Ⅰ 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-ア〜イ
農業:農業と情報 2-(1)-ア、(3)-イ
工業:第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

生徒用資料

生徒用ワークシート

オンラインの HTMLページまたは印刷可能なPDFのいずれかとしてダウンロード、表示、共有いただけます。