co:bit Training Kit 기초강좌 3: 가속도센서를 알아보자

가속도 센서를 알아보자.

가속도 센서는 micro:bit를 흔들거나 움직일 때, 가속도를 측정하는 장치입니다. 쉽게 말해서 micro:bit가 움직여지면 그 움직임을 감지할 수 있습니다. 가속도 센서를 이용하면, 여러 가지 비슷한 동작들을 감지할 수 있습니다. 예를 들어, 흔들기, 기울이기, 떨어뜨리기(자유낙하) 등을 감지할 수 있습니다.

micro:bit 보드에서 가속도센서의 위치는 위 그림에서 확인할 수 있습니다. micro:bit의 가속도센서는 3개의 방향으로 움직임을 측정할 수 있습니다. 

위 그림에서 볼 수 있듯이 x, y, z 세가지 방향으로의 움직임을 측정할 수 있습니다. 예를 들어 micro:bit의 LED 스크린을 위로하고 보드를 왼쪽 오른쪽으로 기울이면 가속도센서의 x값의 출력이 변합니다. 가속도센서를 블럭 에디터로 코딩하는 방법은 아래 과제들을 통해 알아봅시다.

준비물

이번 강좌의 준비물은 다음과 같습니다.

  • co:bit training kit 베이스 보드 (micro:bit 장착한 상태)
  • 마이크로 USB 케이블
  • 웹브라우저 연결 가능한 PC (맥북, 리눅스 포함) 혹은 크롬북

하드웨어를 준비해 봅시다.

제일 먼저 co:bit 베이스 보드에 micro:bit를 장착합니다. 장착을 할 때는 micro:bit의 LED와 버튼이 위로가게 장착합니다.

 

그리고 PC와 co:bit 베이스보드를 마이크로 USB 케이블로 연결을 합니다. 그리고 PC에서 웹브라우저를 실행합니다. 웹브라우저는 마이크로소프트의 에지 혹은 익스플로러, 구글의 크롬 등 어떤 브라우저라도 상관 없습니다.

 

그리고 웹브라우저에서 블럭코딩을 하기위해 블럭에디터 사이트로 갑니다. 여기까지 완료했다면 하드웨어 준비가 끝났습니다.

마이크로소프트 블럭에디터 바로가기

 


코딩과제 1: 가속도센서 기울기 감지

과제 개요

micro:bit 보드를 LED 스크린을 위로 한 상태에서 왼쪽, 오른쪽으로 기울일 때, 이러한 움직임들을 감지하는 코드를 만들어 봅시다. 그리고 보드가 기울어 지면 LED 스크린의 이미지가 움직임에 따라 이동하도록 코딩해 봅시다. 코드의 동작은 다음과 같습니다. 

  • 코드가 실행되면 “Smile!”문자열을 스크롤 합니다.
  • 그리고는 “가운데” 이미지가 표시 됩니다.
  • 보드가 왼쪽으로 기울어 지면 LED 스크린에 “왼쪽” 이미지가 0.1초간 표시되고, “도(C)”음이 울립니다. 
  • 그리고 오른쪽으로 기울어 지면 LED스크린에 “오른쪽” 이미지가 0.1초간 표시되고, “솔(G)음이 울립니다. 
  • “왼쪽” 이미지 혹은 “오른쪽” 이미지가 0.1초간 표시된 후에는 다시 “가운데” 이미지가로 돌아옵니다. 

정확히 코딩이 되었다면 아래 동영상처럼 동작을 하게 됩니다. 

 

블럭코딩의 흐름도

프로젝트를 코딩하기 위해서 먼저 블럭코드의 흐름도를 봅시다.

 

블럭코딩 하기

먼저 “Slope…” 문자열을 LED 스크린에 디스플레이 하고, “가운데” 이미지를 디스플레이 하는 것은 클래스 2에서 많이 다루었으므로 생략합니다. micro:bit 보드가 왼쪽, 오른쪽으로 기울어지는 것을 알아내는 방법은 클래스 2에서 몇번 사용했던 “움직임 감지하면 실행” 블럭을 사용하면 됩니다. “움직임 감지하면 실행” 블럭의 선택사항 중에 “왼쪽 기울임”, “오른쪽 기울임” 두 가지 선택사항이 있습니다. 

 

이 “왼쪽 기울임”, “오른쪽 기울임”은 micro:bit 보드의 x축 방향으로 오른쪽이나 왼쪽으로 기울어졌을 때 반응합니다.

 

