분류 기계 만들기
레고® 부품의 색상을 적어도 세 가지 이상 구분하고 별개의 위치에 분류할 수 있는 기계를 디자인하고 조립하고 프로그래밍하세요.
수업 계획
준비
- 교사용 자료를 읽으세요.
- 필요에 따라 EV3 랩 소프트웨어 또는 EV3 프로그래밍 앱의 시작하기 자료를 이용해 수업을 계획하세요. 학생들이 레고® 마인드스톰® 에듀케이션 EV3와 친숙해지는 데 도움이 될 것입니다.
관심유도(30분)
- 아래의 토의 시작 섹션에 제시된 아이디어를 사용해 학생들에게 이 프로젝트에 대해 논의를 시작하게 하세요.
- 프로젝트를 설명하세요.
- 학생들이 두 명씩 팀을 이루게 하세요.
- 학생들에게 브레인스토밍을 위한 시간을 주세요.
탐구(30분)
- 학생들에게 여러 개의 프로토타입을 만들게 하세요.
- 조립과 프로그래밍을 모두 탐구하게 하세요.
- 각 팀별로 2가지 솔루션을 만들어 테스트하게 하세요.
- 학생들에게 분류한 물체를 담기 위한 컵이나 다른 용기를 나눠주세요.
설명(60분)
- 학생들이 생각한 솔루션들을 테스트하고 가장 최선의 솔루션을 고르게 하세요.
- 학생들에게 자신만의 테스트표를 만들게 하세요.
- 팀별로 프로젝트를 최종 완성하고 작업을 문서화하기 위해 필요한 자료들을 수집할 시간을 주세요.
정교화(60분)
- 학생들에게 최종 보고서를 작성하기 위한 시간을 주세요.
- 각 팀별로 결과를 발표하는 공유 세션을 진행하세요.
평가
- 학생 개개인의 성과에 대한 피드백을 제공하세요.
- 제공된 활동평가표를 사용하면 프로세스를 간소화할 수 있습니다.
토의 시작
분류 기계는 크기, 무게, 재질 또는 색상 등의 속성에 따라 물체를 분류할 수 있습니다. 즉, 다양한 센서를 사용하여 이러한 속성을 측정하고 각각의 물체를 올바른 범주로 분류합니다.
적극적으로 브레인스토밍을 하게 하세요.
학생들에게 이러한 질문에 대해 생각해보게 하세요.
- 어떤 색상을 분류할 것인가요?
- 어떤 크기의 물체를 분류할 것인가요?
- 물체를 움직이려면 어떤 유형의 전동 메커니즘을 사용해야 하나요?
- 기계가 어떻게 다른 위치를 감지할 수 있나요?
- 기계가 정확하고 반복 가능한 동작을 수행하게 하려면 어떤 디자인 기능이 필요할까요?
학생들에게 최초의 아이디어를 문서화하게 하고, 첫 번째 프로토타입에 사용할 솔루션을 선택한 이유를 물어보세요. 그리고 프로젝트가 진행되는 동안 자신의 아이디어를 어떻게 평가할 것인지를 설명해보라고 하세요. 이렇게 함으로써 학생들이 검토와 수정을 거치는 과정에서 솔루션을 평가할 때 활용 가능한 구체적인 정보를 얻을 수 있고 솔루션이 효과적인지 여부를 판단할 수 있습니다.
확장 요소
국어교과 확장
옵션 1
국어교과 기술 개발의 통합을 위해 학생들에게 다음 과제를 부여하세요.
- 작성해 두었던 작업, 스케치 또는 사진을 이용해 디자인 프로세스를 요약하고 최종 보고서를 작성하세요.
- 최초의 아이디어부터 완료된 프로젝트까지 디자인 프로세스를 보여 주는 동영상을 만드세요.
- 프로그램에 대한 프레젠테이션을 만드세요.
- 프로젝트와 현실 세계의 시스템을 연관지어 살펴보고 학생들의 작품을 기반으로 만들어낼 수 있는 새로운 발명품을 설명하기 위한 프레젠테이션을 제작하세요.
옵션 2
이번 수업에서는 학생들이 분류 기계를 만들었습니다. 분류 기계는 대규모적인 제품의 생산과 유통의 관리를 요하는 식품 및 농업 업계에서 널리 사용되는 장비입니다.
국어교과 기술 개발의 통합을 위해 학생들에게 다음 과제를 부여하세요.
- 현지 또는 인근 지역을 기준으로 식품 및 농업 업계의 규모가 얼마나 되는지 설명해보세요.
- 소규모 기업/농장이든 전국적 또는 전 세계적 수준의 생산업체이든, 규모를 정하여 특정한 식품 또는 농산물 제품을 선택하고, 식품 및 농업 업계과 관련된 사이버 보안 문제를 조사하세요(예: 안전하고 신뢰할 수 있는 식품 생산을 보장하는 방법).
수학교과 확장
이번 수업에서는 학생들이 색상에 따라 물체를 분류하는 로봇 분류 기계를 만들었습니다. 기계학습 기법은 엔지니어들로 하여금 단순한 색상 이상의 복잡한 차이 요소에 따라 물체를 분류하는 기계를 만들 수 있도록 해 주며, 이를 위해 개발자들이 이른바 분류라 불리는 기계학습 프로세스를 사용합니다.
수학 능력 개발 활동을 통합하고 이른바 분류 기계학습 프로세스를 탐구하는 차원에서 학생들에게 다음 과제를 부여하세요.
- 분류 가능한 몇몇 물체(예: 바위, 각종 과일, 팔찌)를 모으고, 물체의 구별을 위해 관찰 가능한 정성적/정량적 차이가 나열되도록 데이터 표에 값을 채우세요.
- 관찰 가능한 차이 요소 중 어떠한 것들이 단일 범주의 물체를 분류함에 있어 “바람직한” 또는 “바람직하지 않은” 기준에 해당하는지를 정의하세요.
- 로봇이 크기 또는 무게와 같은 추가적 특성에 따라 분류를 할 수 있도록 하기 위해 로봇에 적용할 새로운 분류 설계 및 프로그래밍 알고리즘을 제안하고, 가능하다면 조립해보세요.
조립 팁
조립 아이디어
학생들에게 아래의 링크를 참조하여 몇 가지의 예시 모델을 조립해 볼 기회를 주세요. 이러한 시스템이 어떻게 작동하는지 살펴보고 어떻게 디자인 개요에 대한 솔루션으로 이어질 수 있을지에 대해 브레인스토밍하게 하세요.
테스트 팁
학생들에게 최상의 솔루션을 선택하기 위한 테스트를 손수 준비하고 절차를 설계하게 하세요. 학생들이 테스트를 준비하는 데 아래의 팁이 도움이 될 것입니다.
- 기계가 물체를 내려놓아야 할 지점에 위치 표시를 합니다.
- 분류된 물체를 컵이나 다른 용기에 담습니다.
- 테스트 표를 만들어 관찰 결과를 기록합니다.
- 예상 결과를 실제 결과와 비교하여 기계의 정밀도를 평가합니다.
- 적어도 세 번 이상 테스트를 반복합니다.
샘플 솔루션
디자인 브리핑 기준을 충족하는 샘플 솔루션:
코딩 팁
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)
진로 연결
이 수업이 즐거웠던 학생이라면 아마 다음과 같은 진로 개발 영역에 대해서도 관심이 있을 것입니다.
- 농업 및 원예(농기계 및 기술)
- 제조 및 공학(기계 기술)
평가 기회
교사 관찰 체크리스트
교사의 요구 사항에 맞는 척도를 만드세요(아래의 예 참조).
- 부분적으로 달성됨
- 충분히 달성됨
- 초과 달성됨
다음의 성공 기준을 사용해 학생들의 진척도를 평가하세요.
- 학생들이 우선 순위 기준과 상충 관계를 고려하여 경쟁 디자인 솔루션을 평가할 수 있다.
- 학생들이 자율적인 태도로 창의적인 솔루션을 개발한다.
- 학생들이 자신의 아이디어를 명확히 전달할 수 있다.
자기 평가
학생들이 어느 정도의 성과 데이터를 수집한 다음, 각자의 솔루션에 대해 깊이 생각해 볼 시간을 주세요. 다음과 같은 질문이 도움이 될 것입니다.
- 솔루션이 디자인 브리핑의 기준을 충족하나요?
- 기계의 움직임을 더 정확하게 만들 수 있나요?
- 다른 사람들은 이 문제를 어떤 방식으로 해결했나요?
학생들에게 솔루션을 개선할 두 가지 방법을 브레인스토밍하고 문서화하게 하세요.
동료 피드백
각 그룹이 자신과 타인의 프로젝트를 평가하는 동료 검토 프로세스를 진행하게 하세요. 이러한 검토 프로세스는 학생들이 건설적인 피드백을 제공하는 기술을 개발하고 그들의 분석 기술을 연마하며, 주장을 뒷받침하기 위해 객관적 데이터를 사용하는 능력을 향상하는 데 도움이 됩니다.