카테고리 없음

arduino 피에조 스피커 사용해보자.

abc0123 2017. 9. 14. 18:08
반응형

arduino 피에조 스피커

피에조 스피커는 우리가 흔히 알고 있는 '버저'를 말하는데 전기 신호를 보내면 진동판이 떨리면서 소리를 내는 가장 기본적인 형태의 스피커이다. 이번 글에서는 이 녀석에게 전기 신호를 보내서 소리를 내는 과정을 살펴보고 바로 앞글에서 알아봤던 버튼을 설치해서 그것을 누를 때마다 소리가 나도록 하는 프로그램을 작성해보자.

 

이번 예제를 실행하기 위한 준비물로는 피에조 스피커와 몇 개의 연결선 그리고 버튼과 저항 등이다.

 

준비물

 

아두이노를 잠깐이라도 봤으면 모두 알겠지만 스케치 프로그램에서는 여러 가지의 예제 소스를 제공하고 있는데 여기에 포함되어 있는 [toneMelody]라는 기본 예제를 아두이노 보드에 업로드해서 어떤 소리가 흘러나오는지 들어보기 위해서 다음과 같은 회로를 만들어보자.

 

 

회로

 

▲ 그라운드(GND)에서 음극(-)의 전류가 흘러나가고 디지털 2번 핀에서 양극(+)의 전류를 흘려보내고 있다. 이제 스케치 프로그램에 있는 toneMelody 예제를 찾아서 아두이노 보드에 올려보자.

 

ToneMelody

 

▲ 예제는 위 그림처럼 [파일 > 예제 > Digital > toneMelody] 순서로 찾으면 되고 파일을 열어서 그 내용을 간단히 살펴보면....

 

소스코드

 

▲ 먼저 pitches.h 헤더 파일을 추가하고 있는데 이 파일에는 음의 피치(높이) 값이라는 게 정의되어 있다. 이 멜로디 값들에 대한 내용은 따로 정리하기로 하고 일단 이번 글에서는 그런 파일이 있다는 정도만 정리하자. 그리고 tone() 함수를 이용해서 소리를 만들 때는 이 파일이 꼭 필요하다는 정도만 알자.

 

다음으로 두 개의 배열(melody, noteDurations)을 선언해서 멜로디와 그 길이 값들로 초기화를 했는데 멜로디는 pitches.h 파일 안에 들어 있는 것들이며 음의 길이는 4분 음표와 8분 음표를 표시하고 있다.

 

그리고 처음 한 번만 실행되는 setup() 함수에서 fo r문을 이용해서 앞에서 선언한 배열에 순차적으로 접근해서 그 값들을 핀의 번호(2)와 함께 tone() 함수의 인자로 전달하고 있으며 각 음을 구별하기 위해서 딜레이 시간을 둔 후 해당 음이 멈추도록 하고 있다. 이 setup() 함수는 최초 1회만 실행되기 때문에 이 멜로디는 한 번만 울리고 말 것이다. 이제 업로드해서 소리를 들어보자.

 

 

 

▲ 너무나도 익숙한 멜로디가 흘러나온다. 요즘 어린 친구들은 모를 수도 있겠지만 예전 오락실 게임 중 '너구리'라는 게임에서 녀석이 죽었을 때 듣던 친숙한 멜로디다.ㅎㅎ 여하튼 이렇게 피에조 스피커를 이용해서 간단한 소리를 출력할 수가 있는데 다음은 버튼을 하나 설치해서 그걸 누를 때만 소리가 나도록 회로를 만들고 코딩을 해보자.

 

전체구조

 

아두이노 버튼을 설치하는 과정은 바로 앞글버튼을 참고하면 좀 더 자세히 알 수 있을 테니 이번 글에서는 전체적으로만 정리하기로 한다. 먼저... 스피커로 전류를 흘려보내는 건 바로 위에서 했던 대로 2번(흰색선) 핀에 그대로 두었다. 그리고 버튼을 눌렀을 때 그 입력신호를 받기 위해서 4번 핀에 버튼을 연결했으며 버튼으로 5V 전류를 흘려보내기 위해서는 검은색 선을 사용했다.

 

4번 핀

 

빵판 버튼

 

▲ 빵판의 그라운드 음극(-)은 빨간선으로 연결 한 후 스피커로 가는 선(녹색), 버튼으로 가는 선(주황색)을 각각 연결했다. 그리고 이전 글에서 정리했듯이 '플로팅' 현상을 대비하기 위해서 버튼과 음극(-) 사이에 저항을 하나 넣었다. 이제 버튼을 눌렀을 때 너구리 사망(?) 멜로디가 한 번만 실행되도록 if 문을 활용해서 loop() 함수를 작성해본다.

 

 

if문 활용

 

▲ 앞의 예제와는 다르게... 시작과 동시에 멜로디가 울리지 않도록 for 문은 loop() 함수로 빼고 setup() 함수에는 스피커로 나갈(OUTPUT) 전류와 버튼 값을 입력받기(INPUT) 위한 준비를 했다. loop() 함수에서는 if 문을 이용해서 만약 4번 디지털 핀으로 HIGH 값이 들어온다면(버튼이 눌렸다면) 앞에서 준비한 멜로디가 한 번 울리도록 실행하고 있는 모습이다.

 

이제 이 소스 코드를 아두이노 보드에 올리고 버튼을 눌러보자.

 

 

이렇게 해서 피에조 스피커를 이용해서 소리를 출력하는 예제를 만들어봤는데 음악에 대한 지식이 부족한 관계로 pitches.h 안에 들어있는 음의 높이 값들과 길이 계산하는 방법 등은 좀 더 깊이 들여다 봐야겠지만 하나씩 만들어가는 재미가 쏠쏠하다.

반응형