즉 위 그림의 “X” 방향을 기준으로 왼쪽이나 오른쪽으로 기울어지면 “움직임 감지하면 실행” 블럭이 실행됩니다. micro:bit 보드가 왼쪽으로 기울었을 때, “왼쪽” 이미지를 LED 스크린에 표시하는 코딩은 다음과 같습니다.

 

“왼쪽” 이미지를 디스플레이 한 다음에는 “도(C)”음을 1박자 동안 출력합니다. 그리고 0.1초간 실행을 멈춥니다. 마지막으로 다시 “가운데” 이미지를 LED 스크린에 디스플레이 합니다. 이렇게 코딩하려면 아래와 같이 합니다.

 

micro:bit 보드가 오른쪽으로 기울어 질 때 동작을 코딩하면 다음과 같습니다.

 

전체 프로젝트

전체 블럭 프로젝트는 아래와 같습니다. 맨 오른쪽 위 모서리에 있는 ‘편집’ 버튼을 클릭하면 자신의 컴퓨터로 전체 블럭 프로젝트가 임포트 됩니다.

따라해보기 

co:bit 베이스 보드를 오른쪽 왼쪽으로 기울일 때 디스플레이 되는 이미지를 변경해 봅시다. 또한 오른쪽 왼쪽으로 기울어지면 출력되는 소리의 종류를 바꾸어 봅시다. 예를 들어 아래 블럭에서 “전원 켜는”, “전원 끄는” 멜로디를 사용해 봅시다. 

 


코딩과제 2: 가속도센서로 위 아래 감지

과제 개요

이번 코딩 프로젝트에서는 micro:bit 보드가 LED 스크린이 위 방향을 바라보는지 아래 방향을 바라보는지를 인식하는 기능을 구현해 봅시다. 코드가 실행되면 다음과 같이 동작하게 만들어 봅시다. 

  • 코드가 실행되면 “Up-bottom”문자열을 스크롤 합니다.
  • 그리고는 LED 스크린에 정수 1이  표시 됩니다. 그리고 “전원켜기” 멜로디가 출력됩니다. 
  • 보드를 뒤집어서 LED 스크린을 바닥을 바라보게 하면 LED 스크린에 정수 2가 표시됩니다. 
  • 그리고 “전원끄기” 멜로디가 출력됩니다. 
  • 보드를 다시 뒤집어서 LED 스크린이 하늘을 보게 하면 LED 스크린에 정수 1이 표시되고 “전원켜기” 멜로디가 출력됩니다. 

정확히 코딩이 되었다면 아래 동영상처럼 동작을 하게 됩니다.

 

블럭코딩의 흐름도

프로젝트를 코딩하기 위해서 먼저 블럭코드의 흐름도를 봅시다.

 

블럭코딩 하기

먼저 “Up-bottom…” 문자열을 LED 스크린에 디스플레이 하고, 정수 1을 디스플레이 하는 것은 클래스 2에서 많이 다루었으므로 생략합니다. micro:bit 보드의 LED 스크린이 하늘을 바라보고 있는지 땅을 바라보고 있는지 파악하려면  앞의 코딩 프로젝트에서 사용했던 “움직임 감지하면 실행” 블럭을 사용하면 됩니다. “움직임 감지하면 실행” 블럭의 선택사항 중에 “스크린 하늘 방향”, “스크린 땅 방향” 두 가지 선택사항이 있습니다. 

 

micro:bit 블럭 에디터의 소리 블럭 중에는 짧은 소리가 아닌 특정한 멜로디를 출력할 수 있는 블럭이 있습니다. “소리 출력” 블럭인데, 이 블럭은 아래와 같습니다. “소리 출력” 불럭에는 익숙한 결혼식 멜로디, 생일 멜로디 같은 여러가지 멜로디를 지정하여 출력할 수 있습니다.   

 

micro:bit 보드의 LED 스크린이 하늘을 바라볼 때, 정수 1이 디스플레이 되고, “전원켜기” 멜로디가 출력되게 하려면 다음과 같이 하면 됩니다. 

 

LED 스크린이 땅을 바라볼 때, 정수 2가 출력되고, “전원끄기” 멜로디가 출력되게 하려면 다음과 같이 하면 됩니다. 

전체 프로젝트

전체 블럭 프로젝트는 아래와 같습니다. 맨 오른쪽 위 모서리에 있는 ‘편집’ 버튼을 클릭하면 자신의 컴퓨터로 전체 블럭 프로젝트가 임포트 됩니다.

따라해보기

