Arduino基础实验5,驱动蜂鸣器和扬声器

使用电路来发出声音,可以制作成为电子门铃,车辆喇叭,报警器和电子琴等许多有趣的作品,创客行本文将使用蜂鸣器和扬声器来搭建Arduino的音频输出电路,验证Arduino开发板产生声音的本领。

蜂鸣器和扬声器

蜂鸣器是窄频带发声元件,它发出的声音没有扬声器那么丰富圆润,可以用于报警器和需要简单声音支持的电动玩具。蜂鸣器有压电式和电磁式两种不同的内部结构,从驱动工作的方式上,又会分为有源蜂鸣器和无源蜂鸣器。

我们曾经在文档【1】中制作过一个光敏闹钟,那个作品中使用的发声元件就是有源蜂鸣器,它的使用很简单,只需要在正负极引脚之间加以足够的直流电压(5V左右)就可以发出声音,有源蜂鸣器把振荡器和发声部分做成一体化的元件,不需要外部提供交流振荡电压,它的缺点是声音频率几乎不能变化,发声单一。

无源蜂鸣器里面没有振荡源,发出声音必须依靠在其两引脚间输入足量的交流方波,其声音频率跟输入电压频率一致。

扬声器是宽频带发声元件,它使用线圈的电磁力来推动膜片产生声音,扬声器的电阻很低,需要的工作电流较高,适用于声音成分丰富的产品。

蜂鸣器和扬声器图1 蜂鸣器和扬声器

 使用Arduino输出声音

文档【2】中我们使用PWM来输出Arduino的方波,对于控制声音输出,Arduino提供了更方便的代码接口,而不需要从PWM开始做起。

Frequency in hertz (semitones above or below middle C)
Octave→
Note↓
0 1 2 3 4 5 6 7 8 9
C 16.352 (−48) 32.703 (−36) 65.406 (−24) 130.81 (−12) 261.63 (0) 523.25 (+12) 1046.5 (+24) 2093.0 (+36) 4186.0 (+48) 8372.0 (+60)
C♯/D♭ 17.324 (−47) 34.648 (−35) 69.296 (−23) 138.59 (−11) 277.18 (+1) 554.37 (+13) 1108.7 (+25) 2217.5 (+37) 4434.9 (+49) 8869.8 (+61)
D 18.354 (−46) 36.708 (−34) 73.416 (−22) 146.83 (−10) 293.66 (+2) 587.33 (+14) 1174.7 (+26) 2349.3 (+38) 4698.6 (+50) 9397.3 (+62)
D♯/E♭ 19.445 (−45) 38.891 (−33) 77.782 (−21) 155.56 (−9) 311.13 (+3) 622.25 (+15) 1244.5 (+27) 2489.0 (+39) 4978.0 (+51) 9956.1 (+63)
E 20.602 (−44) 41.203 (−32) 82.407 (−20) 164.81 (−8) 329.63 (+4) 659.26 (+16) 1318.5 (+28) 2637.0 (+40) 5274.0 (+52) 10548 (+64)
F 21.827 (−43) 43.654 (−31) 87.307 (−19) 174.61 (−7) 349.23 (+5) 698.46 (+17) 1396.9 (+29) 2793.8 (+41) 5587.7 (+53) 11175 (+65)
F♯/G♭ 23.125 (−42) 46.249 (−30) 92.499 (−18) 185.00 (−6) 369.99 (+6) 739.99 (+18) 1480.0 (+30) 2960.0 (+42) 5919.9 (+54) 11840 (+66)
G 24.500 (−41) 48.999 (−29) 97.999 (−17) 196.00 (−5) 392.00 (+7) 783.99 (+19) 1568.0 (+31) 3136.0 (+43) 6271.9 (+55) 12544 (+67)
G♯/A♭ 25.957 (−40) 51.913 (−28) 103.83 (−16) 207.65 (−4) 415.30 (+8) 830.61 (+20) 1661.2 (+32) 3322.4 (+44) 6644.9 (+56) 13290 (+68)
A 27.500 (−39) 55.000 (−27) 110.00 (−15) 220.00 (−3) 440.00 (+9) 880.00 (+21) 1760.0 (+33) 3520.0 (+45) 7040.0 (+57) 14080 (+69)
A♯/B♭ 29.135 (−38) 58.270 (−26) 116.54 (−14) 233.08 (−2) 466.16 (+10) 932.33 (+22) 1864.7 (+34) 3729.3 (+46) 7458.6 (+58) 14917 (+70)
B 30.868 (−37) 61.735 (−25) 123.47 (−13) 246.94 (−1) 493.88 (+11) 987.77 (+23) 1975.5 (+35) 3951.1 (+47) 7902.1 (+59) 15804 (+71)

