SPIKE™ Prime with Python

AI 개념의 시작: 자전거 교통수단 데이터

수학 함수를 프로그램에 사용하는 방법을 조사합니다

45분
초급
초3-중3학년

탐색을 위한 질문

• 수학 함수를 프로그램에서 어떻게 활용할 수 있을까요?

준비

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

관심유도

(그룹 토의, 5분)

교통수단 삼아 자전거를 타는 것에 대한 대화를 통해 학생들의 관심을 불러일으켜주세요.

자전거를 타고 이곳저곳을 이동한다는 것에 대해 학생들 사이에서 구체적으로 어떤 이야기들이 제기될 수 있을까요? 아울러 자전거 교통의 장단점으로 어떤 것들이 있을까요?

자전거를 탈 수 있는 장소에 대해, 특히 도보나 다른 유형의 교통 수단에 비해 자전거를 타는 것이 더 합당할 것으로 판단되는 장소들에 대해 토의를 진행하고, 필요에 따라 학생들에게 예를 들어보라고 하세요.

탐구

(소규모 그룹, 20분)

학생들이 교통수단으로서의 자전거 타기에 대해 조사를 수행합니다.

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

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

학생들에게 프로그래밍을 이용해 스마트 바이크를 움직일 방법을 생각해보라고 하세요. 자전거가 일정한 속도로 전진할 수 있도록 프로그램을 작성해야 합니다.

샘플 프로그램:

from hub import port
import runloop
import motor_pair

async def main():
    # 모터를 페어링합니다
    motor_pair.pair(motor_pair.PAIR_1, port.C, port.E)
    #move 720 degrees, steering straight, at a velocity of 250 
    await motor_pair.move_for_degrees(motor_pair.PAIR_1, 720, 0, velocity=250)

runloop.run(main())

수학을 이용한 동작 수행
학생들이 자전거 움직이기 프로그램을 마치는 대로 프로그램에 뭔가를 더해서 자전거의 속도를 더 빠르게 또는 느리게 바꿔보라고 하세요. 단, 프로그램에 새로운 움직임을 추가해서는 안 되며, 변수와 수학 함수만을 사용하여 속도를 변경해야 합니다.

사용 가능한 수학 함수를 학생들에게 보여주세요. 모두 학생들이 익혀두어야 할 함수들이며, 흔히 사용하게 될 것입니다. 복잡한 수학 코드 행의 경우 연산 순서를 바르게 지켜야 한다는 점을 학생들에게 상기시켜주세요.

Unit_9_Lesson_2_Table.jpg

학생들이 이러한 수학 함수를 사용하여 자전거의 속도를 높이거나 낮춰주는 프로그램을 만들 수 있어야 합니다.

샘플 프로그램:

from hub import port, light_matrix, button
import runloop
import motor_pair

async def ride(bike_velocity):
    # 허브에 속도 값을 쓰고 자전거를 전진 이동하도록 ride 함수를 정의합니다
    await light_matrix.write(str(bike_velocity))
    await motor_pair.move_for_degrees(motor_pair.PAIR_1, 720, 0, velocity=bike_velocity)

async def main():
    bike_velocity = 250
    # 모터를 페어링합니다
    motor_pair.pair(motor_pair.PAIR_1, port.C, port.E)

    while True:
        # 왼쪽 버튼을 누르면 속도가 50씩 감소합니다
        if button.pressed(button.LEFT):
            bike_velocity -= 50
            await ride(bike_velocity)
            await runloop.sleep_ms(2000)

        # 오른쪽 버튼을 누르면 속도가 50씩 증가합니다
        if button.pressed(button.RIGHT):
            bike_velocity += 50
            await ride(bike_velocity)
            await runloop.sleep_ms(2000)

runloop.run(main())

