MINDSTORMS® EV3 코어 세트

픽 앤 플레이스 로봇 만들기

한 위치에서 물체를 집어들어 다른 위치로 옮겨 놓을 수 있는 로봇 시스템을 디자인하고 조립하고 프로그래밍하세요.

120분 이상
중급
중3-고3학년
3_Make_a_Pick_and_Place_Robot

수업 계획

준비
- 교사용 자료를 읽으세요.
- 필요에 따라 EV3 랩 소프트웨어 또는 EV3 프로그래밍 앱의 시작하기 자료를 이용해 수업을 계획하세요. 학생들이 레고® 마인드스톰® 에듀케이션 EV3와 친숙해지는 데 도움이 될 것입니다.

관심유도(30분)
- 아래의 토의 시작 섹션에 제시된 아이디어를 사용해 학생들에게 이 프로젝트에 대해 논의를 시작하게 하세요.
- 프로젝트를 설명하세요.
- 학생들이 두 명씩 팀을 이루게 하세요.
- 학생들에게 브레인스토밍을 위한 시간을 주세요.

탐구(30분)
- 학생들에게 여러 개의 프로토타입을 만들게 하세요.
- 조립과 프로그래밍을 모두 탐구하게 하세요.
- 각 팀별로 2가지 솔루션을 만들어 테스트하게 하세요.
- 대형 그래프 용지와 색연필 또는 마커를 학생들에게 나눠주세요.

설명(60분)
- 학생들이 생각한 솔루션들을 테스트하고 가장 최선의 솔루션을 고르게 하세요.
- 학생들에게 자신만의 테스트표를 만들게 하세요.
- 팀별로 프로젝트를 최종 완성하고 작업을 문서화하기 위해 필요한 자료들을 수집할 시간을 주세요.

정교화(60분)
- 학생들에게 최종 보고서를 작성하기 위한 시간을 주세요.
- 각 팀별로 결과를 발표하는 공유 세션을 진행하세요.

평가
- 학생 개개인의 성과에 대한 피드백을 제공하세요.
- 제공된 활동평가표를 사용하면 프로세스를 간소화할 수 있습니다.

토의 시작

픽 앤 플레이스 로봇은 사전에 지정된 위치를 기준으로 물체를 옮길 수 있도록 설계된 일종의 산업용 로봇입니다. 이 로봇은 물체의 모양, 무게 및 파손 가능성에 기초하여 여러 가지 유형의 집게를 사용함으로써 물체를 안전하고 정밀하게 집어들고 다시 내려놓을 수 있습니다.

Engage-Pick-and-Place-Robot-Cover

적극적으로 브레인스토밍을 하게 하세요.

학생들에게 이러한 질문에 대해 생각해보게 하세요.

  • 픽 앤 플레이스 로봇이 무엇이며 어디에 사용되나요?
  • 물체를 집어들기 위해 어떤 유형의 전동 메커니즘을 사용할 수 있을까요?
  • 어떻게 해야 로봇이 물체를 옮길 수 있나요?
  • 어떻게 해야 로봇이 물체를 다른 위치에 조심스럽고 정확하게 내려놓을 수 있나요?

학생들에게 최초의 아이디어를 문서화하게 하고, 첫 번째 프로토타입에 사용할 솔루션을 선택한 이유를 물어보세요. 그리고 프로젝트가 진행되는 동안 자신의 아이디어를 어떻게 평가할 것인지를 설명해보라고 하세요. 이렇게 함으로써 학생들이 검토와 수정을 거치는 과정에서 솔루션을 평가할 때 활용 가능한 구체적인 정보를 얻을 수 있고 솔루션이 효과적인지 여부를 판단할 수 있습니다.

확장 요소

국어교과 확장

국어교과 기술 개발의 통합을 위해 학생들에게 다음 과제를 부여하세요.

