본문 바로가기
코딩/아두이노

피에조부저 수동, 능동 원리와 아두이노에서의 사용방법

by DIYver 2020. 5. 7.

<다뤄볼 센서>

 

경고 신호를 알려주는데 가장 흔히 사용하는 피에조부저에 대해서 글을 작성해본다.

컴퓨터 부저 비프음을 내는데에도 쓰인다.

 

수동과 능동의 차이는 간단하다.

능동부저는 5V 전원을 연결했을때, 소리가 난다.

수동부저는 5V 전원을 연결해도 소리가 나지 않는다.

 

능동부저는 단순히 소리를 내는데 사용되고,

수동부저는 음계를 사용해 멜로디를 낼 수 있다.

 

 


<센서 원리>

 

피에조부저는 주파수로 제어할 수 있다.

능동 부저는 단순히 +단자와 -단자만 조심히 하고, +단자에 디지털 신호를 주면 소리가 난다.

수동 부저는 음계에 맞는 주파수를 디지털 신호로 주어야한다.

사용되는 음계와 주파수의 관계는 위의 표를 참고하면 된다.

 


<준비물>

 

- 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 점퍼선, 피에조 부저(수동 or 능동)

 

 

 


<회로도>

 

 


<코드>

 

int piezo = 13;
 
void setup() {
  pinMode(piezo, OUTPUT);
}
 
void loop() {

	digitalWrite(piezo, HIGH);
    delay(1000);
    digitalWrite(piezo, LOW);
    delay(1000);

}

(능동 부저의 경우)

 

 

 

int piezo = 13;
 
int numTones = 8;
int tones[] = {261, 294, 330, 349, 392, 440, 494, 523};
 //도 레 미 파 솔 라 시 도
 
void setup() {
  pinMode(piezo, OUTPUT);
}
 
void loop() {
	delay(1000);

    for (int i = 0; i < numTones; i++) {
      tone(piezo, tones[i]);
      delay(500);
    }
    noTone(piezo);
}

(수동 부저의 경우)

 

 

 

int piezo = 13;
 
int numTones = 8;
int tones[] = {261, 294, 330, 349, 392, 440, 494, 523};
 //도 레 미 파 솔 라 시 도

int C = 261;
int D = 294;
int E = 330;
int F = 349;
int G = 392;

int airplane[] = {E,0,0,D,C,0,D,0,E,0,E,0,E,0,0,0,D,0,D,0,D,0,0,0,E,0,G,0,G,0,0,0,E,0,0,D,C,0,D,0,E,0,E,0,E,0,0,0,D,0,D,0,E,0,0,D,C,0,0,0,0,0};
 
void setup() {
  pinMode(piezo, OUTPUT);
}
 
void loop() {
  delay(1000);

    for (int i = 0; i < sizeof(airplane); i++) {
      if(airplane[i] == 0)
      {
        delay(250);
      }
      else
      {
        tone(piezo, 0);
        delay(10);
        tone(piezo, airplane[i]);
        delay(240);
      }
      
      
    }
    noTone(piezo);
}

(수동 부저로 비행기 연주)

 


<실행 결과>

 

능동 부저의 경우 1초동안 부저음이 울리다가 1초동안 울리지 않음을 반복한다.

능동 부저는 단순하게 전원만 연결되면 소리가 나는 것을 확인할 수 있었다.

사용하기가 편하지만, 소리 내는데에 있어서 한계가 있다.

 

 

 

 

수동 부저의 경우 도레미파솔라시도 음계를 계속 반복해서 소리를 재생한다.

수동 부저를 사용하기 위해서는 tone( ) 이라는 함수를 사용해야만 했다.

원리를 따져보면 tone( ) 함수는 해당 핀에 주파수를 부여할 수 있는데,

PWM 과는 차이가 있다.

PWM 제어를 하려면 아두이노에서 사용 가능한 핀들은 하드웨어 적으로 정해져 있다.

하지만 수동 부저는 어느 핀에나 사용할 수 있다는 것이 큰 차이다.

그 차이로는 PWM은 듀티비를 조절하는 것이다, 즉 한 주기에서 HIGH의 비율을 따진다면

주파수는 50%의 듀티비를 가지는 파형으로 1초에 몇번 진동하냐이다.

따라서 어느 핀에서나 사용가능하다.

 

 

 

 

 

수동 부저의 경우 음간 지연시간만 잘 조절한다면 어느 곡이든 재생이 가능하다.

위에 제시해 놓은 비행기 연주는 필자가 직접 알고리즘을 생각해서 만들어 봤다.

한 번 직접 업로딩 해서 테스트 해보시길 추천한다.

이런식으로 악보의 음계만 입력한다면 모든 곡을 수동 부저로 연주할 수 있다!

 

 

 


<고찰>

 

피에조부저로 음계는 소리 낼 수 있지만, 악기처럼 풍부한 소리를 낼 수 없는것이 한계이다.

하지만 저렴하게 아두이노를 통해서 음계 소리를 낼 수 있고, 제어할 수 있다는데에 큰 장점이 있다.

그리고 음계는 주파수가 중요하다는 것을 이번 실험을 통해 알 수 있었다.

 

 

 


※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!

댓글