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]

电路很简单,而且我们也不用关心它的极性问题,以为它不分正负极,有源蜂鸣器分正负极,很多无源蜂鸣器封装上都会标有极性,是为了生产方便。

好了,电路完成我们就要将程序上传到控制板中:
  1. /*
  2.   蜂鸣器模拟发声实验
  3.   使用tone()函数产生声音,模拟防控警报的响声
  4. */

  5. #define BUZZER 13                //定义蜂鸣器引脚为D13
  6. int i;                            //定义变量i

  7. void setup()
  8. {
  9.   pinMode(BUZZER,OUTPUT);
  10. }

  11. void loop(){
  12.   for( i=200;i <= 800;i++)        //将频率从200HZ 增加到800HZ
  13.   {
  14.     tone(BUZZER,i);               //在D9口输出频率
  15.     delay(5);                     //该频率维持5毫秒   
  16.   }
  17.   delay(4000);                    //最高频率下维持4秒钟
  18.   for( i=800;i >= 200;i--)        //将频率从800HZ 减小到200HZ
  19.   {      
  20.     tone(BUZZER,i);               //在D9口输出频率
  21.     delay(10);                    //该频率维持10毫秒
  22.   }
  23. }
复制代码

我们的程序很简单,模仿报警器的声音,试试效果吧!

程序中我们还是用了tone()函数:

tone(pin, frequency)

tone(pin, frequency, duration)

参数pin:要产生声音的引脚

frequency: 产生声音的频率,单位Hz,类型unsigned int

duration:声音持续的时间,单位毫秒(可选),类型unsigned long

扩展阅读(DIY唱歌)

下面给出的是网上的牛人们写的超级玛丽的程序:

  1. /*
  2. Play Super Mario theme song with Arduino and speaker

  3. circuit:
  4. * 8-ohm speaker on digital pin 8
  5. reference:
  6. http://arduino.cc/en/Tutorial/Tone

  7. */

  8. #include "pitches.h"

  9. // notes in the melody:

  10. int melody[] = {

  11. NOTE_E4, NOTE_E4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_G4, NOTE_G3,  
  12. 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,
  13. 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,
  14. 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,
  15. 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,
  16. 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,
  17. NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3

  18. };

  19. // note durations: 4 = quarter note, 8 = eighth note, etc.:

  20. int noteDurations[] = {

  21. 8,4,4,8,4,2,2,
  22. 3,3,3,4,4,8,4,8,8,8,4,8,4,3,8,8,3,
  23. 3,3,3,4,4,8,4,8,8,8,4,8,4,3,8,8,2,
  24. 8,8,8,4,4,8,8,4,8,8,3,8,8,8,4,4,4,8,2,
  25. 8,8,8,4,4,8,8,4,8,8,3,3,3,1,
  26. 8,4,4,8,4,8,4,8,2,8,4,4,8,4,1,
  27. 8,4,4,8,4,8,4,8,2

  28. };


  29. void setup() {

  30. // iterate over the notes of the melody:
  31. for (int thisNote = 0; thisNote < 98; thisNote++) {

  32. // to calculate the note duration, take one second
  33. // divided by the note type.
  34. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.

  35. int noteDuration = 1000/noteDurations[thisNote];
  36. tone(8, melody[thisNote],noteDuration);


  37. // to distinguish the notes, set a minimum time between them.
  38. // the note's duration + 30% seems to work well:
  39. int pauseBetweenNotes = noteDuration * 1.30;
  40. delay(pauseBetweenNotes);

  41. // stop the tone playing:
  42. noTone(8);
  43. }
  44. }

  45. void loop() {
  46. // no need to repeat the melody.

  47. }
复制代码
[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