부저(Buzzer)

아두위키 : Arduwiki


개요

부저(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. 능동 부저 제어

능동 부저가 3번 울리는 예제입니다.

1-1. 회로 구성

아래 사진은 핀이 3개인 제품을 사용할 때 예시이지만, 핀이 2개인 제품을 사용하신다면 위 하드웨어 연결 항목을 참고하여 결선해주세요.

1-2. 코드

const int iopin = 7;

void setup() {
  pinMode(iopin, OUTPUT);
  digitalWrite(iopin, HIGH);
  for (int i = 0; i < 3; i++) {
    digitalWrite(iopin, LOW);
    delay(500);
    digitalWrite(iopin, HIGH);
    delay(500);
  }
}

void loop() {
  delay(10);
}


1-3. 실행 결과


2. 능동 부저와 택트 스위치 혼합 활용

택트 스위치를 누르면 능동 부저가 소리를 발생시키는 예제입니다.

2-1. 회로 구성

해당 예제에서는 택트 스위치 연결 시 INPUT_PULLUP 저항을 활용합니다.

PULLUP, PULLDOWN, INPUT_PULLUP 저항에 대한 자세한 설명은 택트 스위치 문서를 참고해주세요.

2-2. 코드

#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);
}


2-3. 실행 결과


3. 수동 부저 제어로 음계 재생

수동 부저는 능동 부저와 달리 주파수를 제어하여 음을 다르게 표현할 수 있습니다.

도레미파솔라시도 음계를 순서대로 재생하는 예제입니다.

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


3-1. 회로 구성

하드웨어 연결 탭의 회로를 참고하세요.


3-2. 코드

#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++;
    }
}


3-3. 실행 결과


4. 수동 부저 제어로 멜로디 재생

수동 부저로 간단한 멜로디를 재생하는 예제입니다.

본 예제를 바탕으로 다른 멜로디를 재생하도록 변형이 가능합니다.

4-1. 회로 구성

하드웨어 연결 탭의 회로를 참고하세요.


4-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
    {

    }
}


4-3. 실행 결과

영상 첨부 예정


기타 활용 예시

부저는 소리가 필요한 다양한 프로젝트에서 활용될 수 있습니다.

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


구매링크