옵션 1

  • 작성해 두었던 작업, 스케치 또는 사진을 이용해 디자인 프로세스를 요약하고 최종 보고서를 작성하세요.
  • 최초의 아이디어부터 완료된 프로젝트까지 디자인 프로세스를 보여 주는 동영상을 만드세요.
  • 프로그램에 대한 프레젠테이션을 만드세요.
  • 프로젝트와 현실 세계의 시스템을 연관지어 살펴보고 학생들의 작품을 기반으로 만들어낼 수 있는 새로운 발명품을 설명하기 위한 프레젠테이션을 제작하세요.

옵션 2
국어교과 기술 개발의 통합을 위해 학생들에게 다음 과제를 부여하세요.

  • 약물과 백신을 준비하는 데 사용되는 여러 가지 기계를 조사하고, 자동화된 제약 공장의 이점과 단점을 중심으로 의약품 제조를 위한 자동화된 실험실의 작동 방식에 대한 해설 문구를 작성하세요.
  • 데이터 보호의 관점에서, 다음 사항을 고려하는 가운데 잠재적으로 수십억 달러의 가치가 있고 온라인 시스템에 저장되어 있는 의약품 “제조법”의 저작권에 관한 우려 사항을 논의하세요.
  • 회사가 약물 데이터를 잃어버릴 경우의 잠재적 결과
  • 민감한 정보를 온라인 시스템에 저장함으로 인한 이점

수학교과 확장

이번 수업에서 학생들이 만든 픽 앤 플레이스 로봇을 살펴보세요. 대다수의 자동화 시스템이 그러하듯이 이 로봇 또한 성능의 평가와 개선을 필요로 하겠죠? 기계학습이라는 프로세스를 사용하면 픽 앤 플레이스 로봇이 자신의 성능을 측정하고 성능의 유지 또는 개선을 위한 수정을 가할 수 있습니다.

수학 능력 개발 활동을 통합하고 기계학습에 대해 알아보는 차원에서 학생들에게 다음 과제를 부여하세요.

  • 정확도와 정밀도라는 용어를 정의하고, 로봇 프로젝트에 이러한 정의를 적용하세요.
  • 시스템의 정확도와 정밀도에 관계된 변수를 식별하세요(예: 로봇의 속도가 정확도, 정밀도 또는 둘 다에 영향을 미칠 수 있음).
  • 선택한 변수가 정확도, 정밀도 또는 둘 다에 영향을 미치는지 여부를 테스트하기 위한 미니 실험을 설정하세요.

조립 팁

조립 아이디어
학생들에게 아래의 링크를 참조하여 몇 가지의 예시 모델을 조립해 볼 기회를 주세요. 이러한 시스템이 어떻게 작동하는지 살펴보고 어떻게 디자인 개요에 대한 솔루션으로 이어질 수 있을지에 대해 브레인스토밍하게 하세요.

테스트 팁
학생들에게 최상의 솔루션을 선택하기 위한 테스트를 손수 준비하고 절차를 설계하게 하세요. 학생들이 테스트를 준비하는 데 아래의 팁이 도움이 될 것입니다.

  • 그래프 용지 위에 기계의 위치를 표시하여 매번 테스트를 수행할 때마다 기계를 같은 위치에 배치할 수 있도록 합니다.
  • 눈금선을 사용하여 1cm x 1cm 정사각형을 식별하여 매 테스트마다 수행 결과를 기록하는 데 도움이 되도록 합니다.
  • 색연필이나 마커를 이용해 로봇이 물체를 내려놓을 것으로 예상되는 위치와 실제 위치를 표시합니다.
  • 테스트 표를 만들어 관찰 결과를 기록합니다.
  • 예상 결과를 실제 결과와 비교하여 로봇의 정밀도를 평가합니다.
  • 적어도 세 번 이상 테스트를 반복합니다.

샘플 솔루션
디자인 브리핑 기준을 충족하는 샘플 솔루션:

pick-and-place-solution-bi-cover
Pick-and-Place-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, Stop, Direction, Button,
                                 ImageFile, SoundFile)
from pybricks.tools import wait

# Configure the gripper motor with default settings.
gripper_motor = Motor(Port.A)

