7. 길을 잃었을 때 마이크로비트가 있다면 나침반 만들기

【활동 하기】


1. 변수란?

2. 변수 만들기

3. 변수 그룹 블록 살펴보기

4. 나침반 만들기

5. 다음 문제 해결하기

처음 방문하는 곳에 갈 때 어떻게 길을 찾아갈 수 있을까? 요즘은 핸드폰 지도 어플이 잘되어 있어서 누구나 쉽게 길을 찾을 수 있다. 하지만 네트워크가 안되거나 지도가 없다면 어떻게 길을 찾거나 방향을 찾을 수 있을까? 다양한 방법이 있겠지만 방향을 찾는 가장 유용한 도구는 나침반이다. 나침반은 11세기 중국 송나라의 심괄이라는 사람이 명주실에 자성을 갖은 침을 매달아 남북을 측정하였다는 기록이 최초로 남아 있다. 심괄의 시대 이후 아랍의 선원이 유럽으로 이 자침을 전하면서 전 세계에서 나침반을 사용하게 되었다. 우리에게 스마트폰이 없거나 네트워크가 연결이 안 된다면 마이크로비트로 나침반을 만들어보자.

1 변수란?

변수’라는 말을 들어본 적 있나? “변수가 생겼다.”, “변수가 있을 줄이야!” 무엇인가 예상과는 다른 변화가 생긴 것 같은 느낌이 든다. 변수는 고정되어 있지 않고 변화하는 값을 이야기한다. 값뿐 아니라 그 변화를 저장하는 공간이라는 의미도 포함한다. 게임을 하다 보면 점수는 증가하거나 감소한다. 이때 점수의 값은 계속 변하고 그 변하는 값을 저장하고 있는 “점수”가 변수가 된다 우리 주변에 변수는 어떤것들이 있을까? 몸무게, 키, 시간, 길이 참 다양한 변수를 찾을 수 있다. 아래의 방법으로 마이크로비트에 사용할 변수를 만들어 보자.

2 변수 만들기

1
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 블록 꾸러미의 변수를 선택한 모습의 스크린샷

블록 꾸러미의 변수 그룹을 선택하면 변수만들기 버튼 외 다른 블록은 찾을 수 없다. 변수 그룹의 블록을 사용하기 위해서는 변수를 만들어야 한다.

2
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 새 변수의 이름을 지정하는 모습의 스크린샷

변수 만들기 버튼은 누르면 왼쪽 그림과 같은 창이 나타난다. 이 단원에서는 ‘num’이라는 변수를 만들어 보도록 하자. ‘num’울 입력하고 확인 버튼을 누른다.

3
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 새 변수가 추가된 모습의 스크린샷

1번과 다르게 3가지 블록이 새로 생긴 것을 확인할 수 있다.

3 변수그룹 블록 살펴보기

1
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 변수 블록

변수 블록이다. 수나 문자 대신 사용할 수 있다. 마이크로비트에 있는 센서의 값을 저장할 수도 있다.

2
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 변수에 원하는 숫자를 지정하는 블록

변수에 원하는 숫자를 대입한다. 변수에 저장되어 있던 값과 상관없이 현재 입력하는 값으로 대치된다.

3
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 변수에 저장되어있는 값에 1을 더해주는 블록.

변수에 저장되어 있는 값에 원하는 값을 더하거나 뺀 수를 다시 대입한다. 예를 들어 현재 저장되어 있는 수가 4일 경우 2만큼 증가하면, 6으로 저장되며 -2 증가하면, 2로 저장된다.

4 나침반 만들기

이미지. 나침반의 그림

위 그림의 나침반을 살펴보자. 방향은 몇 가지가 있을까? 나침반은 간단하게 동서남북 4방향부터 24방향까지 표현한다. 이번 단원의 동서남북 4방향을 표현하도록 하겠다. 동쪽을 표현하기 위해서는 마이크로비트 자기센서의 값이 45˚ ~ 135˚ 일 때 E가 표현되도록 하고 135˚ ~ 225˚ 일 때는 남 쪽을 의미하는 S, 225˚ ~ 315˚ 일 때는 서 쪽을 의미하는 W, 북쪽은 315˚ ~ 45˚까지 일 때 N로 표현하도록 한다.

이미지. 동서남북 각 방향의 자기센서 값
1
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 무한반복 실행 블록

나침반이 방향을 측정하기 위해서는 끊임없이 반복해서 자기센서의 값을 받아야 하기 때문에 [무한반복 실행] 블록을 사용한다.

2
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 무한반복 실행 블록 안에 num 변수에 자기센서값을 저장하는 블록이 들어가 있다.

변수 그룹의 변수에 자기 센서 값을 저장 한다. 변수 [num에 저장] 블록을 사용하여 [자기센서 값] 블록을 넣는다.

[자기센서 값] 블록은 입력 그룹에 있다.

3
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 무한반복 실행 블록 안에 num 변수에 자기센서값을 저장하는 블록과 만약  그리고 이면 실행 블록이 들어가 있다.

