设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8325|回复: 2

Arduino入门教程—基础实验篇五 蜂鸣器报警实验

[复制链接]

签到天数: 433 天

[LV.9]以坛为家II

发表于 2013-5-20 09:07:26 | 显示全部楼层 |阅读模式
本帖最后由 AllBlue 于 2016-12-13 14:27 编辑

蜂鸣器报警实验
上面的贴子,我们都是使用LED来完成实验,今天我们要介绍一个新元件--蜂鸣器。
实验元件:

UNO 实验套装(UNO R3控制板、USB数据线、面包板、跳线)

无源蜂鸣器  一个


首先我们介绍下蜂鸣器,蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
我们使用的这种小型蜂鸣器因其体积小(直径只有11mm)、重量轻、价格低、结构牢靠,而广泛地应用在各种需要发声的电器设备、电子制作和单片机等电路中。

有源蜂鸣器和无源蜂鸣器的外观示意图,如图a、b所示:

蜂鸣器.jpg

注意:这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫;而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫,必须用2K-5K的方波去驱动它;有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。

我们使用的是无源蜂鸣器,它通电之后是无法工作的,我们必须提供一定的频率才能让它发声;程序控制就会比有源蜂鸣器复杂一点。
它也有很多优点:

1. 便宜

2. 声音频率可控,可以做出“多来米发索拉西”的效果

3. 在一些特例中,可以和LED复用一个控制口

下面我们看下我们的电路图:

蜂鸣器实验.jpg

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

好了,电路完成我们就要将程序上传到控制板中:
  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. }
复制代码
Super_Mario.zip (1.6 KB, 下载次数: 293)

本帖被以下淘专辑推荐:

该用户从未签到

发表于 2013-7-9 11:24:27 | 显示全部楼层
SuperMario  ~~~~   
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2017-4-28 19:58 , Processed in 0.339498 second(s), 30 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表