프로젝트에서는  LED 스크린이 하늘 방향, 땅 방향으로 바라볼 때 정수가 출력되고 소리가 나오도록 코딩했습니다. 이번에는 “움직임 감지하면 실행” 블럭에서 “로고 하늘 방향”, “로고 땅 방향”을 사용해 봅시다 . 또한 출력되는 멜로디도 바꾸어 봅시다. 

 

“로고 하늘 방향”과 “로고 땅 방향”은 miro:bit 보드의 Y축 방향으로 위 아래를 가르킵니다. 코딩을 한 후, 실제로 어떻게 보드가 움직임에 따라 반응하는지 알아봅시다. 

 


코딩과제 3: 소리의 템포를 조절하기

프로젝트 개요

이번 코딩 프로젝트에서는 micro:bit 보드를 LED 스크린을 왼쪽과 오른쪽으로 기울 일 때, 기울어지는 정도에 따라 경고음이 다르게 출력되는 코딩을 해 봅시다.  보드가 평평할 때는 경고음이 아주 짧게 출력이 되고 기울임이 점점 더 심해지면 경고음이 기울임에 비례해서 길어지게 코딩하는 것입니다.  

  • 코드가 실행되면 “Slope-tempo” 문자열 출력 
  • 버튼 A를 누르면 경고음이 동작을 합니다. 버튼 B를 누르면 경고음이 동작을 멈춥니다.
  • 보드가 평평하면, 경고음이 최고로 짧게 출력이 됩니다.  
  • 보드가 기울어 지면, 기울기에 비례해서 경고음의 울리는 시간이 점점 길어집니다. 
  • 보드를 오른쪽으로 기울이던, 왼쪽으로 기울이던 동일하게 동작합니다. 

제대로 코딩이 되었다면 아래 동영상처럼 동작을 하게 됩니다.

 

블럭코딩의 흐름도

프로젝트를 코딩하기 위해서 먼저 블럭코드의 흐름도를 봅시다.

 

블럭코딩 하기

코드가 실행되면 제일 먼저 “Slope-tempo” 문자열을 스크롤 합니다.  그 다음에는 “시작”이라는 이름의 변수를 하나 만들고, 이 변수를 이용해서 on-off 기능을 구현해 봅시다.  micro:bit 블럭 에디터에서 변수를 만드는 방법은 아래 팁을 참고하시기 바랍니다. “시작” 변수를 만들었으면 다음과 같이 코딩합니다.

 

위 블럭을 보면, 버튼 A가 눌러지면 “시작” 변수에 정수 1이 저장 됩니다.  다음에는 버튼 B가 눌러지면 “시작” 변수에 정수 0을 저장합니다.

 

“무한 반복 실행” 블럭에 아래와 같이 코딩합니다.  아래 블럭은 변수 “시작”의 값에 따라 “하트” 아이콘 출력이 on 되기도 하고 off 되기도 합니다. 버튼 A를 눌러서 “시작”  = 1 로 하면 하트 모양 아이콘이 디스플레이 됩니다. 버튼 B를 눌러서 “시작” = 0 으로 하면 하트 모양 아이콘은 디스플레이 되지 않습니다. 한번 micro:bit으로 다운로드해서 실행을 해 봅시다.

 

이제 우리는 변수를 이용해서 소프트웨어적인 on-off 스위치 기능을 구현해 보았습니다.

다음에는 micro:bit 보드의 기울기에 따라 경고음을 출력하는 기능을 코딩해 보겠습니다.  micro:bit 보드가 얼마나 기울어져 있는가를 알 려면 다음 블럭을 사용하면 됩니다. 

 

“가속도 센서 가속도” 블럭은 x축, y축, z축 방향의 가속도센서 값을 출력해 줍니다. 우리는 x축 방향을 사용합니다. 가속도센서의 출력값은 -1024 ~ 1024 사이 입니다.  micro:bit 보드를 완전히 왼쪽으로 기울이면 -1024값이 출력되고, 오른쪽으로 완전히 오른쪽으로 기울이면 1024값이 출력 됩니다.  우선 “기울기”라는 이름의 변수를 새로 만듭니다. 다음에는 아래와 같이 코딩을 해 봅시다. 

 

위 코드는 가속도센서 기울기 값을 읽어서 변수”기울기”에 저장합니다. 당연히 “기울기” 변수는 -1024 ~ 1024 사이의 값입니다. 하지만 우리는 – 값, 즉 음수값은 필요하지 않습니다. 그래서 “기울기” 값의 절대값을 구합니다. 절대값을 구하면 숫자의 – 가 사라집니다. 예를 들면 -1024의 절대값은 1024입니다. -784의 절대값은 784입니다. 절대값을 구하는 블럭은 블럭영역 -> 계산그룹 -> “절대값(abs)” 블럭으로 구할 수 있습니다. 아래와 같이 하면 됩니다.

 

