[아두이노야 놀자]<13>버저로 멜로디 만들기

버저.
<버저.>

'부~' 소리나는 버저를 이용해서 산뜻한 멜로디를 재생하는 프로젝트를 만들어봅시다. 버저 풀네임은 '피에조 버저'입니다. 버저는 멜로디 카드나 필통에 붙어있는 게임기처럼 간단한 멜로디를 들려줄 때 쓰기도 하고 단순한 신호음으로 쓰이기도 합니다.

버저를 이용해 멜로디를 만들어 봅시다. 만화영화 '이웃집 토토로'에서 들을 수 있는 곡입니다. 준비물은 아두이노(UNO), USB 케이블 각 1개씩, 저항 330옴 1개, 버저입니다. 엔트리 코딩을 시작합니다. 먼저, 버저를 제어하는 블록을 사용하기 위해 '아두이노 Uno 확장모드'를 선택해야 합니다.

[그림 1] 속성 추가.
<[그림 1] 속성 추가.>

[그림 1]과 같이 신호 두 개, 변수 두 개, 리스트 두 개를 추가합니다. '빠르기', '박자' 변수 초기 값은 각 0.25, 1입니다.

[그림 2] 함수 추가.
<[그림 2] 함수 추가.>

멜로디를 연주하기 위해 [그림 2]와 같이 함수를 추가합니다. '문자·숫자 값' 블록(매개변수)은 세 개가 필요합니다.

[그림 3] 연주할 수 있도록 코딩하기.
<[그림 3] 연주할 수 있도록 코딩하기.>

복잡해 보이지만 거의 다 같은 코드입니다. [그림 3]과 같이 문자·숫자 값 1번은 디지털 핀, 2번은 계이름, 3번은 옥타브(노래로 치면 8키 간격)를 받아서 연주하기 블록에 적용합니다. 핀을 하나만 사용해도 된다면 굳이 함수 매개변수를 쓰지 않아도 됩니다. 만일 계이름 부분에 계이름이 아닌 0이 들어가면 연주 중이던 음을 무음으로 만듭니다.

악보 역할을 할 리스트 값을 입력합시다. 이 작업은 나중에 해도 괜찮습니다. 꽤 오래 걸릴 수 있습니다. 0은 쉼표, 1은 붙임줄 역할을 합니다. 0이 있는 항목에서만 연주를 중단하게 만들었습니다.

[그림 4] 주기적으로 신호보내기.
<[그림 4] 주기적으로 신호보내기.>

[그림 4]에서 시작하기 버튼을 클릭하면 '빠르기' 값인 0.25초마다 신호를 보냅니다. 저는 반주도 만들었기 때문에 간편하게 둘 다 넣었지만 하나의 버저만 연주할 수 있어 신호는 하나만 보내도 됩니다. '박자' 변수는 박자에 리스트 항목 수를 나눈 나머지에 1을 더한 값으로 정합니다. 이렇게 하면 '박자' 변수는 80 다음에 다시 1로 돌아올 수 있습니다.

[그림 5] 멜로디 연주하기.
<[그림 5] 멜로디 연주하기.>

신호를 받으면 다음 코드를 실행합니다. 왜 신호를 받아서 실행하도록 만들었을까요? 함수 내 '~초 동안 연주하기' 블록이 '~초 동안 기다리기'와 같은 역할을 하기 때문에 신호를 거치지 않고 사용하면 다음 코드를 바로 실행하지 못하기 때문입니다. 물론 '신호 보내고 기다리기'를 사용했다면 같은 문제가 생기겠지만요.

리스트에서 재생할 순서 내용이 한 글자라면 그 글자 소리를 냅니다. 만일 두 글자 이상이라면 계이름 옆에 -1 등의 숫자가 붙었을 것이므로, 그 숫자만큼 옥타브를 올리거나 내려야 합니다. 이렇게 해서 버저의 소리를 옥타브까지 조절할 수 있게 됩니다.

김지원 커넥트재단 연구원

위방향 화살표