问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Arduino 第七章:蜂鸣器

创作时间:
作者:
@小白创作中心

Arduino 第七章:蜂鸣器

引用
CSDN
1.
https://m.blog.csdn.net/wangzhae/article/details/145576483

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 项目增添声音交互的元素,使项目更加生动有趣。在后续的项目中,我们可以根据需求利用蜂鸣器实现更多的功能,如报警系统、音乐播放器等。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号