蜂鸣器

作者: 0223_张辉 | 来源:发表于2019-07-06 09:07 被阅读3次

蜂鸣器是一种电子发声元器件,可以发出"beep"的声音。采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。

有源蜂鸣器: 内部带有震荡源,只要一通电就会发出固定频率的声音。

无源蜂鸣器:内部不带震荡源,需要使用2KHz到5KHz的脉冲信号驱动发声,声音频率可变。

从外观上来看两种蜂鸣器形状相似,有源蜂鸣器底部有密封,无源蜂鸣器底部可看到电路板。两种蜂鸣器都标注有正负极。

首先介绍一下几个重要的函数

tone()函数

功能:在指定引脚产生指定频率的方波,可用于蜂鸣器或扬声器播放音调。
函数使用
tone(pin, frequency)
tone(pin, frequency, duration)
参数
pin:产生音调的引脚。
frequency:音调频率,单位赫兹。
duration:音调持续时间(毫秒单位),此参数可选。
返回值:没有

noTone()

功能:用来停止由tone(pin, frequency)产生的音调
函数使用: noTone(pin)
参数:需要停止产生音调的引脚。
返回值:没有。

实验材料

arduino Nano开发板
配套USB数据线
面包板及配套连接线
无源蜂鸣器

实验一:产生警报声

步骤

蜂鸣器正极接开发板数字引脚8,负极接开发板GND,新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

float sinVal;  //定义一个float类型的变量用来保存正弦值,让其产生声音高低变化
int toneVal;   //定义一个整型变量,让其获得sinVal的数值,并把它转化成所需要的频率

void setup()
{
  pinMode(8, OUTPUT); //设置引脚八位输出
}

void loop()
{
  for(int x = 0;  x < 180; x++)  //设置0-179循环,避免产生负值
  {
    sinVal = (sin(x*(3.1412)/180)); 
    toneVal = 2000 + (int(sinVal*1000));  //使得声音的频率随着正弦波高低变化而变化
    tone(8, toneVal); //tone函数将声音频率输出到压电扬声器
    delay(2);//延迟两毫秒
  }
}

连接开发板,设置好对应端口号和开发板类型,进行程序下载。

实验效果演示

链接:https://pan.baidu.com/s/1tXG1ufHn9VUj-3ajfh9gkA
提取码:0d05
复制这段内容后打开百度网盘手机App,操作更方便哦

实验二:播放音乐葫芦娃

步骤

硬件连接同实验一
代码如下:

/*
   BUZZER2
   使用无源蜂鸣器播放《葫芦娃》
*/

//对应音符和频率值
#define NOTE_D0 -1
#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 350
#define NOTE_D4 393
#define NOTE_D5 441
#define NOTE_D6 495
#define NOTE_D7 556

#define NOTE_DL1 147
#define NOTE_DL2 165
#define NOTE_DL3 175
#define NOTE_DL4 196
#define NOTE_DL5 221
#define NOTE_DL6 248
#define NOTE_DL7 278

#define NOTE_DH1 589
#define NOTE_DH2 661
#define NOTE_DH3 700
#define NOTE_DH4 786
#define NOTE_DH5 882
#define NOTE_DH6 990
#define NOTE_DH7 112

#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625

//整首曲子的音符部分
int tune[] =
{
  NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D0,
  NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_DH1, NOTE_D6, NOTE_D0, NOTE_D6,
  NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D0, NOTE_D6,
  NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_DH1, NOTE_D6, NOTE_D0,

  NOTE_D1, NOTE_D1, NOTE_D3,
  NOTE_D1, NOTE_D1, NOTE_D3, NOTE_D0,
  NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6,
  NOTE_D5, NOTE_D1, NOTE_D3, NOTE_D0,
  NOTE_DH1, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6,
  NOTE_D5, NOTE_D1, NOTE_D2, NOTE_D0,
  NOTE_D7, NOTE_D7, NOTE_D5, NOTE_D3,
  NOTE_D5,
  NOTE_DH1, NOTE_D0, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D6,
  NOTE_D0, NOTE_D5, NOTE_D1, NOTE_D3, NOTE_D0,
  NOTE_DH1, NOTE_D0, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D6,
  NOTE_D0, NOTE_D5, NOTE_D1, NOTE_D2, NOTE_D0,
  NOTE_D3, NOTE_D3, NOTE_D1, NOTE_DL6,
  NOTE_D1,
  NOTE_D3, NOTE_D5, NOTE_D6, NOTE_D6,
  NOTE_D3, NOTE_D5, NOTE_D6, NOTE_D6,
  NOTE_DH1, NOTE_D0, NOTE_D7, NOTE_D5,
  NOTE_D6,
};