表1 八度音阶和对应的频率

在写代码之前,先让我们看一下从文档【3】中获取的八度音阶对应频率表(表1),Octave 0-9 表示八度区,C-D-E-F-G-A-B 为 C 大调七个主音:do re mi fa so la si(简谱记为 1 到 7),升一个八度也就是把频率翻番。下面的代码里发出钢琴入门常用的middle C,也就是C4-B4的音频来作为实验结果。

/*
 tone experiment
 source by: www.i-makers.info
*/

//定义音阶常量 
#define Do 262 
#define Re 294 
#define Mi 330 
#define Fa 349 
#define Sol 392 
#define La 440 
#define Si 494 
 
int buzzerPin=2; //定义蜂鸣器针脚 
int scale[]={Do,Re,Mi,Fa,So,La,Si}; //定义音阶数组 
 
void setup(){ 
 pinMode(buzzerPin,OUTPUT); 
} 
 
void loop(){ 
 for(int i=0;i<7;i++){ 
   tone(buzzerPin,scale[i]); 
   delay(1000); 
   noTone(buzzerPin); 
   delay(1000); 
 } 
}

 代码1 middle C的七个音阶发声

代码1是使用Arduino对middle C的七个音阶进行发声的实验,其中每个音阶对应于表1的频率,采用

tone(buzzerPin,scale[i]);

函数来进行实际发声,它的第一个参数是指定连接发声元件的引脚,这里是D2,第二个参数是发声频率。运行完这个函数之后,使用noTone函数来关断发声。

想要发出基础声音就那么简单,你可以找一个简谱来输入一首歌自己试试看。

下面再来看看它的电路连接方式,对于蜂鸣器的驱动电路很简单,如图2,直接连接相关引脚,把D2连接蜂鸣器正极,GND连接蜂鸣器负极即可。

发声器2

图2 Arduino驱动蜂鸣器电路图

对扬声器的连接要复杂一些,由于扬声器的驱动电流大,会造成Arduino引脚过载,因此需要采用间接耦合方式,而且需要采用外部电源供电,图3展示了使用三极管共集电极电路作为间接耦合的连接方式,相关知识请参阅文档【4】

图3 Arduino驱动扬声器电路图

在实际电路中,三极管采用S9013,驱动信号用紫色连线表示,把D2和三极管基极相连,三级管集电极连接电压正极,发射极连接扬声器正极,如此搭建的电路,就可以顺利的将扬声器驱动起来了。

Arduino驱动扬声器电路图4 Arduino驱动扬声器电路

现在,你能自己动手制作一个基础的Arduino发声作品了吗?比如一个叮咚门铃,自己试试看,我们会在后面的文章中给出一些样例,更多精彩内容,请查看全站目录

优秀科技原创内容源,欢迎添加微信公众号。

创客行淘宝店提供本网站电子制作的全部套件

创客行淘宝店地址:https://shop125908459.taobao.com/

参考文档

  1. 大话传感器10-光敏传感器,光与电的转变
  2. Arduino基础实验2,用PWM来制作七彩呼吸灯
  3. 八度音阶和频率的关系
  4. 共集电极放大电路的作用,射极跟随器原理分析
  5. 全站目录

发表评论