SPIKE™ Prime with Python

AI 개념의 시작: 근육 스트레칭과 리스트

리스트를 사용하여 어떤 동작을 할지를 정합니다.

90-120분
중급
초3-중3학년

탐색을 위한 질문

• 피트니스 트레이너가 운동 목록을 만들려 하는데 어떻게 해야 할까요?

준비

• 스파이크 프라임 허브가 충전되어 있는지 확인하세요(특히 블루투스로 연결되어 있는 경우).

관심유도

(그룹 활동, 15분)

스트레칭에 관한 대화를 통해 학생들의 관심을 불러일으켜주세요.

근육을 스트레칭하는 여러 가지 방법에 대해 자유로이 이야기를 나눠보세요. 학생들이 눈으로 직접 볼 수 있도록 스트레칭 동작의 이미지나 비디오 클립을 보여주는 것도 괜찮겠죠.

이제 학생들이 자리에서 일어나 근육 스트레칭을 해볼 차례입니다. 일종의 리더 따라하기 게임 형식으로, 시범자가 취하는 동작을 정확히 따라해보라고 하세요. 교사가 앞에 서서 시범을 보여도 좋고 교실 안에서 이동하며 지도를 해줘도 좋습니다. 시범자 역할을 할 학생을 선택하고, 얼마 후 다른 학생에게 역할을 넘겨주는 방법도 고려해보세요.

자, 이제 스트레칭까지 해 봤으니, 몸이 어떤 식으로 움직이는지에 대해 한번 생각을 해볼까요? 방금 사용했던 동작이나 근육의 리스트를 어떻게 만들고 범주화할 것인지를 토의에 부치세요.

탐구

(소규모 그룹, 45분)

학생들이 근육을 움직이고 스트레칭하는 다양한 여러 가지 방법을 조사합니다.

학생들에게 스파이크 앱의 조립 섹션을 찾아보라고 하세요. 요가 링 모델의 조립 가이드가 제시되어 있을 것입니다.  학생들에게 모델을 조립하게 하세요. 조립 가이드는 https://education.lego.com/en-us/support/spike-prime/building-instructions 페이지에서도 볼 수 있습니다.   

학생들에게 파이썬 프로그래밍 캔버스에서 새 프로젝트를 열게 하세요. 혹시 프로그래밍 영역에 이미 코드가 들어 있다면 일단 그것부터 다 지우고, 허브를 연결하게 하세요.  

이제 학생들과 함께 동작 센서의 값을 리스트의 변수로 사용하여 프로그램을 만들어볼 것입니다. 학생들에게 지식 베이스 페이지에서 동작 센서를 찾아보라고 하세요. up_face 아래에서 동작 센서의 방향과 관련된 값을 참조할 수 있을 것입니다. 학생들에게 시간을 주고, 리스트의 다양한 옵션을 사용하여 프로그램을 시험해보게 하세요.

샘플 프로그램:

from hub import motion_sensor
import runloop

async def main():
    # 허브의 방향을 이용해 리스트를 만듭니다
    yoga_moves = [motion_sensor.FRONT, motion_sensor.BACK, motion_sensor.LEFT, motion_sensor.RIGHT]

    orientation = motion_sensor.up_face()

    while True:        
        await runloop.until(lambda: motion_sensor.up_face() != orientation)
        orientation = motion_sensor.up_face()
        
        if orientation == yoga_moves[3]:
            print('Good Job!')
            await runloop.sleep_ms(1000)

runloop.run(main())

참고: 스피커 사이드는 motion_sensor.FRONT이고, USB 사이드는 motion_sensor.BACK이고, A, C, E 포트 사이드는 motion_sensor.LEFT이고, B, D, F 포트 사이드는 motion_sensor.ROGHT이고, 라이트 매트릭스는 motion_sensor.TOP이고, 배터리 사이드는 motion_sensor.BOTTOM입니다.

학생들과 프로그램에 대해 토의를 진행하세요. 학생들이 리스트의 위치 또는 인덱스 값을 식별할 수 있어야 합니다. 예를 들어, motion_sensor.LEFT의 인덱스 값은 3이고, motion_sensor.BAXK의 인덱스 값은 1입니다. 파이썬에서 인덱스 값이 항상 0부터 시작된다는 것을 학생들에게 설명해주세요.

