CO:BIT TRAINING KIT 기초강좌 5: 스피커(버저)를 알아보자

버저에 대해서 알아보자

버저는 전기를 넣으면 소리가 나오는 부품입니다. co:bit training kit에는 작은 버저가 내장되어 있습니다. 이 버저를 통해서 여러가지 소리나 음악을 만들어 낼 수 있습니다. 아래 사진은 co:bit training kit의 버저 모습입니다.

co:bit training kit의 CPU역할을 하는 micro:bit의 P0(0번) 핀에 버저를 연결하면 역시 소리나 음악을 만들어 낼 수 있습니다.  co:bit training kit의 버저도 이 P0 핀에 연결되어 있습니다.

준비물

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

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

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

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

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

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

블럭 에디터로 코딩하기

co:bit training kit를 마이크로소프트 블럭 에디터를 사용해서 코딩해 봅시다. 버저로 소리나 음악을 만들어 내기 위해서는 블럭 에디터의 사운드 블럭을 사용하면 됩니다.  블럭 에디터의 사운드 블럭은 다음과 같은 것들이 있습니다. 이제 직접 코딩을 사운드 블럭의 몇가지를 공부해 봅시다.


코딩프로젝트 1: 도레미파솔라시도

프로젝트 개요

이번 프로젝트에서는 버튼을 누르면 버저에서 “도레미파솔라시도” 음이 출력되는 코드를 만들어 봅시다. 코드의 동작은 다음과 같습니다.

  • 코드가 실행이 되면 “DoReMi…” 문자열을 스크롤 합니다.
  • 그 다음에는 버튼 A를 가리키는 “<-” 이미지가 LED 스크린에 출력됩니다.
  • 이 이미지는 0.1초 간격으로 계속 깜빡입니다.
  • 그리고 버튼 A를 누르면 버저에서 “도레미파솔라시도” 음이 한번 출력됩니다.

제대로 코딩이 되었다면 다음과 같이 동작을 할 것입니다.

블럭코딩의 흐름도

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

블럭코딩 하기

제일 먼저 “시작하면 실행” 블럭에서는 “DoReMi” 문자열을 스크롤 합니다. 이 코드는 다음과 같이 코딩하면 됩니다. 

문자열을 스크롤 한 다음에는 “무한 반복 실행” 블럭을 코딩합니다. “무한 반복 실행” 블럭에서는 “<-” 모양의 이미지를 0.1초 간격으로 on-off되도록 코딩합니다. 코딩은 아래와 같이 하면 됩니다. 

그 다음에는 버튼 A를 누르면 “도레미파솔라시도”음을 출력하는 코드를 만들어 봅시다. 코딩을 하려면 다음 두가지 블럭을 사용합니다. 

위 두가지 블럭을 사용해서 “도레미파솔라시도”음을 출력하는 코드를 만들면 다음과 같습니다. 

 

전체 프로젝트

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

따라해보기
프로젝트 코드에서는 버튼 A가 눌러지면 도레미파솔라시도가 차례대로 플레이가 되도록 되어 있습니다. 이것을 이번에는 내가 좋아하는 간단한 노래가 플레이 되도록 코딩 해 봅시다.

코딩 프로젝트 2: 흔들림 감지기

프로젝트 개요

이번 프로젝트에서는 micro:bit 보드를 건드리거나 흔들면 경보음이 울리는 코드를 만들어 봅시다.  도난방지기 같이 누군가가 보드를 건드리면 경보음이 울리는 장치를 만드는 것입니다. 코드의 동작은 다음과 같습니다.

  • 코드가 실행되면 “Don’t Touch” 문자열이 스크롤 됩니다.
  • 그 다음에는 아무일도 하지 않고 기다립니다.
  • micro:bit 보드를 건드리거나 흔들면 “하트” 이미지를 LED스크린에 출력합니다.
  • 그리고 “도(C)” 음이 2박자 출력 합니다 .
  • 음 출력 후에는 LED 스크린을 모두 off 합니다.