# Configure the elbow motor.  It has an 8-tooth and a 40-tooth gear
# connected to it.  Set the motor direction to counterclockwise, so
# that positive speed values make the arm move upward.
elbow_motor = Motor(Port.B, Direction.COUNTERCLOCKWISE, [8, 40])

# Configure the motor that rotates the base.  It has a 12-tooth and a
# 36-tooth gear connected to it.  Set the motor direction to
# counterclockwise, so that positive speed values make the arm move
# away from the Touch Sensor.
base_motor = Motor(Port.C, Direction.COUNTERCLOCKWISE, [12, 36])

# Limit the elbow and base accelerations.  This results in very smooth
# motion, like that of an industrial robot.
elbow_motor.set_run_settings(60, 120)
base_motor.set_run_settings(60, 120)

# Set up the Touch Sensor.  It is used to detect when the base has
# moved to its starting position.
touch_sensor = TouchSensor(Port.S1)

# Set up the Color Sensor.  It is used in Reflected Light Intensity
# Mode to detect the white beam when the elbow is in its starting
# position.
color_sensor = ColorSensor(Port.S3)

# Initialize the elbow.  This is done by first moving down for 1 second
# and then slowly moving up until the Color Sensor detects the white
# beam.  Then the motor stops, holds its position, and resets the angle
# to "0."  This means that when it rotates backward to "0" later on, it
# returns to this starting position.
elbow_motor.run_time(-30, 1000)
elbow_motor.run(15)
while color_sensor.reflection() < 30:
    wait(10)
elbow_motor.stop(Stop.HOLD)
elbow_motor.reset_angle(0)

# Initialize the base.  This is done by first running the base motor
# counterclockwise until the Touch Sensor is pressed.  Then the motor
# stops, holds its position, and resets the angle to "0."  This means
# that when it rotates backward to "0" later on, it returns to this
# starting position.
base_motor.run(-60)
while not touch_sensor.pressed():
    wait(10)
base_motor.stop(Stop.HOLD)
base_motor.reset_angle(0)

# Initialize the gripper.  This is done by running the motor forward
# until it stalls.  This means that it cannot move any further.  From
# this closed gripper position, the motor rotates backward by 90
# degrees, so the gripper opens up.  This is the starting position.
gripper_motor.run_until_stalled(200, Stop.COAST, 50)
gripper_motor.reset_angle(0)
gripper_motor.run_target(200, -90)

def robot_pick(position):
    # This function rotates the base to the pick up position.  There,
    # it lowers the arm, closes the gripper, and raises the arm to pick
    # up the wheel stack.
    base_motor.run_target(60, position, Stop.HOLD)
    elbow_motor.run_target(60, -45)
    gripper_motor.run_until_stalled(200, Stop.HOLD, 50)
    elbow_motor.run_target(60, 0, Stop.HOLD)

def robot_release(position):
    # This function rotates the base to the drop-off position.  There,
    # it lowers the arm, opens the gripper to release the wheel stack,
    # and raises the arm again.
    base_motor.run_target(60, position, Stop.HOLD)
    elbow_motor.run_target(60, -45)
    gripper_motor.run_target(200, -90)
    elbow_motor.run_target(60, 0, Stop.HOLD)

# Define the 3 destinations for picking up and dropping off the wheel
# stacks.
LEFT = 200
CENTER = 100
RIGHT = 0

# Rotate the base to the center.
base_motor.run_target(60, CENTER, Stop.HOLD)