위에서 구한 “기울기”변수의 절대값을 “소리출력” 블럭의 박자 항목에 넣으면 기울기에 따라 경고음이 출력되는 기능이 완성됩니다.

 

이렇게 만든 “소리 출력” 블럭을 이전에 만든 “무한 실행 블럭”안으로 가져 갑니다. 먼저 아까 실험을 위해 넣었던 “하트 아이콘 출력” 블럭은 지웁니다. 완성된 코드는 아래와 같습니다. 

 

위 블럭에서는 변수 “시작” = 1인 경우, micro:bit 보드의 기울기에 맞는 박자로 경고음이 버저에서 출력 됩니다. 

 

팁: micro:bit 블럭 에디터에서 변수 만들기 

이미 스크래치를 공부한 사용자들은 변수(Variables)에 대해서 알고 있을 것입니다. 변수는 숫자, 문자, 문자열을 저장하는 공간입니다. 블럭 에디터에서 변수를 만들려면 블럭 영역에서 변수 그룹을 클릭하면 됩니다. 

 

변수 그룹을 클릭하면 위 그림의 오른쪽 같은 화면이 나옵니다. 여기서 위쪽에 보면 “변수 만들기” 버튼이 있습니다. 이것을 클릭하면 변수의 이름을 물어보는 팝업창이 뜹니다. 

여기에 변수이름을 입력하고 “확인”을 클릭하면 새로운 변수가 생성됩니다. 예를 들어 변수이름을 “밥”이라는 입력합니다.  그리고 “확인”을 클릭하면 “밥”이라는 변수가 생긴 것을 확인 할 수 있습니다. 

전체 프로젝트

전체 블럭 프로젝트는 아래와 같습니다. 맨 오른쪽 위 모서리에 있는 ‘편집’ 버튼을 클릭하면 자신의 컴퓨터로 전체 블럭 프로젝트가 임포트 됩니다.

따라해보기

프로젝트에서는 가속도센서 값의 절대값을그대로 소리출력의 박자로 사용했는데 이번에는 이 가속도센서 값의 2배값을 소리출력의 박자로 사용해서 코딩해 봅시다. 즉 박자를 2배 늘려 봅시다. 아래 블럭이 힌트 입니다. 

 


코딩과제 4: 점프 카운터 만들기

과제 개요

이번 코딩 프로젝트에서는 손목에 착용하고 줄넘기를 하면, 줄넘기 숫자가 카운팅 되는 점프 카운터를 만들어 보겠습니다. 손목에 착용할 수 있도록 co:bit Training Kit에 포함된 공작용 종이 중에서 “점프 카운터 프레임”이라는 이름이 붙여진 공작용 종이를 준비합니다. 조립을 위해서는 가위와 실리콘건 또는 풀이 필요하니 같이 준비합니다. 점프 카운터 프레임을 조립하는 방법은 아래 동영상을 보면 됩니다.

<점프 카운터 프레임 조립 동영상>

공작용 종이가 준비되었으면 하드웨어를 준비합니다. 먼저  micro:bit를 co:bit 베이스 보드에서 빼냅니다. 그리고 co:bit Training Kit에 포함되어 있는 배터리팩을 micro:bit에 연결을 합니다. 연결하는 방법은 아래 사진에 나와 있습니다. 

 

배터리팩이 연결되면 PC와 micro:bit를 USB로 연결합니다. 연결한 후에는 다음과 같이 코드를 만들 것입니다.

  • 코드가 실행되면 “Count jump” 문자열을 스크롤 합니다. 스크롤이 끝나면 LED 스크린에 “하트” 아이콘을 출력합니다. 
  • 흔들림이 감지되면 변수 “점프”를 1씩 증가 시킵니다.
  • 사용자가 버튼 A를 누르면 변수 “점프” 숫자가 LED 스크린에 0.1초간 출력됩니다.
  • 사용자가 버튼 B를 누르면 변수 “점프”가 0으로 만들고 LED 스크린애 0.1초간 출력됩니다.    

