Buzzer CN

아두위키 : Arduwiki
ArduWiki (토론 | 기여)님의 2025년 3월 27일 (목) 14:30 판 (→‎2. 主动蜂鸣器与轻触开关联动使用)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)


概述

蜂鸣器(Buzzer)是一种产生声音的装置,通常与像Arduino这样的微控制器板一起使用,广泛应用于各种项目中,如播放警告音、提示音或音乐等。蜂鸣器主要分为主动蜂鸣器(Active Buzzer)和被动蜂鸣器(Passive Buzzer)。

主动蜂鸣器与被动蜂鸣器

主动蜂鸣器(Active Buzzer)

主动蜂鸣器内部集成了振荡电路,只需提供电源即可自动发声。控制方式简单,主要用于发出固定频率(无法调节音高)的声音。

  • 控制简单:只需通断电源即可发声。
  • 固定频率:只能发出特定频率的声音。

被动蜂鸣器(Passive Buzzer)

被动蜂鸣器不同于主动蜂鸣器,供电后不会自动发声,必须通过频率控制才能发声。使用PWM(脉冲宽度调制)信号可产生各种频率的声音,适用于播放旋律或不同音调。

  • 控制复杂:需要外部电路或软件进行频率控制。
  • 多种频率:可发出多种频率的声音。

如何区分主动蜂鸣器和被动蜂鸣器

外观上往往难以区分这两种蜂鸣器,因此建议通过简单测试进行判断。

1. 标签与标识

虽然可以通过产品上的标签判断,但因产品不同标识不一,因此不一定可靠。

  • 主动蜂鸣器:通常标有“Active”或特定频率(如“5V 12kHz”)。
  • 被动蜂鸣器:多数不标频率,或标有“Passive”。

2. 测试

最可靠的方法是搭建简单电路进行测试。

  • 主动蜂鸣器:接通电源后立即发声。
  • 被动蜂鸣器:仅接电源不会发声,需输入频率信号后才能发声。

电路连接

蜂鸣器的形状可能因产品不同而有所差异,但原理相同。

若为2引脚类型

  1. 将蜂鸣器的正极(+)连接到Arduino的数字引脚。
  2. 将负极(-)连接到Arduino的GND。

若为3引脚类型

  1. 将蜂鸣器的+引脚(或VCC)连接至Arduino的5V引脚。
  2. 将蜂鸣器的-引脚连接至GND。
  3. 将蜂鸣器的信号引脚连接至Arduino的某个数字引脚。

※ 若使用的型号与下图不同,请确认引脚位置后再进行连接。

使用示例

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;

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(buzzer, tones[i]);
            delay(500);
        }
        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(500);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(500);
        noTone(buzzer);
        tone(buzzer, g_tones[2]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[4]);
        delay(500);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[4]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[5]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[5]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[6]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[5]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[1]);
        delay(500);
        noTone(buzzer);
        tone(buzzer, g_tones[4]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[4]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(500);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[2]);
        delay(500);
        noTone(buzzer);
        tone(buzzer, g_tones[1]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[2]);
        delay(250);
        noTone(buzzer);
        tone(buzzer, g_tones[3]);
        delay(1000);
        noTone(buzzer);
        cnt++;
    }
    else
    {

    }
}

4-3. 运行结果

视频待上传

其他应用示例

蜂鸣器可应用于各种需要声音的项目中:

  • 报警系统:当满足特定条件时发出警告音
  • 计时器:提示时间到的声音
  • 音乐播放:播放简单旋律或音效的装置
  • 游戏:用于游戏中的音效或胜负提示音