요가 루틴 만들기
학생들에게 요가 루틴을 만들어보라고 하세요. 방법을 설명하자면, 우선 옵션의 리스트를 만들고, 선택된 순서대로 동작을 콘솔에 출력하면 됩니다.

학생들에게 리스트의 동작이 몇 가지 포함되도록 프로그램을 수정하게 하세요. 다른 팀이 요가 루틴을 따라할 수 있도록 동작의 리스트가 콘솔에 출력되어야 합니다. 학생들에게 시간을 주고, 각자의 동작을 연습하게 하세요.

샘플 프로그램:

from hub import motion_sensor, light_matrix
import runloop

async def main():
    # 허브의 방향을 이용해 리스트를 만듭니다
    yoga_moves = [motion_sensor.FRONT, motion_sensor.BACK, motion_sensor.LEFT, motion_sensor.RIGHT]

    # 루틴을 따릅니다
    print('LEFT')
    print('RIGHT')
    print('BACK')
    print('FRONT')
    print('READY GO!')
    orientation = motion_sensor.up_face()
    
    while True:        
        await runloop.until(lambda: motion_sensor.up_face() != orientation)
        orientation = motion_sensor.up_face()
        if orientation == yoga_moves[2]:
            print('Left Side')
            light_matrix.show_image(light_matrix.IMAGE_ARROW_W)
        elif orientation == yoga_moves[3]:
            print('Right Side')
            light_matrix.show_image(light_matrix.IMAGE_ARROW_E)
        elif orientation == yoga_moves[1]:
            print('Back')
            light_matrix.show_image(light_matrix.IMAGE_ARROW_N)
        elif orientation == yoga_moves[0]:
            print('Front')
            light_matrix.show_image(light_matrix.IMAGE_ARROW_S)

runloop.run(main())

학생들에게 동작을 뒤섞어서 루틴에 몇 가지 단계가 들어가게 만들어보라고 하세요.

무작위로 동작 추출하기
학생들이 루틴에 따라 운동을 마치는 대로, 코드의 행 하나를 무작위로 선택하고 예상치 못한 동작이 포함되도록 루틴을 바꿔보라고 하세요.

샘플 프로그램:

from hub import motion_sensor, light_matrix
import runloop
import random

async def main():
    # 허브의 방향을 이용해 리스트를 만듭니다
    yoga_moves = [motion_sensor.FRONT, motion_sensor.BACK, motion_sensor.LEFT, motion_sensor.RIGHT]
    random_move = random.choice(yoga_moves)

    # 루틴을 따릅니다
    print('LEFT')
    print('RIGHT')
    print(random_move)
    print('BACK')
    print('FRONT')
    print(random_move)
    print('READY GO!')

    orientation = motion_sensor.up_face()
    
    while True:
        await runloop.until(lambda: motion_sensor.up_face() != orientation)
        orientation = motion_sensor.up_face()

        if orientation == yoga_moves[2]:
            print('Left Side')
            light_matrix.show_image(light_matrix.IMAGE_ARROW_W)
        elif orientation == yoga_moves[3]:
            print('Right Side')
            light_matrix.show_image(light_matrix.IMAGE_ARROW_E)
        elif orientation == random_move:
            print('Random')
            light_matrix.show_image(light_matrix.IMAGE_SILLY)
        elif orientation == yoga_moves[1]:
            print('Back')
            light_matrix.show_image(light_matrix.IMAGE_ARROW_N)
        elif orientation == yoga_moves[0]:
            print('Front')
            light_matrix.show_image(light_matrix.IMAGE_ARROW_S)

runloop.run(main())

학생들에게 프로그램을 시험해볼 시간을 주고, 코드 행이 무작위로 포함되도록 여러 가지 방법을 써보게 하세요.

설명

(전체 그룹, 15분)

학생들에게 각자의 루틴을 시연해보라고 하고, 프로그램이 어떻게 작동했는지에 대해 이야기를 나누고, 이런 질문을 던져보세요.
• 리스트를 어떻게 사용하여 요가 루틴을 만들었나요?
• 루틴에 무작위로 동작을 추가하자 어떤 일이 일어났나요?
• 아이디어를 내보세요. 프로그램을 어떻게 수정하여 새로운 루틴을 만들 수 있을까요?

다듬기

(소규모 그룹, 25분)

이제 학생들이 리스트와 루틴을 확장하여 새로운 동작을 추가해볼 차례입니다.