학생들에게 프로그램을 살펴볼 시간을 주고, 여러 가지 값을 더하거나 빼보라고 하세요. 특히 주목해야 할 부분은 15행의 코드입니다: await light_matrix.write(str(bike_velocity))
bike_velocity 앞의 str은 정수를 문자열로 캐스팅하여 허브에 쓸 수 있도록 프로그램에 지시하는 기능을 합니다. 캐스팅은 특정 상황에서 데이터의 유형을 변환하는 방법 중 하나입니다. 이 프로그램에서는 데이터 유형을 영구적으로 바꾸지 않으며, 단지 허브에 쓰기 위해 변환할 뿐입니다. 즉, 변수는 여전히 정수형입니다.

설명

(그룹 전체, 5분)

프로그램이 어떻게 작동했는지에 대해 학생들과 이야기를 나눠보세요.
이런 질문을 던져보세요.
• 수학 함수를 프로그램에서 어떻게 활용할 수 있을까요?
• 수학 함수를 사용하자 프로그램의 작동 방식이 어떻게 바뀌었나요?
• 변수로 속도를 제어하면 어떤 이점이 있나요?

ride 함수는 프로그램의 서로 다른 위치에서 동일한 코드를 실행할 수 있도록 만들어져 있습니다. 함수를 만들면 프로그램의 길이를 최소화할 수 있으며, 따라서 프로그램을 더욱 효율적으로 만들 수 있습니다.

다듬기

(소규모 그룹, 10분)

학생들에게 프로그램을 계속 수정하면서 다른 학생들과 공유한 내용을 기반으로 새로운 수학 함수들을 사용해보라고 하세요.

학생들에게 프로그램에 새로운 기능을 추가할 경우 움직임이 어떻게 바뀌는지 확인해보고, 각자의 프로그램을 모두와 공유하게 하세요.

샘플 프로그램:

from hub import port, light_matrix, button
import runloop
import motor_pair

async def ride(bike_velocity):
    # 허브에 속도 값을 쓰고 자전거를 전진 이동하도록 ride 함수를 정의합니다
    await light_matrix.write(str(bike_velocity))
    await motor_pair.move_for_degrees(motor_pair.PAIR_1, 720, 0, velocity=bike_velocity)

async def main():
    bike_velocity = 250
    # 모터를 페어링합니다
    motor_pair.pair(motor_pair.PAIR_1, port.C, port.E)

    while True:
        # 왼쪽 버튼을 누르면 속도가 50씩 감소합니다
        if button.pressed(button.LEFT):
            bike_velocity /= 2
            await ride(int(bike_velocity))
            await runloop.sleep_ms(2000)

        # 오른쪽 버튼을 누르면 속도가 50씩 증가합니다
        if button.pressed(button.RIGHT):
            bike_velocity *= 2
            await ride(bike_velocity)
            await runloop.sleep_ms(2000)

runloop.run(main())

학생들에게 프로그램을 살펴볼 시간을 주고, 여러 가지 수학 함수를 사용해보게 하세요. 참고: 숫자를 나누면 숫자가 자동으로 10진수의 부동 소수로 변환됩니다. 속도 파라미터는 정수여야 합니다. 즉, 속도 파라미터를 산출하려면 정수로의 캐스팅이 필요합니다.

평가

(그룹 실습, 5분)

교사 관찰:
학생들과 프로그램에 대해 토의를 진행하세요.
이런 질문을 던져보세요.
• 프로그램에 수학 함수를 추가하자 어떤 일이 일어났나요?
• 수학 함수 프로그래밍에 대해 무엇을 배웠나요?
• 나눗셈을 사용하는 중에 어떤 문제가 발견되었나요?
• 자전거를 움직이는 모터가 하나뿐인데 모터 쌍을 사용한 이유가 무엇일까요?
• 프로그램에 어떤 반복 기능을 사용할 수 있을까요?

자기 평가:
학생들에게 다음 질문에 대한 답을 기록장에 적으라고 하세요.
• 오늘 프로그램에 수학 함수를 사용하는 방법에 대해 무엇을 배웠는가?
• 좋은 팀원의 특성은 무엇이며, 오늘 내가 그중 몇 가지를 보여주었는가?
• 학생들에게 오늘의 시간 관리에 대해 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-16 Incorporate existing code, media, and libraries into original programs, and give attribution.
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.