제대로 코딩이 되었다면 다음과 같이 동작을 할 것입니다.

블럭코딩의 흐름도

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

블럭코딩 하기

제일 먼저 “시작하면 실행” 블럭에서는 “Don’t touch” 문자열을 스크롤 합니다. 이 코드는 다음과 같이 코딩하면 됩니다. 

문자열을 스크롤 한 다음에는 “무한 반복 실행” 블럭을 코딩을 할 것이 없어서 이것은 생략합니다. 대신, 동작을 감지해야 하므로 “움직임 감지하면 실행” 블럭을 사용해서 다음 사항을 코딩해야 합니다. 

  1. LED스크린에 “하트” 아이콘을 출력합니다. 
  2. “도(C)”움을 2박자 출력합니다. 
  3. 소리출력이 끝이나면 LED스크린을 지웁니다. 

위 사항을 블럭으로 코딩 증, 움직임을 감지하는 것은 다음 “움직임 감지하면 실행” 블럭을 사용합니다. 

나머지 전체 블럭 코딩은 다음과 같이 됩니다. 

이렇게 코딩하면 micro:bit를 건드리거나 움직이면 경보기 처럼 동작합니다. 

전체 프로젝트

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

따라해보기

프로젝트 코드에서는 움직임이 감지되면 “도(C)”음으로 2박자 경고음이 울리도록 되어 있습니다. 이것을 약간 변경해 봅시다. 다음과 같이 변경해 봅시다. 움직임이 감지되면:

  • “도(C)”음 1박자 울리기
  • “미(E)”음 1박자 울리기
  • “솔(G)”음 1박자 울리기

위 3음이 차례로 출력되도록 코딩해 봅시다.


코딩프로젝트 3: 뮤직 플레이어 

프로젝트 개요

이번 프로젝트는 간단한 뮤직 플레이어를 만들어 봅시다. micro:bit의 버튼을 누르면 특정한 음악이 플레이 됩니다. 음악은 미리 정할 수 있습니다. 플레이 되는 음악의 숫자도 정할 수 있지만 이 코드에서는 3개의 음악을 플레이 합니다. 버튼을 한번 누를 때마다 정해진 음악을 차례로 플레이 합니다. 동작은 다음과 같습니다.

  1. 코드가 실행되면 “Music Play” 문자열이 스크롤 됩니다.
  2. 그 다음에는 숫자 0을 LED스크린에 출력하고 기다립니다.
  3. 버튼 A가 눌러지면 “결혼식” 음악을 플레이 합니다.
  4. 플레이가 끝이나면 LED스크린에 1이 표시되고 또 기다립니다.
  5. 버튼 A가 다시 눌러지면 “전주곡” 음악을 플레이 합니다.
  6. 플레이가 끝이나면 LED스크린에 2가 표시되고 또 기다립니다.
  7. 버튼 A가 다시 눌러지면 “생일” 음악을 플레이 합니다.
  8. 플레아가 끝이나면 LED스크린에 0이 표시되고 또 기다립니다.
  9. 다시 버튼 A가 눌러지면 3으로 돌아갑니다.

제대로 코딩이 되었다면 다음과 같이 동작을 할 것입니다.


블럭코딩의 흐름도

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

블럭코딩 하기

제일 먼저 “시작하면 실행” 블럭에서는 다음 기능을 수행하도록 코딩합니다. 

  1. “Music Play” 문자열을 LED스크린에 스크롤 합니다.
  2. “음악선택” 이라는 변수를 하나 만들고 “0”을 저장합니다.
  3. 그리고 “음악선택”을 LED스크린에 출력합니다.

위 기능을 코딩하려면 다음과 같은 순서로 코딩하면 됩니다. 우선 “Music Play”스크롤 합니다.

다음에는 “음악선택” 변수에 0을 저장합니다.

