피에조 부저 ( Piezo Buzzer )

 

-얇은 금속판을 주기적으로 떨리게하여서 소리를 출력하는 소형 부품
 
-Passive형 : 떨림판과 자석만 있어 아두이노의 tone이라는 함수를  통해 특정 주파수 신호를 보내면 그 주파수에 해당하는 소리가 나게 된다.

 

-Active형: 떨림판과 자석 이외에 내장된 진동 회로가 있어 외부에서 전원만 인가해 주면 자동으로 소리가  나는 방식. 사용이 간편하지만 미리 지정된 주파수 소리만 낼 수 있다.

 

 

 

아두이노와 연결

 

아두이노의 여러 출력핀을 사용할 수 있지만 2번핀에 부저의 +극을 연결하고,  -극은 GND에 연결한다.

 

 

 

 

테스트 프로그램

 

  1. int BuzzerPin= 2; // 사용할 포트 핀번호  
  2. int num = 8; // 몇개의 음을 사용할 것인지  
  3. int tones[] = {261,293,329,349,391,440,493,523}; // 음계별 주파수  
  4. void setup()  
  5. {  
  6. }  
  7. void loop()  
  8. {  
  9.     for ( int i=0; i < num; i++ ) {  
  10.        tone(BuzzerPin,tones[i],1000);  
  11.        delay(1000);  
  12.     }  
  13.     noTone( BuzzerPin);  
  14.     delay(3000);  
  15. }  

 

10 line : tone(포트,주파수,길이)함수 : 지정포트로 지정 주파수 신호를 길이(1/1000초단위)로  출력하여 소리가 나도록 한다.

9~12 line : 배열의 순서대로 주파수 숫자를 가져와서 1초씩 소리나도록 tone함수를 호출한다 

13 line : noTone(포트)함수 : 지정하는 포트의  출력 끄기

 

 

 

참조 : 음계별 주파수

 

위와 같이 음계별로 주파수를 알 수 있고, 음의 주파수와 길이를 tone함수로 임의 지정할 수 있으므로 간단한 피에조 부저로도 원하는 음악을 연주하는 프로그램을 작성할 수 있다.  아래는 응용 프로그램의 예로서 비행기 동요를  연주한다.

 

  1. int BuzzerPin=2;   
  2. int play[]={440,391,349,391,440,440,440,391,391,391,440,440,440,  
  3. 440,391,349,391,440,440,440,391,391,440,391,349}; // 비행기 노래  
  4. int num=25;  
  5.   
  6. void setup() {  
  7. }  
  8.   
  9. void loop() {  
  10.  for (int i=0;i < num; i++){  
  11.    if(i==0||i==13||i==22){  
  12.       tone(BuzzerPin,play[i],375);  
  13.       delay(375);  
  14.     }   
  15.     else if (i==1||i==14||i==23){  
  16.       tone(BuzzerPin,play[i],250);  
  17.       delay(250);  
  18.     }   
  19.     else if (i==6||i==9||i==12||i==19){  
  20.       tone(BuzzerPin,play[i],1000);  
  21.       delay(1000);  
  22.     }   
  23.     else if(i==24){  
  24.       tone(BuzzerPin,play[i],2000);  
  25.       delay(2000);  
  26.     }  
  27.     else {  
  28.       tone(BuzzerPin,play[i],500);  
  29.       delay(500);  
  30.     }  
  31.  }  
  32.  noTone(BuzzerPin);  
  33.  delay(3000);  
  34. }  

 

 

 

 

 

+ Recent posts