코딩이 완료되면 공작용 종이로 만든 점프 카운터 프레임 안에 micro:bit와 배터리팩을 집어넣고, 손목에 착용합니다. 이제 micro:bit를 리셋하고 실제로 줄넘기를 해 봅니다. 줄넘기를 20번 정도 했으면 줄넘기를 멈추고 micro:bit의 버튼 A를 누릅니다. 그러면 카운팅 된 점프의 숫자가 LED 스크린에 표시됩니다. 점프 숫자를 확인했으면 버튼 B를 눌러서 변수 “점프”를 0으로 만듭니다. 다만 micro:bit보드의 가속도센서가 조금 둔감해서 실제 점프 횟수보다는 적게 카운팅이 됩니다.  점프 카운터 프레임 착용하는 방법과 코드가 동작하는 방법은 아래 동영상을 보면 됩니다.

 

블럭코딩의 흐름도

프로젝트를 코딩하기 위해서 먼저 블럭코드의 흐름도를 봅시다.

 

블럭코딩 하기

코드가 실행이 되면 제일 먼저 “Jump count” 문자열을 스크롤 하고. 이어서 “하트” 아이콘을 출력해야 합니다. 이것을 실행하는 코드는 아래와 같습니다. 

 이 코드는 흐름도에서 아래의 부분에 해당하는 코드입니다. 

 

다음에는 움직임이 감지되면  변수 “점프”를 1 증가시키는 코드를 만들어 봅시다. 변수 “점프”를 만들어야 합니다. 변수를 만드는 방법은 코딩 프로젝트 3의 팁을 보시면 됩니다. 움직임을 감지하는 블럭은 이미 많이 사용해본 “움직임이 감지하면 실행” 블럭 입니다.

 

움직임이 감지되면 변수 “점프”를 1 증가시키고 0.1초 쉬는 코드는 아래와 같이 만들면 됩니다.

 

이 코드는 흐름도에서 아래의 부분을 코딩한 것입니다.

 

끝으로 버튼 A 또는 B가 눌러졌을 때 동작하는 코드를 만들어 봅시다. 버튼 A가 눌러지면 변수 “점프”에 저장된 숫자를 LED 스크린에 출력하는 코드와 버튼 B가 눌러지면 변수 “점프”가 0이 되도록 코딩하면 됩니다. 먼저 이 코드는 모두 “무한 반복 실행” 블럭 안에 넣어야 합니다. 이번에는 “버튼 ~ 가 눌러지면” 블럭을 사용하지 않을 것입니다.  먼저 흐름도를 봅시다.

 

이 흐름도를 보면 제일 먼저 버튼 A가 눌러졌는지 체크한 다음에 눌러지지 않았으면 버튼 B가 눌러졌는지 체크하게 되어 있습니다. 이것을 수행하는 블럭은 아래 블럭입니다.

 

블럭영역의 논리 블럭에서 “만약 ~ 이면 실행” 블럭을 가져와서 아래와 같이 하면 위 블럭을 만들 수 있습니다.

다음으로 버튼이 눌러졌는지 체크하는 블럭은 다음 블럭을 사용합니다.

 

그 다음에는 버튼 A가 눌러졌을 때 실행될 블럭들과 버튼 B가 눌러졌을 때 실행될 블럭들을 if문 블록에 넣으면 됩니다. 아래 블럭과 같이 코딩하면 됩니다. 

 

위 블럭을 보면 버튼 A가 눌러지면 “점프” 변수의 저장된 숫자를 LED 스크린에 출력하고 0.1초 쉬고 if문을 빠져나옵니다. 만약 버튼 A는 눌러지지 않고 B가 눌러졌으면 “점프” 변수에 0을 저장하고 이 값을 역시 LED 스크린에 출력, 0.1초 쉬고 if문을 빠져 나옵니다. 흐름도를 마지막을 보면 if문을 빠져나왔으면 “하트” 아이콘을 출력하면 코드가 끝이 납니다. 

전체 프로젝트

전체 블럭 프로젝트는 아래와 같습니다. 맨 오른쪽 위 모서리에 있는 ‘편집’ 버튼을 클릭하면 자신의 컴퓨터로 전체 블럭 프로젝트가 임포트 됩니다.

따라하기
점프가 감지되면 LED 스크린에 점프 카운트 숫자가 바로 표시되도록 코딩을 해 봅시다. 점프 카운트를 LED스크린에 표시하려면 다음 블럭을 사용합니다. 
이 블럭을 흐름도에서 다음 위치에 적절히 넣으면 점프가 감지 돌 때, 바로 점프카운트가  LED 스크린에 표시됩니다. 

응용하기

점프카운터를 응용해서 만보기를 만들어 봅시다. 코드는 특별히 변경할 것은 없고 내가 걸은 걸음 숫자를 버튼을 눌러서 확인할 수 있도록 코딩해 봅시다. 그리고 만보기를 손목이 아닌 허리에 착용할 수 있도록 종이로 케이스를 만들어 봅시다.