그 다음에는 “음악선택” 변수의 값을 LED스크린에 출력한다.

전체 “시작하면 실행” 블럭은 다음과 같습니다.

변수 “음악선택”은 플레이 될 음악의 순서가 저장됩니다. “음악선택”의 값과 플레이 될 음악은 다음과 같습니다.

  1. “음악선택” = 0 -> “결혼식” 음악 플레이
  2. “음악선택” = 1 -> “전주곡” 음악 플레이
  3.  “음악선택” = 2 -> “생일송” 음악 플레이

이 프로젝트에서는 버튼 A를 누르면 음악이 차례로 플레이가 되어야 합니다. 이렇게 하기 위해서 먼저 버튼 A가 눌러지면 “음악선택” 변수가 1씩 증가하도록 코딩을 해 봅시다. 다만 “음악선택” 변수가 2보다 커지면, 예를 들어 3이 되면 안됩니다. 이렇게 코딩하려면 다음과 같이 코딩하면 됩니다.

위 블럭을 설명하면 다음과 같습니다.

  1. 먼저 버튼 A가 눌러지면 “음악선택” 변수를 1 증가 시킵니다.
  2. 그리고 난 후, “음악선택” 변수의 값이 2보다 큰지 조사합니다.
  3. 그래서 2보다 커지면 “음악변수”를 다시 0으로 바꿉니다.
  4. 이렇게 코딩하면 버튼 A가 눌러질 때마다 “음악선택” 변수를 0 -> 1 -> 2 -> 0 방식으로 로테이션 하도록 만들 수 있습니다.

“음악변수”를 로테이션 할 수 있도록 코딩을 했으면 다음에는 이 “음악변수” 값에 따라 음악이 플레이 되도록 코딩 해 봅시다. 예를 들어 “음악변수”값이 1일 경우 “전주곡”이 플레이 되도록 코딩하려면 다음과 같이 코딩하면 됩니다.

위 블럭을 설명하면 다음과 같습니다.

  1. 버튼 A가 눌러지면 먼저 “음악선택” 변수 값을 점검합니다. 그래서 이 값이 1이면 LED스크린에 1을 출력하고 “전주곡”을 플레이 합니다.
  2. 그 다음에는  “음악선택” 변수를 1 증가시킵니다.
  3. 그 다음에는 “음악선택” 값이 2보다 크면 “음악선택” 값을 0으로 만듭니다.

지금까지 “음악선택” 변수가 1인 경우를 코딩했는데, 0과 2일 경우의 코딩을 해 봅시다. 위 그림에서 1번 블럭만 변경하면 됩니다. 코딩은 다음과 같습니다.

전체 프로젝트

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

따라해보기
프로젝트 코드에서 사용한 음악말고 다른 음악을 플레이 되도록 코딩해 봅시다.
 

코딩 프로젝트 4: 모스부호 재생기 

프로젝트 개요

이번 프로젝트에서는 모스부호 재생기를 만들어 보겠습니다. 모스부호는 새뮤얼 핀리 브리즈 모스(Samuel Finley Breese Morse, 1791-1872)가 고안하여 1844년에 완성한 전신 기호입니다. 아파벳이나 한글을 짧은 음 “삐(.)”와 긴음 “삐~( _ )” 두가지의 조합으로 만든 것입니다.  예를 들어 대표적인 조난신호(SOS)는 다음과 같이 표시합니다.

  • SOS: _ _ _  . . . _ _ _ 

모스부호를 사용해서 통신하는 것은 영화 같은 곳에서 가끔 나옵니다. 모스부호 재생기는 이 모스 부호를 발생시키는 장치입니다. 우리가 만들 모스부호 재생기는 다음과 같이 동작합니다. 

  • 코드가 실행되면 “Mose Code” 문자열이 스크롤 됩니다. 
  • 그 다음에는 버튼 A를 길게 누르면 “삐~” 긴 음이 출력되고 
  • 버튼 A를 짧개 누르면 “삐” 하고 짧은 음이 출력됩니다. 