조건문인 [만약(if) 참(true)이면(then) 실행] 블록을 넣고 참(true) 부분에 불논리연산인 [그리고] 블록을 넣는다. 나침반의 조건은 모두 무엇보다 크고 무엇보다 작을 때 이기 때문에 두 가지 조건을 모두 만족하면 실행하기 위해 [그리고] 블록을 사용한다. [만약(if) 참(true)이면(then) 실행] 블록과 [그리고] 블록은 논리 그룹에 있다.

4
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 무한반복 실행 블록 안에 num 변수에 자기센서값을 저장하는 블록과 만약 num 이 45보다 크고 135보다 작거나 같으면 실행 들어가 있다.

[그리고] 블록 양옆의 조건으로 왼쪽에는 [비교연산] 블록을 사용하여 변수 num이 45˚ 보다 클 때, 오른쪽에는 변수 num이 135˚보다 작거나 같을 때, 라는 조건을 넣는다.

이렇게 조건을 표시하면 자기센서의 값을 저장한 ‘변수 num의 값이 45˚ 보다 크거나 135˚ 보다 작거나 같으면’이라는 의미가 된다. [비교연산] 블록은 논리 그룹에 있다.

5
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 무한반복 실행 블록 안에 num 변수에 자기센서값을 저장하는 블록과 만약 num 이 45보다 크다. 그리고 135보다 작거나 같다 이면 문자열 E를 출력하는 블록이 들어가 있다.

위 4번에서 입력한 조건은 동쪽을 의미하기 때문에 [문자열 출력] 블록을 사용하여 동쪽을 나타내는 영어‘East’의 약자 “E”를 마이크로비트 LED 스크린에 표기하도록 한다.

6
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 무한반복 실행 블록 안에 num 변수에 자기센서값을 저장하는 블록과 만약 num 이 45보다 크다. 그리고 135보다 작거나 같다 이면 문자열 E를 출력하는 블록이 들어가 있다. 그리고 아래에 아니면서 만약 이면 실행 , 아니면 실행 블록이 있다.

동서남북 4가지 중 남은 3가지를 더 구현하기 위해 조건을 3가지 더 추가한다. 조건을 추가 하기 위해서는 조건문 블록인 [만약(if) 참(true)이면(then) 실행] 블록의 왼쪽 하단에 있는 ‘+’ 버튼으로 조건을 추가한다.

7
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 무한반복 실행 블록 안에 num 변수에 자기센서값을 저장하는 블록과 만약 num 이 45보다 크다. 그리고 135보다 작거나 같다 이면 문자열 E를 출력하는 블록이 들어가 있고, 아니면서 만약 num이 135보다 크다, 그리고 num이 225보다 작거나 같다, 아니면서 num이 225보다 크다 그리고 num이 315보다 작거나 같다 아니면 실행 블록이 들어가 있다.

동쪽과 같이 [그리고] 블록을 사용하여 남쪽은 135˚보다 크고 225˚보다 작거나 같을 때, 서쪽은 225˚ 보다 크고 315˚보다 작거나 같을 때 조건을 입력한다.

8
이미지. 메이크코드 마이크로비트 블록코딩의 스크린샷. 무한반복 실행 블록 안에 num 변수에 자기센서값을 저장하는 블록과 만약 num 이 45보다 크다. 그리고 135보다 작거나 같다 이면 문자열 E를 출력하는 블록이 들어가 있고, 아니면서 만약 num이 135보다 크다, 그리고 num이 225보다 작거나 같다 안에 문자열 출력 S 블럭이 들어가 있고, 아니면서 num이 225보다 크다 그리고 num이 315보다 작거나 같다에 문자열 출력 W가 들어가 있다. 아니면 실행 블록이 들어가 있다.

두 번째 조건인 135˚보다 크고 225˚보다 작거나 같을 때 남쪽을 표시하도록 [문자열 출력] 블록을 사용하여 남쪽을 의미하는 영어 ‘South’의 약자 “S”를 마이크로비트 LED 스크린에 표시하고 3번째 조건 225 보다 크고 315보다 크거나 같을 때를 만족하면 서쪽인 ‘West’의 약자 “W”를 표시하도록 한다.

9
이미지. 메이크코드 마이크로비트 블록코딩 스크린샷. 무한반복 실행 블록 안에 num 변수에 자기센서값을 저장하는 블록과 만약 num 이 45보다 크다. 그리고 135보다 작거나 같다 이면 문자열 E를 출력하는 블록이 들어가 있고, 아니면서 만약 num이 135보다 크다, 그리고 num이 225보다 작거나 같다 안에 문자열 출력 S 블럭이 들어가 있고, 아니면서 num이 225보다 크다 그리고 num이 315보다 작거나 같다에 문자열 출력 W가 들어가 있다. 아니면 실행 안에 문자열 출력 N 블록이 들어가 있다.

마지막으로 위의 조건이 모두 거짓일 때, 북쪽을 표시하도록 아니면(else) 실행부분에 [문자열 출력] 블록을 사용하여 북쪽을 의미하는‘North’의 약자 “N”을 입력한다.

이미지. 마이크로 비트로 나침반을 작동시키는 동영상의 스크린샷

5 다음의 문제 해결하기

1. 나침반을 만들 때 북쪽을 표현하기 위해 315˚보다 크고 45˚보다 작거나 같을 때라고 조건을 입력하면 어떻게 될까?
2. 1번과 같은 오류를 해결하기 위해서는 어떻게 해야 할까?