一, 了解蜂鸣器(Buzzer) 蜂鸣器是一种电子发声元器件,可以发出'beep beep'的声音. 采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器在电路中用字母“FM”、“H”或“HA” 或“ZZG”、“LB”、“JD”等表示。 蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。 有源蜂鸣器与无源蜂鸣器的区别:内部有否震荡源 注意:这里的“源”不是指电源,而是指震荡源。 有源蜂鸣器内部带震荡源,所以只要一通电就会叫; 无源蜂鸣器内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K-5K的波形脉冲信号去驱动它 有源蜂鸣器往往比无源的略贵,就是因为里面多个震荡电路。 从外观上看,两种蜂鸣器好像一样. 一般有源有源蜂鸣器比无源蜂鸣器厚一点. 但是, 从外观上并不能绝对的区分出有源与无源,最可靠的做法除了查看产品的参数手册以外. 另一种方式是使用万用表测试蜂鸣器电阻,只有8Ω或者16Ω的是无源蜂鸣器,电阻在几百欧以上的是有源蜂鸣器。 1, 准备元器件和器材 无源蜂鸣器 一个 面包板一块 PNP型三极管(型号8550)一个 1K 电阻一个 杜邦线若干 2, 蜂鸣器驱动电路原理图 蜂鸣器元件需要通过一个驱动电路接在单片机上. 典型的驱动电路原理图如下: 上述电路中用一个PNP型三极管做为控制开关, 图中FM是蜂鸣器 三极管C极接GND,E极接蜂鸣器的负端,三极管的B极通过一只1K-2K的电阻到单片机的GPIO脚 . 蜂鸣器的正端接VCC. 该电路中三极管相当于一个开关, 运行原理如下: 1, 当GPIO输出高电平,三极B极与E极间没有电压差,三极管E极与C极间不通,蜂鸣器FM没有电流通过,蜂鸣器不响。 2,当GPIO输出低电平,三极B极与E极间形成电压差,三极管E极与C极之间导通,电流通过蜂鸣器FM,如果是有源蜂鸣器,则立即发出beep声。 (1) 三极管型号为 8550, 其引脚如下图: 如图所示, 1脚=E(发射极,电路图中带箭头的那个) 2脚=B(基极,电路图中跟R相接的那个) 3脚=C(集电极,与E相对的那个) (2) 蜂鸣器有两个脚有源蜂鸣器是一通电就响的,两个脚分别是正负极, 两个脚一长一短, 短脚为负极, 长脚为正极接VCC. 本例用的是无源蜂鸣器。 而无源蜂鸣器的是需要波形信号驱动的,两个脚没有正负极。 用面包板接线 把三极管, 蜂鸣器, 电阻插入面包板, 按上述电路原理图,用杜邦线接线, 接线如下图: 蜂鸣器的正极(长脚)接5V, 负极(短脚)接三极管 E极 三极管B极接1K欧姆电阻,再接到Arduino D3脚 三极管C极接地 写入以下程序 void setup(){ pinMode(3,OUTPUT); } void loop(){ tone(3,400);//频率400 delay(1000); tone(3,1000);//频率1000 delay(1000); tone(3,600); delay(1000); tone(3,300); delay(1000); } 这里,我们用到了一个内置程序,tone(pin,p)。pin代表输出脚,p代表输出频率。 tone()函数可以产生固定频率的PWM信号来驱动扬声器发声。发声时间长度和声调都可以通过参数控制。定义发声时间长度有两种方法,第一种是通过tone()函数的参数来定义发声时长,另一种是使用noTone()函数来停止发声。如果您在使用tone()函数时没有定义发声时间长度,那么除非您通过noTone()函数来停止声音,否则Arduino将会一直通过tone()函数产生声音信号。 Arduino一次只能产生一个声音。假如Arduino的某一个引脚正在通过tone()函数产生发声信号,那么此时让Arduino使用另外一个引脚通过tone()函数发声是不行的。 请注意: 1. 对于Arduino Mega以外的控制器,使用tone()函数时会影响引脚3和引脚11的PWM信号输出。 2. 如果你想要使用不同的引脚产生不同的声音音调,每一次更换发声引脚以前都要使用noTone函数停止上一个引脚发声。Arduino是不支持两个引脚同时发声的。 各种蜂鸣器都有适用的频率,在这个频率下,发生最大。读者可以从4000的频率试用,更改频率直到声音合适。 |
|