치즈 스틱으로 악어 룰렛 게임을 만들어요

치즈 스틱과 5×5 매트릭스, 서보 모터를 활용해

악어 룰렛을 만들어 보아요.

엔트리의 ‘함수 만들기’ 기능을 활용해요.

엔트리의 함수 만들기 기능에 대해 알아보고 직접 함수를 만들어 보아요.

부품을 준비해 주세요.

필요 재료수량
치즈 스틱 본체1개
5X5 LED 매트릭스1개
서보 모터1개
USB 동글1개
컴퓨터1대 (로봇 코딩 소프트웨어 설치 필요)

악어 도안가위
테이프, 양면테이프클립

하드웨어를 준비해요.

1. 악어 도안을 인쇄해 모양대로 오려줍니다. 도안은 우측 상단의 활동 도안 다운로드 버튼을 클릭해 다운로드 받으세요.

2. 서보 모터의 선을 앞으로 빼낼 자리를 칼로 뚫고, 클립을 꽂을 자리에 칼집을 내줍니다.

3. 칼집을 내준 자리에 클립의 앞부분을 밑으로 하고 가운데 동그란 부분은 위로 오도록 해 고정합니다.(자세한 방법은 영상을 참고하세요.)

4. 점선을 따라 상자 모양이 될 수 있도록 접습니다.

5. 빗금이 처진 부분에 풀을 칠하고 붙여 줍니다.

6. 치즈 스틱의 Sa포트에 서보 모터를 연결하고

블록을 활용해 서보 모터의 각도를 180도로 맞춰 줍니다.

그 후 사진과 같이 서보 모터 혼을 꽂아 줍니다.

7. 클립의 방향이 화면과 같이 올 수 있도록 잡아줍니다. 방향이 맞춰졌다면 가운데 부분을 잡아 당겨 당겨진 부분과 아래 부분이 직각이 되도록 세워주세요.

8. 서보 모터에 끼워진 혼의 중심부와 가장 가까운 구멍에 클립의 바깥쪽 부분을 꽂아줍니다.

9. 클립이 혼에 붙어 있도록 테이프를 감아 고정해 주세요.

10. 양면테이프를 잘라 클립이 굽어 있는 쪽의 서보 모터 측면에 붙여줍니다. 악어에 꽂아 놓은 클립과 서보 모터에 연결한 클립을 연결합니다.

11. 사진과 같은 위치에 서보 모터를 부착합니다.

12. 5×5 LED 매트릭스를 치즈 스틱과 연결합니다.

13. 서보 모터 선을 칼로 뚫어 놓은 부분을 통해 악어 입속으로 빼낸 뒤 치즈 스틱의 Sa 포트에 연결합니다. 연결한 치즈 스틱은 악어 입의 중간에 놓습니다.

14. 컴퓨터 USB 포트에 USB 동글을 꽂은 후 치즈 스틱 본체의 전원을 켜 페어링 하세요.

15. 로봇 코딩 소프트웨어를 실행한 후 프로그래밍 할 프로그램을 선택해 주세요.

16. 자, 이제 프로그램을 시작합니다!

코딩을 해요.

알고 가기

코딩을 시작하기 전 엔트리 함수 만들기에 대해 알아보아요!

함수는 여러 블록의 기능을 한 블록에 모아 코드를 간결하게 표현할 수 있게 해줍니다.

게다가 한 번 만들어 놓으면 필요할 때마다 함수 블록만 가져와서 조립할 수 있으므로 코드 작성 시간을 절약할 수 있어요.

함수는 다음과 같이 함수 탭의 ‘함수 만들기’를 통해 만듭니다.

함수 만들기를 누르면 ‘함수 정의하기’ 블록이 나타납니다. 이 블록 아래에 여러분들이 원하는 블록을 가져다가 이어 붙이면 함수를 정의할 수 있습니다.

블록을 모두 조립한 뒤 ‘확인’ 버튼을 누르면 함수가 작성이 완료됩니다.

순서도 그려보기

코드 작성 전 순서도를 만들면 앞으로 작업할 내용을 정리하고 전체 과정을 파악하는 데 도움이 됩니다.

코딩 하기

1. 코딩에 사용할 변수와 신호를 추가합니다.

코드 작성 전 필요한 변수를 추가합니다.

신호도 추가해 줍니다.

2. 9가지 함수를 만듭니다.

앞으로 만들 함수는 다음과 같습니다.

모든 변수 초기화 함수

함수는 시작 버튼을 클릭했을 때 즉, 작동을 시작하기 전 모든 변수의 값들을 ‘0’으로 초기화하는 역할을 합니다.

입 닫았다 천천히 열기(틱) 함수

시작하기 버튼을 눌렀을 때 악어의 입이 닫혔다가 천천히 열리는 모습을 구현하기 위한 함수입니다.

여기서 틱 값은 0부터 시작해 이후에 정의할 시작 함수 내에 있는 시작 화면 타이머 변수의 값인 ‘160’까지 1씩 증가합니다.