//曲子的节拍,即音符持续时间
float duration[] =
{
  1, 1, 0.5, 0.5, 1,
  0.5, 0.5, 0.5, 0.5, 1, 0.5, 0.5,
  0.5, 1, 0.5, 1, 0.5, 0.5,
  0.5, 0.5, 0.5, 0.5, 1, 1,

  1, 1, 1 + 1,
  0.5, 1, 1 + 0.5, 1,
  1, 1, 0.5, 0.5, 1,
  0.5, 1, 1 + 0.5, 1,
  0.5, 0.5, 0.5, 0.5, 1 + 1,
  0.5, 1, 1 + 0.5, 1,
  1 + 1, 0.5, 0.5, 1,
  1 + 1 + 1 + 1,
  0.5, 0.5, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25,
  0.5, 1, 0.5, 1, 1,
  0.5, 0.5, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25,
  0.5, 1, 0.5, 1, 1,
  1 + 1, 0.5, 0.5, 1,
  1 + 1 + 1 + 1,
  0.5, 1, 0.5, 1 + 1,
  0.5, 1, 0.5, 1 + 1,
  1 + 1, 0.5, 0.5, 1,
  1 + 1 + 1 + 1
};

int length;//定义一个变量用来表示共有多少个音符
int tonePin = 8; //蜂鸣器的pin

void setup()
{
  pinMode(tonePin, OUTPUT); //设置蜂鸣器的pin为输出模式
  length = sizeof(tune) / sizeof(tune[0]); //这里用了一个sizeof函数,查出数组里有多少个音符
}

void loop()
{
  for (int x = 0; x < length; x++) //循环音符的次数
  {
    tone(tonePin, tune[x]); //依次播放tune数组元素,即每个音符
    delay(400 * duration[x]); //每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快
    noTone(tonePin);//停止当前音符,进入下一音符
  }
  delay(5000);//等待5秒后,循环重新开始
}

下载完毕后,无源蜂鸣器就会播放「葫芦娃」神曲了。

实验效果:

链接:https://pan.baidu.com/s/1x6innRpT8nr-iVfs3Zxt6Q
提取码:3xun
复制这段内容后打开百度网盘手机App,操作更方便哦

无源蜂鸣器播放「葫芦娃」程序中,定义了跟乐理相关的知识,音符需要对应频率,拍子就是每个音符播放时间。还可以根据不同简谱来演奏出不同的曲子。
这个就看大家大一上学期的音乐基础学得怎么样了(斜眼笑)

相关文章

  • 【树莓派+arduino实验记录6】无源与有源蜂鸣器

    Arduino 有源蜂鸣器 无源蜂鸣器 树莓派 有源蜂鸣器 C Python 无源蜂鸣器 C Python

  • 树莓派基础实验9:蜂鸣器实验

    一、介绍    蜂鸣器是音频信号装置,蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器直接接上额定电源就可以连续发声...

  • Arduino基础入门篇08—播放音乐

    本篇介绍电子产品中的发声器件—蜂鸣器,通过控制蜂鸣器播放「葫芦娃」,带你回归美好童年。 1. 了解蜂鸣器 蜂鸣器是...

  • proteus仿真 BUZZER 不响

    蜂鸣器分类 蜂鸣器按照驱动方式可分为有源蜂鸣器和无源蜂鸣器。这里的有源和无源不是指有无电源,而是指有无振荡源。有源...

  • 蜂鸣器驱动程序(STM 32)

    有源蜂鸣器和无源蜂鸣器的区别有源蜂鸣器:内置频率发生电路;通电就能发出声音;声音频率固定;成本较高无源蜂鸣器:内部...

  • 蜂鸣器的控制linux

    蜂鸣器的控制linux 1设备的节点 2控制方法,输入1,蜂鸣器响,输入0蜂鸣器停止 3控制代码

  • 单片机程序练习1

    蜂鸣器如图是51单片机和蜂鸣器的接口电路,当P1.0输出0时,晶体管导通,在蜂鸣器两端加上工作电压5V,蜂鸣器发声...

  • 蜂鸣器

    蜂鸣器是一种一体化结构的电子讯响器,采用直流电压[https://baike.baidu.com/item/%E7...

  • 蜂鸣器

    蜂鸣器通常是低功率器件,工作电流范围在20至30mA之间,通常可以由输出直接驱动。有的需要用三极管驱动,通常一个三...

  • 蜂鸣器

    version2 显示函数做了略微的修改 定时器模拟门铃

网友评论

    本文标题:蜂鸣器

    本文链接:https://www.haomeiwen.com/subject/wlwyhctx.html