학생들에게 몇 가지 새로운 동작이 추가되도록 프로그램을 수정하게 하되, 첫 번째로 동작 센서가 위쪽 또는 아래쪽을 향할 수 있도록 두 개의 옵션을 리스트에 추가해야 한다는 점을 학생들에게 알려주세요. 단, 현재 프로그래밍된 리스트를 변경하지 않고 새로운 동작을 추가해야 합니다(즉, 그저 두 개의 항목을 기존 리스트의 끝에 더해주는 것만으로는 안 됩니다).

학생들에게 insert 코드 행 **list_name.insert(index location, value)**의 의미를 설명해주고, 아래의 샘플 프로그램을 기존 프로그램의 끝에 추가하게 하세요. 뒤이어 학생들이 프로그램을 실행하고 새로 삽입된 행들이 어떤 역할을 하는지를 확인해볼 것입니다.

샘플 프로그램:

from hub import motion_sensor, light_matrix
import runloop

async def main():
    # 허브의 방향을 이용해 리스트를 만듭니다
    yoga_moves = [motion_sensor.FRONT, motion_sensor.BACK, motion_sensor.LEFT, motion_sensor.RIGHT]

    yoga_moves.insert(0, motion_sensor.TOP)
    yoga_moves.insert(1, motion_sensor.BOTTOM)

    orientation = motion_sensor.up_face()

    while True:        
        await runloop.until(lambda: motion_sensor.up_face() != orientation)
    orientation = motion_sensor.up_face()

        if orientation == yoga_moves[0]:
            print('Top')
            light_matrix.show_image(light_matrix.IMAGE_TRIANGLE)
        elif orientation == yoga_moves[1]:
            print('Bottom')
            light_matrix.show_image(light_matrix.IMAGE_SQUARE)

runloop.run(main())

새 값이 리스트의 어느 위치에 추가되었는지를 학생들에게 보여주세요.

뒤이어 각자 자신의 새 요가 루틴을 실행해본 후, 타 그룹의 요가 루틴을 서로 따라해보게 하세요.

del listname[index value] 코드 행을 이용해 리스트에서 항목을 삭제하는 방법을 학생들에게 알려주는 것도 고려해보시고요. 참고로, 이 예제에서는 **del yoga_moves[1]**를 이용해 **motion_sensor.BOTTOM’**을 리스트에서 삭제합니다.

yoga_moves = [motion_sensor.FRONT, motion_sensor.BACK, motion_sensor.LEFT, motion_sensor.RIGHT]
print(yoga_moves)
del yoga_moves[1]
print yoga_moves

평가

(그룹 실습, 10분)

교사 관찰:
학생들과 프로그램에 대해 토의를 진행하세요.
이런 질문을 던져보세요.
• 리스트에 새 요소를 추가하거나 리스트에서 요소를 삭제하려면 어떻게 해야 하나요?
• 리스트를 어떻게 사용하여 요가 계획표를 만들 수 있었나요?
• 리스트와 센서를 어떻게 함께 사용할 수 있었나요?

자기 평가:
학생들에게 다음 질문에 대한 답을 기록장에 적으라고 하세요.
• 오늘 리스트를 사용하여 계획표(요가 루틴 등)를 만드는 과정을 통해 무엇을 알게 되었는가?
• 좋은 팀원의 특성은 무엇이며, 오늘 내가 그중 몇 가지를 보여주었는가?
• 학생들에게 오늘의 시간 관리에 대해 1-3점 척도로 자기 평가를 해보라고 하세요.
• 학생들에게 오늘의 재료(부품) 관리에 대해 1-3점 척도로 자기 평가를 해보라고 하세요.

교사 지원

학생 과제:
• 동작 센서의 값을 리스트의 변수로 사용하여 프로그램을 만듭니다
• 리스트를 사용하여 요가 루틴을 만듭니다

• 학생이 즉각 사용 가능한 상태의 스파이크 프라임 세트
• 스파이크 앱이 설치된 장치
• 학생용 기록장

CSTA
2-CS-02 Design projects that combine hardware and software components to collect and exchange data.
2-AP-10 Use flowcharts and/or pseudocode to address complex problems as algorithms
2-AP-13 Decompose problems and subproblems into parts to facilitate the design, implementation, and review of programs.
2-AP-17 Systematically test and refine programs using a range of test cases.
2-AP-19 Document programs in order to make them easier to follow, test, and debug.