본문 바로가기

아두이노(arduino)

아두이노 부저(BUZZER) 사용 / 능동부저 , 수동부저 차이점

부저(BUZZER)란?

소리를 발생시키는 장치입니다. 아두이노를 다루시는 분들은 피에조 부저라는 이야기를 많이 들어보셨을 겁니다. 여기서 피에조란 그리스어에서 유래된 말로 '누른다'라는 뜻을 가지고 있습니다.  (piezein)

 

압력 >> 전기 발생  (압전효과)

 

말을 하면 우리는 귀를 통해 들을 수 있습니다.  바로 음성이 공기의 압력을 발생시키고 이를 통해  전기적 신호가 발생하게 됩니다.  부저는 이와 반대로 전기적신호를 이용해 압력을 발생시키고 소리게 나게 됩니다.

 

전자 제품의 음향장치를 일컫는 말로 우리주위에 사용되는 제품 중 경보기, 자동차에 달려 있는 전자 장비, 아이들이 가지고 노는 완구 등 사회 전반에 걸쳐 많이 사용됩니다.

 

주파수 : 1초 동안 진동하는 수

가청 주파수 :  사람이 들을 수 있는 소리(즉, 떨림으로 인해 나는 소리 )  20Hz~ 20,000Hz (단위 헤르츠)

 

 

능동부저와 수동부저의 차이점

능동부저 수동부저
음이 하나 밖에 없다. 주파수 범위 내에 다양한 음을 출력할 수 있다.
다리의 길이가 다르다 다리의 길이가 같다.
전원만 공급해도 바로 소리가 난다. 전원뿐만 아니라 주파수까지 알려줘야 소리가 난다.(tone) 

 

특정음악이나, 원하는 멜로디를 연주하고 싶다.  (수동부저)

 

위험을 알리는 경고음이나, 단순히 신호음만 보내기 위해 사용한다 (능동부저)

 

 

 

부저 회로도

 

능동부저 수동부저 회로도는 동일하며, +는 핀번호에, -는 gnd에 연결해 주면 됩니다.

 

 

 

 

부저 사용에 필요한 함수

수동부저
tone(pin, frequency);  

tone 함수 안에는 두 가지 정보가 입력되어야 합니다. 첫 번째 pin에는 부저를 연결한 핀번호(아두이노에 꽂은 핀번호) 그리고  frequency는 주파수를 뜻합니다. 즉 음계를 입력해야 하는 것이죠.

 

또는 이렇게도 사용할 수 있습니다.

 

tone(pin, frequency, dtime);

 

뒤에 dtime(음의 지속시간)이 있습니다.  만약에 음의 지속 시간을 설정하지 않으면,  또 그다음 소리를 내는 tone 함수가 실행됩니다. (다음 tone함수가 없고, noTone함수가 실행되지 않으면 계속 소리가 남)

 

 

noTone(pin);

tone함수와 반대로 noTone함수입니다. 말 그대로 소리를 내지 않겠다는 것인데요, 안에 들어가 있는 pin번호는 해당핀번호의 소리를 내지 않겠다는 뜻입니다. 

 

능동부저
digitalWrite(pin, HIGH or LOW);

능동부저는 수동부저와 반대로 그냥 전기만 흐르게 한다면 소리가 바로 나게 됩니다. HIGH이면 소리가 나고, LOW이면 소리가 나지 않게 됩니다. 

 

 

 

 

 

 

 

부저 코드로 작동시켜 보기

 

수동부저

 

 

void setup(){

 

    pinMode(5, OUTPUT);    // 5번 핀을 출력 핀으로 설정

}

 

void loop(){

 

        tone(5, 262);          // 도 (여기서 262는 주파수)

        delay(500);             //0.5초 대기

 

        tone(5, 294);         //레

        delay(500);             //0.5초 대기

 

        tone(5, 330);         //미 

        delay(500);             //0.5초 대기

}

 

 

 

 

 

 

 

 

능동부저

 

 

 

void setup(){

 

    pinMode(5, OUTPUT);

}

 

void loop(){

 

       digitalWrite(5, HIGH);  // 소리를 낸다

       delay(500);             //0.5초 대기

 

       digitalWrite(5, LOW);  // 소리를 내지 않는다. 

       delay(500);             //0.5초 대기

 

}