제대로 코딩이 되었다면 다음과 같이 동작을 할 것입니다.

블럭코딩의 흐름도

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

블럭코딩 하기

제일 먼저 “시작하면 실행” 블럭에서는 “Don’t touch” 문자열을 스크롤 합니다. 이 코드는 다음과 같이 코딩하면 됩니다.

그 다음에는 “무한 반복 블럭”을 코딩할 차례입니다. 이번 프로젝트에서는 모르스 코드를 발생시켜야 하므로 블럭코드가 다음과 같이 동작을 해야 합니다. 

  1. 버튼 A가 눌러지는 것을 계속 체크합니다. 
  2. 만약 버튼 A가 눌러졌으면 “도(C)”음을 출력합니다. 
  3. 만약 버튼 A가 눌러지지 않았으면 버저를 off 합니다. 

먼저 버튼 A가 눌러졌는지 체크하고, 버튼 A의 상태에 따라 다르게 동작하는 코드를 만들어 봅시다. 버튼 A가 눌러졌는지 출력하는 블럭은 다음 “버튼 A눌림 상태” 블럭입니다.

이 “버튼 A눌림 상태” 블럭은 버튼 A가 눌러지면 1을, 버튼 A가 눌러지지 않으면 0을 출력합니다. 버튼 A가 눌러진 경우와 눌러지지 않은 경우를 분리해서 동작을 해야하므로 “만약 ~ 이면(then) ~ 아니면(else)”블럭을 사용합니다. 

“만약 ~ 이면(then) ~ 아니면(else)” 블럭은 입력값이 참(즉 1값이면)이면 “이면(then)” 부분이 실행됩니다. 거짓(즉 0값이면)이면 “아니면(else)” 부분이 실행 됩니다.  “무한 반복 블럭”의 전체블럭은 다음과 같이 코딩하면 됩니다. 

위 코드를 설명하면, 먼저 버튼 A가 눌러졌는지를 체크합니다. 그리고 버튼 A가 눌러졌으면  “이면(then)” 부분이 실행이 됩니다. 여기서 사용된 다음 블럭은 “도(C)”음을 버저로 출력합니다. 

만약 버튼 A가 눌러지지 않았다면 버저를 끕니다. 버저를 끄기 위해서 다음 “디지털 출력” 블럭을 사용합니다. 

“디지털 출력” 블럭은 micro:bit의 핀에 0 혹은 1 값을 출력합니다. 버저는 micro:bit의 p0에 연결되어 있기 때문에 p0에 0을 출력하면 버저가 꺼지게 됩니다. 위 그림의 “무한 실행 블럭”은 모르스 발진기처럼 동작합니다. 버튼 A를 누르고 있는 동안은 ‘삐’소리가 나고, 버튼 A를 누르지 않으면 소리가 나지 않습니다.   

전체 프로젝트

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

따라해보기

프로젝트 코드에서는 버튼 A를 누를때 마다 “도(C)”임이 출력되도록 되어 있습니다. 이것을 “솔(G)”음이 나오도록 코딩해 봅시다.


응용해보기

코딩 프로젝트 3에서는 음악 플레이어를 만들었습니다. 버튼을 누르면 차례대로 3개의 음악이 플레이 됩니다. 응용해보기에서는 모두 4개의 음악이 플레이 되도록 코딩을 해 봅시다. 플레이 되는 음악을 3개에서 4개로 바꾸려면 다음 두개의 블럭들을 수정해야 합니다.  먼저 다음 블럭을 추가해야 합니다. 플레이할 음악을 바꾸는 것을 잊지 마세요.

그리고 플레이 되는 음악이 3에서 4개로 늘었으므로 다음 블럭도 수정을 해야 합니다. 동작이 되도록 수정을 해 봅시다.