부저(Buzzer)

아두위키 : Arduwiki
ArduWiki (토론 | 기여)님의 2024년 7월 10일 (수) 17:59 판

개요

부저(Buzzer)는 소리를 발생시키는 장치로, 아두이노와 같은 마이크로컨트롤러 보드와 함께 사용되어 다양한 프로젝트에서 경고음, 알림음, 음악 등을 재생하는 데 활용됩니다. 부저는 크게 능동 부저(Active Buzzer)와 수동 부저(Passive Buzzer)로 나뉩니다.


능동 부저와 수동 부저

능동 부저 (Active Buzzer)

능동 부저는 내부에 발진 회로가 내장되어 있어 전원을 공급하면 자동으로 소리를 발생시킵니다. 제어가 간단하며, 주로 일정한 주파수(음의 높낮이 조절없이 한 가지)의 소리를 내는 데 사용됩니다.

  • 간단한 제어 : 단순히 전원을 켜고 끄는 것으로 소리를 발생시킵니다.
  • 일정한 주파수 : 특정 주파수의 소리만 발생시킵니다.

수동 부저 (Passive Buzzer)

수동 부저는 전원 공급 시 자동으로 소리를 내는 능동 부저와 달리 주파수를 제어해야 소리를 발생시킵니다. PWM(Pulse Width Modulation) 신호를 사용하여 다양한 주파수의 소리를 생성할 수 있어, 멜로디나 다양한 음을 재생하는 데 유용합니다.

  • 복잡한 제어 : 외부 회로나 소프트웨어적으로 주파수를 제어해야 합니다.
  • 다양한 주파수 : 다양한 주파수의 소리를 발생시킬 수 있습니다.

능동 부저와 수동 부저의 구분

능동 부저와 수동 부저는 외관 상으로는 구분하기 어려울 수 있습니다. 대신 간단한 테스트를 통해 구분합니다.

1. 레이블 및 마킹

외관으로 구분하는 방법이지만, 제품에 따라 표기가 다를 수 있어 확실한 방법은 아닙니다.

  • 능동 부저 : 보통 "Active" 또는 특정 주파수(예: "5V 12kHz")가 표시된 라벨이 붙어 있을 수 있습니다.
  • 수동 부저 : "Passive" 또는 주파수 표시가 없는 경우가 많습니다.

2. 테스트

가장 확실한 방법은 간단한 회로를 구성하여 테스트를 통해 구분하는 것입니다. 아래 기술된 예제들을 참고하세요.

  • 능동 부저 : 전원을 연결하면 바로 소리가 납니다.
  • 수동 부저 : 전원을 연결해도 소리가 나지 않으며, 주파수 신호를 입력해야 소리가 납니다.

회로 구성

제품에 따라 부저 형태는 다를 수 있으나, 같은 원리로 회로를 구성합니다.

핀이 2개인 경우

  1. 부저의 + 단자를 아두이노의 디지털 핀에 연결합니다.
  2. 부저의 - 단자를 아두이노의 GND에 연결합니다.


핀이 3개인 경우

  1. 부저의 + 단자(혹은 VCC)를 아두이노의 5V 핀에 연결합니다.
  2. 부저의 - 단자를 아두이노의 GND에 연결합니다.
  3. 부저의 디지털 핀 단자를 아두이노에서 사용할 디지털 핀에 연결합니다.

예제

1. 능동 부저 제어

회로 구성은 가지고 계신 부저 제품에 따라 위 항목을 참고하세요.

1-1. 코드

#define buzzer 6
#define btn 12

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

void loop() {
  if (!digitalRead(btn)) {
    for (int i = 0; i < 6; i++) {
      digitalWrite(buzzer, !digitalRead(buzzer));
      delay(100);
    }
  }
  delay(10);
}

수동 부저 제어 (멜로디 재생)

수동 부저로 멜로디 재생

활용 예제

부저는 다양한 프로젝트에서 활용됩니다:

  • 알람 시스템: 특정 조건이 만족될 때 경고음을 울리는 시스템.
  • 타이머: 시간 경과를 알리는 소리.
  • 음악 재생: 간단한 멜로디나 효과음을 재생하는 장치.
  • 게임: 게임에서의 효과음이나 승리/패배 알림음.

문제 해결

부저 소리가 나지 않을 때

  • 연결 확인: 부저의 핀 연결이 올바른지 확인합니다.
  • 코드 확인: 코드에서 부저 핀이 올바르게 설정되었는지 확인합니다.
  • 전원 확인: 아두이노 보드에 충분한 전원이 공급되고 있는지 확인합니다.

부저 소리가 이상할 때

  • 주파수 조정: 수동 부저의 경우, 주파수가 올바르게 설정되었는지 확인합니다.
  • 하드웨어 문제: 부저 자체에 문제가 있는지 확인하기 위해 다른 부저로 교체해봅니다.

원하는 주파수 값을 인가하여 소리를 나게 하는 소자입니다.

3.3V ~ 5V 에서 작동합니다.

필요 하드웨어

연결

극성이 존재하기 때문에 +, - 단자를 잘 확인해야 합니다.

D11 대신 다른 디지털 핀에 연결해도 무방합니다.

buzzer Arduino UNO
+단자 D11(변경 가능)
-단자 GND

예제 코드

참고자료 : 옥타브 및 음계별 표준 주파수


예제1. 음계 테스트

#define buzzer 11
int numTones = 8;

//순서대로 (4옥도,4옥레,4옥미,4옥파,4옥솔,4옥라,4옥시,5옥도)
double tones[] = { 261.6256, 293.6648, 329.6276, 349.2282, 391.9954, 440, 493.8833, 523.2511 };

int cnt = 0;

void setup()
{

}

void loop()
{
    if (cnt == 0)
    {
        for (int i = 0; i < numTones; i++)
        {
            //tone(핀번호, 주파수)로 사용합니다.
            tone(buzzer, tones[i]);
            delay(500);
        }
        //noTone함수를 사용하지 않을 시 이전에 입력된 tone함수가 계속 실행이 되므로 
        //noTone함수로 소리를 꺼줍니다.
        noTone(buzzer);
        delay(500);
        cnt++;
    }
}


예제2. 간단한 멜로디

#define buzzer 11

int numTones = 8;
double g_tones[] = { 195.9977, 220, 246.9417, 261.6256, 293.6648, 329.6276, 349.2282, 391.9954 };
//솔0,라1,시2,도3,레4,미5,파6,솔7
int cnt = 0;

void setup()
{

}

void loop()
{
    if (cnt == 0)
    {
        tone(buzzer, g_tones[0]);
        delay(250 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(250 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[2]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[4]);
        delay(250 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[4]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[5]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[5]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[6]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[5]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[1]);
        delay(250 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[4]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[4]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(250 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[2]);
        delay(250 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[1]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[2]);
        delay(125 * 2);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(250 * 4);
        noTone(buzzer);
        cnt++;
    }else
    {

    }
}

구매링크