YFROBOT创客社区
标题: Arduino入门教程—基础实验篇五 蜂鸣器报警实验 [打印本页]
作者: AllBlue 时间: 2013-5-20 09:07
标题: Arduino入门教程—基础实验篇五 蜂鸣器报警实验
蜂鸣器报警实验
上面的贴子,我们都是使用LED来完成实验,今天我们要介绍一个新元件--蜂鸣器。
实验元件:UNO 实验套装(UNO R3控制板、USB数据线、面包板、跳线)
无源蜂鸣器 一个
首先我们介绍下蜂鸣器,蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
我们使用的这种小型蜂鸣器因其体积小(直径只有11mm)、重量轻、价格低、结构牢靠,而广泛地应用在各种需要发声的电器设备、电子制作和单片机等电路中。
有源蜂鸣器和无源蜂鸣器的外观示意图,如图a、b所示:[attach]304[/attach]
注意:这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫;而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K-5K的方波去驱动它;有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。
我们使用的是无源蜂鸣器,它通电之后是无法工作的,我们必须提供一定的频率才能让它发声;程序控制就会比有源蜂鸣器复杂一点。
它也有很多优点:1. 便宜
2. 声音频率可控,可以做出“多来米发索拉西”的效果
3. 在一些特例中,可以和LED复用一个控制口
下面我们看下我们的电路图:
[attach]475[/attach]
电路很简单,而且我们也不用关心它的极性问题,以为它不分正负极,有源蜂鸣器分正负极,很多无源蜂鸣器封装上都会标有极性,是为了生产方便。
好了,电路完成我们就要将程序上传到控制板中:- /*
- 蜂鸣器模拟发声实验
- 使用tone()函数产生声音,模拟防控警报的响声
- */
- #define BUZZER 13 //定义蜂鸣器引脚为D13
- int i; //定义变量i
- void setup()
- {
- pinMode(BUZZER,OUTPUT);
- }
- void loop(){
- for( i=200;i <= 800;i++) //将频率从200HZ 增加到800HZ
- {
- tone(BUZZER,i); //在D9口输出频率
- delay(5); //该频率维持5毫秒
- }
- delay(4000); //最高频率下维持4秒钟
- for( i=800;i >= 200;i--) //将频率从800HZ 减小到200HZ
- {
- tone(BUZZER,i); //在D9口输出频率
- delay(10); //该频率维持10毫秒
- }
- }
复制代码我们的程序很简单,模仿报警器的声音,试试效果吧!
程序中我们还是用了tone()函数:
tone(pin, frequency)
tone(pin, frequency, duration)
参数pin:要产生声音的引脚
frequency: 产生声音的频率,单位Hz,类型unsigned int
duration:声音持续的时间,单位毫秒(可选),类型unsigned long
扩展阅读(DIY唱歌)
下面给出的是网上的牛人们写的超级玛丽的程序:
- /*
- Play Super Mario theme song with Arduino and speaker
- circuit:
- * 8-ohm speaker on digital pin 8
- reference:
- http://arduino.cc/en/Tutorial/Tone
- */
- #include "pitches.h"
- // notes in the melody:
- int melody[] = {
- NOTE_E4, NOTE_E4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_G4, NOTE_G3,
- NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A3, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3,
- NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A3, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3,
- NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_C5, NOTE_C5, NOTE_C5,
- NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_DS4, NOTE_D4, NOTE_C4,
- NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4,
- NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3
- };
- // note durations: 4 = quarter note, 8 = eighth note, etc.:
- int noteDurations[] = {
- 8,4,4,8,4,2,2,
- 3,3,3,4,4,8,4,8,8,8,4,8,4,3,8,8,3,
- 3,3,3,4,4,8,4,8,8,8,4,8,4,3,8,8,2,
- 8,8,8,4,4,8,8,4,8,8,3,8,8,8,4,4,4,8,2,
- 8,8,8,4,4,8,8,4,8,8,3,3,3,1,
- 8,4,4,8,4,8,4,8,2,8,4,4,8,4,1,
- 8,4,4,8,4,8,4,8,2
- };
- void setup() {
- // iterate over the notes of the melody:
- for (int thisNote = 0; thisNote < 98; thisNote++) {
- // to calculate the note duration, take one second
- // divided by the note type.
- //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
- int noteDuration = 1000/noteDurations[thisNote];
- tone(8, melody[thisNote],noteDuration);
- // to distinguish the notes, set a minimum time between them.
- // the note's duration + 30% seems to work well:
- int pauseBetweenNotes = noteDuration * 1.30;
- delay(pauseBetweenNotes);
- // stop the tone playing:
- noTone(8);
- }
- }
- void loop() {
- // no need to repeat the melody.
- }
复制代码 [attach]306[/attach]
下载进去后,是不是很过瘾,想要DIY??
如果想要DIY的转看:http://www.yfrobot.com.cn/thread-2269-1-1.html,教你如何编写自己想要的歌曲!
作者: kib06492 时间: 2016-3-11 16:44
測試能用
作者: tiantianyouyou 时间: 2019-4-30 09:16
模仿报警器的声音,试试效果
作者: tiantianyouyou 时间: 2019-5-1 19:49
下载进去后,很过瘾,想要DIY
作者: xfsss 时间: 2019-10-2 15:14
下载进去后,很过瘾
欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) |
Powered by Discuz! X3.1 |