# This is the main part of the program.  It is a loop that repeats
# endlessly.
#
# First, the robot waits until the Up or Down Button is pressed.
# Second, the robot waits until the Center Button is pressed.
# Finally, the robot picks up the wheel stack and drops it off in the
# center.
#
# Then the process starts over, so the robot can pick up another wheel
# stack.
while True:

    # Display a question mark to indicate that the robot should await
    # instructions.
    brick.display.image(ImageFile.QUESTION_MARK)

    # Wait until the Up or Down Button is pressed.
    while True:
        # First, wait until any button is pressed.
        while not any(brick.buttons()):
            wait(10)
        # Then store which button was pressed.
        button = brick.buttons()[0]
        # If the Up or Down Button was pressed, break out of the loop.
        if button in (Button.UP, Button.DOWN):
            break

    # Play a sound and display an arrow to show where the arm will move.
    brick.sound.file(SoundFile.AIR_RELEASE)
    if button == Button.UP:
        brick.display.image(ImageFile.FORWARD)
    elif button == Button.DOWN:
        brick.display.image(ImageFile.BACKWARD)

    # Wait until the Center Button is pressed, then display a check
    # mark to indicate that the instruction has been accepted.
    while not Button.CENTER in brick.buttons():
        wait(10)
    brick.display.image(ImageFile.ACCEPT)

    # Pick up the wheel stack. Depending on which button was pressed,
    # move left or right.
    if button == Button.UP:
        robot_pick(RIGHT)
    elif button == Button.DOWN:
        robot_pick(LEFT)

    # Drop off the wheel stack in the center.
    robot_release(CENTER)

진로 연결

이 수업이 즐거웠던 학생이라면 아마 다음과 같은 진로 개발 영역에 대해서도 관심이 있을 것입니다.

  • 정보 기술(컴퓨터 프로그래밍)
  • 제조 및 공학(기계 기술)

평가 기회

교사 관찰 체크리스트
교사의 요구 사항에 맞는 척도를 만드세요(아래의 예 참조).

  1. 부분적으로 달성됨
  2. 충분히 달성됨
  3. 초과 달성됨

다음의 성공 기준을 사용해 학생들의 진척도를 평가하세요.

  • 학생들이 우선 순위 기준과 상충 관계를 고려하여 경쟁 디자인 솔루션을 평가할 수 있다.
  • 학생들이 자율적인 태도로 창의적인 솔루션을 개발한다.
  • 학생들이 자신의 아이디어를 명확히 전달할 수 있다.

자기 평가
학생들이 어느 정도의 성과 데이터를 수집한 다음, 각자의 솔루션에 대해 깊이 생각해 볼 시간을 주세요. 다음과 같은 질문이 도움이 될 것입니다.

  • 솔루션이 디자인 브리핑의 기준을 충족하나요?
  • 로봇의 움직임을 더 정확하게 만들 수 있나요?
  • 다른 사람들은 이 문제를 어떤 방식으로 해결했나요?

학생들에게 솔루션을 개선할 두 가지 방법을 브레인스토밍하고 문서화하게 하세요.

동료 피드백
각 그룹이 자신과 타인의 프로젝트를 평가하는 동료 검토 프로세스를 진행하게 하세요. 이러한 검토 프로세스는 학생들이 건설적인 피드백을 제공하는 기술을 개발하고 그들의 분석 기술을 연마하며, 주장을 뒷받침하기 위해 객관적 데이터를 사용하는 능력을 향상하는 데 도움이 됩니다.

교사 지원

학생 과제:

  • 디자인 프로세스를 사용해 현실 세계의 문제를 해결하세요

레고® 마인드스톰® 에듀케이션 EV3 코어 세트

대형 그래프 용지 또는 눈금선이 있는 용지
색연필 또는 마커

2015 개정 교육과정
기술 활용[12기가05-04]
-기술 혁신을 위한 창의 공학 설계를 이해하고, 제품을 구상하고 설계한다.
추상화와 알고리즘[12정보03-03]
-복잡하고 어려운 문제를 해결 가능한 작은 단위의 문제로 분해하고 모델링 한다.
프로그래밍[12정보04-09]
-다양한 학문 분야의 문제 해결을 위한 알고리즘을 협력하여 설계한다.
컴퓨팅 시스템[12정과04-03]
-문제 해결을 위한 피지컬 컴퓨팅 시스템을 설계하고 구성한다.

학생용 자료

학생용 워크시트

온라인 HTML 페이지 또는 인쇄 가능한 PDF 형식으로 다운로드하거나 살펴보거나 공유하세요.