조건문에 지정한 대로 틱 값이 ’60’이 되는 순간 서보모터의 각이 ‘140도’로 바뀌어 닫혔던 악어입이 살짝 벌어집니다.

틱 값은 1씩 계속 증가하므로 위의 연산식을 거쳐 악어는 ‘0.5도’씩 천천히 입을 벌리고 ’90도’로 벌어진 상태에서 멈추게 됩니다.

시작 함수

시작하기 버튼을 클릭하면 수행할 동작들을 정의합니다. 앞서 작성한 ‘입 닫았다 천천히 열기(틱)’ 함수를 여기서 활용합니다.

서보 모터의 값을 ’90’도로 초기화하고 지정한 모양으로 LED를 켜 5×5 매트릭스에 표현하는 ‘악어 화면’ 신호를 보냅니다.

‘악어 화면’ 신호를 받는 블록은 마지막에 작성하도록 하겠습니다. ‘화남 소리 재생하기’는 이 악어 화면이 나타날 때 배경음악으로 틀기 위해 추가합니다.

시작 함수와 관련된 활동을 모두 끝낸 후에는 소리를 끄고, 틱을 ‘0’으로 정하고 배경을 지워 초기화를 합니다.

입력 받아오기 함수

HAT 버튼 A와 B 중 한 버튼을 눌렀을 때, 누른 버튼의 입력 값을 ‘1’로 정하는 함수입니다.

배경 화면 및 음악 재생하기(틱) 함수

‘만일 ~ 이라면’ 조건문 내에 위치한 블록들이 실행되는 간격을 조절해주는 함수입니다.

버튼 입력이 있을 때까지 대기하는 상황에서 이 함수를 통해 5×5 매트릭스에 ‘입 열기’ 표정을 나타내고 ‘엔진 소리’ 배경음악을 재생합니다.

깨물기 함수

앞서 추가한 변수 중 ‘랜덤으로 내려찍기’와 ‘시행 횟수’의 값이 같아질 때 악어가 입을 다무는 동작을 수행합니다.

이 함수가 작동하는 상황은 함수 작성이 끝난 후 코드를 작성하는 부분에서 더 자세히 알려드리겠습니다.

서보 모터의 각이 ‘170도’가 되면 악어가 입을 다뭅니다.

휴우 함수

게임이 끝나기 전까지 버튼을 눌렀을 때 여러분이 무사하다는 것을 알려주는 동작을 나타냅니다.

‘좋음’ 표정을 나타내고 ‘잘 했어요’ 소리를 재생합니다. 2초 동안 수행하고 다시 대기 상태로 전환됩니다.

화면 움직이기(틱) 함수

게임이 끝났을 때 뜨는 ‘END.END.END.END.END.END.END’ 문구가 5×5 매트릭스 상에서 오른쪽에서 왼쪽으로 이동하면서 나타나도록 동작하는 함수입니다.

게임 오버 함수

‘시작’ 함수와 마찬가지로 작동하는 시간 만큼 ‘엔딩 타이머’의 값을 정해줍니다.

엔딩음악과 문구를 넣어준 뒤 바로 앞서 정의한 ‘화면 움직이기(틱)’ 함수를 ‘반복하기’ 조건문에 넣어 5×5 매트릭스의 문구가 이동하도록 합니다.

3. 함수를 활용한 코드를 작성합니다.

우선 게임 시작 후 초기화와 게임 진행하는 동안 동작할 블록들을 ‘시작하기 버튼을 클릭했을 때’ 블록 밑으로 쭉 연결해 작성해 줍니다.

초기값 설정 이후의 동작들은 ‘계속 반복하기’ 블록 안에 넣어 계속해서 게임이 진행될 수 있도록 합니다.

시작 함수까지 실행을 마치면 ‘랜덤으로 내려찍기’의 값이 0부터 10 사이의 무작위 수 즉, ‘1~9’ 중 한 값으로 정해집니다.

이 때 정해진 값이 게임의 총 진행 횟수가 됩니다. 총 진행 횟수가 ‘시행 횟수’와 같아지는 순간 악어가 입을 다뭅니다.

예를 들어 이 값이 ‘3’으로 정해질 때 HAT A, 또는 B 버튼을 3번 눌러 시행횟수가 ‘3’이 되는 순간 게임이 끝납니다.

4. ‘게임이 끝났어요’ 신호를 받아 동작하는 코드를 작성합니다.

5×5 매트릭스의 배경을 모두 지우고 ‘게임 오버’ 함수가 동작하도록 합니다.

5. 게임 시작 LED 코드를 작성합니다.

게임을 시작하면 5×5 LED 매트릭스에 게임의 시작을 알리는 이미지를 띄울 수 있는 코드를 알려드릴게요!

이 부분에 해당하는 코드는 게임 진행을 위한 필수 코드는 아니기 때문에 생략할 수 있습니다.

더욱 완성도 있는 게임을 만들기 위해 추가했어요.

이제 친구들과 돌아가며 악어 입안의 버튼을 눌러보아요!

응용하기

서보 모터의 방향 제어 기능을 적용할 수 있는 새로운 방법들에 대해 친구들과 논의해 보아요.