아두이노 Piezo Buzzer(피에조부저)

 

이번 포스팅 에서는 Piezo Buzzer로 소리내는 법을 알아보겠습니다.

부저는 압전효과에 의해서 음향을 출력하는 전자 부품으로, 

수많은 전자기기에서 경고음, 알람, 멜로디등의 소리를 낼 때 주로 사용이 됩니다. 

 


 

부저를 자세히 보게되면 +, - 극성이 나뉘어져 있다는 것을 알 수 있습니다.

회로를 연결할 때는 반드시 극성에 맞게 연결을 해 주어야 합니다.

LED와 마찬가지로 다리가 긴 쪽이 + 극성을 나타냅니다. 

 


 

위와 같이 기본적인 회로를 구성해 봅니다.

저항은 330옴을 사용하였습니다. 

 

_____________________________________________​________________________

 

int buzzer = 9;


void setup() {
    pinMode(buzzer, OUTPUT);
}

void loop() {
    digitalWrite(buzzer, HIGH);
    delay(1000);
    digitalWrite(buzzer, LOW);
    delay(1000);

} 

 

_____________________________________________​________________________

 

스피커는 출력장치 이기 때문에 LED를 켤 때와 코드는 같습니다.

위와 같이 코드를 넣으면 "딱딱딱딱......." 소리가 탑니다. 

 

_____________________________________________​________________________

 

int buzzer = 9;


void setup() {
    pinMode(buzzer, OUTPUT);
}

void lood() {
    tone(buzzer, 262, 500);
   delay(500);
    tone(buzzer, 294, 500);
   delay(500);
    tone(buzzer, 330, 500);
   delay(500);
    tone(buzzer, 349, 500);
   delay(500);
    tone(buzzer, 392, 500);
   delay(500);
    tone(buzzer, 440, 500);
   delay(500);
    tone(buzzer, 494, 500);
   delay(500);
    tone(buzzer, 523, 500);
   delay(500);

} 

_____________________________________________​________________________

 

이번 코드는 "도레미파솔라시도"를 출력해보는 코드 입니다.

tone함수가 새롭게 등장 했습니다.

tone함수는 
tone(핀번호 혹은 이름음의 높낮이음의 지속시간)
핀의 이름은 buzzer였고 음의 지속시간은 500(0.5초)로 고정해 두었습니다
"도레미파솔라시도" 부분은 음의 높낮이 인데요 음계의 주파수를 넣어서 나타냅니다.

아래 표는 주파수에 따른 음계표 입니다. 

 


 

 

음계를 표현할 수 있기 때문에 악보를 연주 할 수 있습니다.

아래는 음계의 주파수와 부저를 이용해서 슈퍼마리오 BGM을 연주한 영상 입니다.

악보를 연주하는 것이기 때문에 음계 말고도 여러 사항을 고려 해야 하는데요

tone함수와 delay함수를 이용해서 연주를 하였습니다. 

 

_____________________________________________​________________________

 

int buzzer = 9;

int scale[2][7] = {{262,294,330,349,392,440,494},
                            {523,587,659,699,784,880,988}};
int duration = 80;        //음의 지속시간 (ms)
int delaytime = 200;    //delay 시간  (ms)
 

void setup() {
  pinMode(buzzer,OUTPUT); 
}

 

void loop() { 

  tone(buzzer,scale[1][2],duration);
  delay(delaytime-50);
  tone(buzzer,scale[1][2],duration);
  delay(delaytime-100);
  tone(buzzer,scale[1][2],duration*1.5);
  delay(delaytime*1.5);
  tone(buzzer,scale[1][0],duration);
  delay(delaytime);
  tone(buzzer,scale[1][2],duration);
  delay(delaytime);
  tone(buzzer,scale[1][4],duration*1.5);
  delay(delaytime*1.5);
  tone(buzzer,scale[0][4],duration);
  delay(delaytime*2); 

.............

 

_____________________________________________​________________________

 

위 코드에서는 4옥타브와 5옥타브 음계를 scale 이라는 이차원 배열에 넣어서 사용 했습니다.

(배열에 관해서는 나중에 기회가 되면 자세히 포스팅 하겠습니다)

여기서는 배열을 "같은 종류의 데이터 집합" 이라고 생각하고 넘어가면 될 듯 합니다.

나머지 코드는 첨부파일을 확인해 보시면 됩니다. 

 

 

인터넷에 검색을 해보면 부저를 이용한 더욱 다양한 예제가 있으니 참고해 보시기 바랍니다.

 

 

  •  112,899
  •  2
  •  0

오타발견 2019-01-15 00:23:17

lood() -> loop()

질문 2020-09-17 09:40:06

피에조부저를 이용해 스위치로 소리 재생, 정지를 하고 싶습니다.


댓글을 남겨 주세요.