Arduino 第七章:蜂鸣器

Arduino 第七章:蜂鸣器

引言

在之前的章节中,我们学习了 Arduino 的数字输入输出、串口通信、模拟输入输出等功能。在实际的 Arduino 项目里,声音也是一种重要的交互方式。蜂鸣器作为一种常见且简单的发声设备,能发出不同频率和节奏的声音,可用于报警、提示等场景。在这一章,我们将详细探讨如何使用 Arduino 控制蜂鸣器。

蜂鸣器的类型及工作原理

类型

蜂鸣器主要分为有源蜂鸣器和无源蜂鸣器。

有源蜂鸣器

有源蜂鸣器内部自带振荡源,只要给它加上合适的直流电压,就能发出固定频率的声音。其优点是驱动简单,缺点是发声频率固定,无法调节。

无源蜂鸣器

无源蜂鸣器内部没有振荡源,需要外部提供一定频率的脉冲信号才能发声。通过改变输入脉冲信号的频率,可以改变蜂鸣器发出声音的音调,因此使用起来更加灵活。

工作原理

有源蜂鸣器在通电时,内部的振荡电路产生固定频率的电信号,驱动压电陶瓷片或电磁线圈振动发声。

无源蜂鸣器则是基于电磁感应原理或压电效应。当外部施加的脉冲信号使电磁线圈产生交变磁场,或者使压电陶瓷片产生机械振动时,蜂鸣器就会发声。

硬件连接

有源蜂鸣器连接

  • 找到有源蜂鸣器的正负极,通常长脚为正极,短脚为负极。
  • 将蜂鸣器的正极通过一个 220Ω - 1KΩ 的电阻连接到 Arduino 的数字引脚(例如引脚 8),负极连接到 Arduino 的 GND 引脚。电阻的作用是限流,防止电流过大损坏蜂鸣器和 Arduino。

无源蜂鸣器连接

  • 无源蜂鸣器没有正负极之分。
  • 同样将蜂鸣器的一个引脚通过一个 220Ω - 1KΩ 的电阻连接到 Arduino 的数字引脚(例如引脚 9),另一个引脚连接到 Arduino 的 GND 引脚。

控制有源蜂鸣器的代码实现

在这里插入图片描述

// 定义蜂鸣器连接的引脚
const int buzzerPin = 9;

void setup() {
  // 将蜂鸣器引脚设置为输出模式
  pinMode(buzzerPin, OUTPUT);
}

void loop() {
  // 点亮蜂鸣器
  digitalWrite(buzzerPin, HIGH);
  // 延迟 1000 毫秒(1 秒)
  delay(1000);
  // 关闭蜂鸣器
  digitalWrite(buzzerPin, LOW);
  // 延迟 1000 毫秒(1 秒)
  delay(1000);
}

代码解释

  • 变量定义const int buzzerPin = 9; 定义了蜂鸣器连接的引脚为数字引脚 9。
  • setup() 函数pinMode(buzzerPin, OUTPUT); 将引脚 9 设置为输出模式,以便向蜂鸣器发送信号。
  • loop() 函数
    • digitalWrite(buzzerPin, HIGH); 向引脚 9 输出高电平,使蜂鸣器发声。
    • delay(1000); 程序暂停 1 秒,让蜂鸣器持续发声 1 秒。
    • digitalWrite(buzzerPin, LOW); 向引脚 9 输出低电平,关闭蜂鸣器。
    • delay(1000); 程序再暂停 1 秒,让蜂鸣器保持关闭状态 1 秒。

控制无源蜂鸣器的代码实现

在这里插入图片描述

// 定义蜂鸣器连接的引脚
const int buzzerPin = 9;

void setup() {
  // 将蜂鸣器引脚设置为输出模式
  pinMode(buzzerPin, OUTPUT);
}

void loop() {
  // 以 1000Hz 的频率发声 1 秒
  tone(buzzerPin, 1000);
  delay(1000);
  // 停止发声
  noTone(buzzerPin);
  delay(1000);
}

代码解释

  • 变量定义const int buzzerPin = 9; 定义了蜂鸣器连接的引脚为数字引脚 9。
  • setup() 函数pinMode(buzzerPin, OUTPUT); 将引脚 9 设置为输出模式。
  • loop() 函数
    • tone(buzzerPin, 1000); 调用 tone() 函数,向引脚 9 输出频率为 1000Hz 的脉冲信号,使蜂鸣器发出 1000Hz 的声音。
    • delay(1000); 程序暂停 1 秒,让蜂鸣器持续发声 1 秒。
    • noTone(buzzerPin); 调用 noTone() 函数,停止向引脚 9 输出脉冲信号,使蜂鸣器停止发声。
    • delay(1000); 程序再暂停 1 秒,让蜂鸣器保持安静 1 秒。

综合应用:播放简单旋律

// 定义蜂鸣器连接的引脚
const int buzzerPin = 9;

// 定义音符频率
int melody[] = {262, 294, 330, 349, 392, 440, 494, 523};
// 定义每个音符的持续时间
int noteDurations[] = {4, 4, 4, 4, 4, 4, 4, 4};

void setup() {
  // 将蜂鸣器引脚设置为输出模式
  pinMode(buzzerPin, OUTPUT);
}

void loop() {
  // 遍历每个音符
  for (int thisNote = 0; thisNote < 8; thisNote++) {
    // 计算音符的持续时间
    int noteDuration = 1000 / noteDurations[thisNote];
    // 播放当前音符
    tone(buzzerPin, melody[thisNote], noteDuration);
    // 音符之间的间隔时间
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // 停止发声
    noTone(buzzerPin);
  }
  // 整首旋律播放完后暂停 2 秒
  delay(2000);
}

代码解释

  • 变量定义
    • const int buzzerPin = 9; 定义蜂鸣器连接的引脚。
    • int melody[] 数组存储了不同音符的频率,例如 262Hz 对应音符 C。
    • int noteDurations[] 数组存储了每个音符的持续时间,这里的数字表示几分之一拍。
  • setup() 函数:将蜂鸣器引脚设置为输出模式。
  • loop() 函数
    • 使用 for 循环遍历每个音符。
    • int noteDuration = 1000 / noteDurations[thisNote]; 计算每个音符的持续时间(毫秒)。
    • tone(buzzerPin, melody[thisNote], noteDuration); 播放当前音符。
    • int pauseBetweenNotes = noteDuration * 1.30; 计算音符之间的间隔时间。
    • delay(pauseBetweenNotes); 程序暂停,留出音符间隔。
    • noTone(buzzerPin); 停止发声。
    • 整首旋律播放完后,程序暂停 2 秒,然后再次循环播放。

总结

通过本章的学习,我们了解了蜂鸣器的类型、工作原理,掌握了使用 Arduino 控制有源蜂鸣器和无源蜂鸣器的方法,还实现了播放简单旋律的功能。蜂鸣器可以为我们的 Arduino 项目增添声音交互的元素,使项目更加生动有趣。在后续的项目中,我们可以根据需求利用蜂鸣器实现更多的功能,如报警系统、音乐播放器等。

04-16 878
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值