10565浏览
查看: 10565|回复: 0

蜂鸣器奏乐配合LED灯闪烁(韩妮)

[复制链接]
本帖最后由 linkdfrobot 于 2015-4-12 10:26 编辑

    经过报警器项目的学习,我们对蜂鸣器有了初步认识。那么我们能不能通过改变蜂鸣器的频率,奏出好听的歌曲呢。下面我以生日快乐歌为例,介绍怎样让蜂鸣器奏出歌曲,且用一个LED灯闪烁表现节奏。
所需元件:
1一个蜂鸣器蜂鸣器奏乐配合LED灯闪烁(韩妮)图2
一个LED灯蜂鸣器奏乐配合LED灯闪烁(韩妮)图3
一个220欧姆电阻蜂鸣器奏乐配合LED灯闪烁(韩妮)图4
导线若干
硬件连接
蜂鸣器奏乐配合LED灯闪烁(韩妮)图5
输入代码
  1. #define L5 441
  2. #define L6 495
  3. #define L7 556
  4. #define M1 589
  5. #define M2 661
  6. #define M3 700
  7. #define M4 786
  8. #define M5 882
  9. //列出所需音调的频率
  10. #define WHOLE 1
  11. #define HALF 0.5
  12. #define QUARTER 0.25
  13. //列出所有节拍
  14. int tune[]=              // 根据简谱列出各频率
  15. {
  16.   L5,L5,L6,L5,
  17.   M1,L7,
  18.   L5,L5,L6,L5,
  19.   M2,M1,
  20.   L5,L5,M5,M3,
  21.   M1,L7,L6,
  22.   M4,M4,M3,M1,
  23.   M2,M1
  24. };
  25. float durt[]=             //根据简谱列出各节拍
  26. {
  27.   0.5,0.5,1,1,
  28.   1,1+1,
  29.   0.5,0.5,1,1,
  30.   1,1+1,
  31.   0.5,0.5,1,1,
  32.   1,1,1,
  33.   0.5,0.5,1,1,
  34.   1,1+1,
  35. } ;  
  36. int length;
  37. int tonepin=5;//用五号接口
  38. int led=1;
  39. void setup()
  40. {
  41.   pinMode(led,OUTPUT);
  42.   pinMode(tonepin,OUTPUT);
  43.   length=sizeof(tune)/sizeof(tune[0]); //计算长度
  44. }
  45. void loop()
  46. { for(int x=0;x<length;x++)
  47.   {
  48.    tone(tonepin,tune[x]);
  49.    digitalWrite(led,HIGH);
  50.    delay(400*durt[x]);
  51.    digitalWrite(led,LOW);
  52.    delay(100*durt[x]);
  53.    noTone(tonepin);
  54.   }
  55.   delay(2000);
  56. }
复制代码
输入代码后,我们就能听到蜂鸣器奏乐,看到LED在旁边“伴舞”了。下面我们来回顾一下这段代码。
代码回顾
首先我们需要了解各音调的频率,可参考下表:
低音
  
音调
  
1
2
3
4
5
6
7
频率
147
165
175
196
221
248
278
中音


  
音调
  
1
2
3
4
5
6
7
频率
294
330
350
393
441
495
556
高音
  
音调
  
1
2
3
4
5
6
7
频率
589
661
700
786
882
990
1112
我们可以根据歌曲的简谱选取相应的频率

生日快乐歌简谱
蜂鸣器奏乐配合LED灯闪烁(韩妮)图6
我们知道一首歌出了音调还需要有节拍,因此我们要事先定义下节拍。
这里规定一拍的时间为1,半拍为0.5,以此类推。

接下来,我们用定义好的内容列出频率和节拍
  1. #define L5 441
  2. #define L6 495
  3. #define L7 556
  4. #define M1 589
  5. #define M2 661
  6. #define M3 700
  7. #define M4 786
  8. #define M5 882
  9. //列出所需音调的频率
  10. #define WHOLE 1
  11. #define HALF 0.5
  12. #define QUARTER 0.25
  13. //列出所有节拍
  14. int tune[]=              // 根据简谱列出各频率
  15. {
  16.   L5,L5,L6,L5,
  17.   M1,L7,
  18.   L5,L5,L6,L5,
  19.   M2,M1,
  20.   L5,L5,M5,M3,
  21.   M1,L7,L6,
  22.   M4,M4,M3,M1,
  23.   M2,M1
  24. };
  25. float durt[]=             //根据简谱列出各节拍
  26. {
  27.   0.5,0.5,1,1,
  28.   1,1+1,
  29.   0.5,0.5,1,1,
  30.   1,1+1,
  31.   0.5,0.5,1,1,
  32.   1,1,1,
  33.   0.5,0.5,1,1,
  34.   1,1+1,
  35. } ;  
复制代码
以上代码做的就是这些准备工作,下面进入我们的主题。
我们看到有一句代码
  1. length=sizeof(tune)/sizeof(tune[0]);
  2. sizeof 是一种内存容量度量的函数 这句代码是在计算长度
  3. for(int x=0;x<length;x++) //for语句
  4.   {
  5.    tone(tonepin,tune[x]);
  6.    digitalWrite(led,HIGH);//LED灯亮
  7.    delay(400*durt[x]);   //这里用来根据节拍调节延时,数据可根据实际情况更改调试,对于蜂鸣器来说即为响的时间,对于LED即为亮的时间
  8.    digitalWrite(led,LOW);//LED灯灭
  9.    delay(100*durt[x]);//同上
  10.    noTone(tonepin);
  11.   }
复制代码
实物图
蜂鸣器奏乐配合LED灯闪烁(韩妮)图7
蜂鸣器奏乐配合LED灯闪烁(韩妮)图8
硬件回顾
下面介绍一下有源蜂鸣器与无源蜂鸣器的区别。

  • 将蜂鸣器引脚朝天放置,会观察到有源蜂鸣器底面有层黑色胶布,而无源蜂鸣器底面则是绿色电路板,如下图:
有源:
蜂鸣器奏乐配合LED灯闪烁(韩妮)图9
无源
蜂鸣器奏乐配合LED灯闪烁(韩妮)图10

  • 有源蜂鸣器有长短脚,即正负极,而无源蜂鸣器两个引脚长度相同
  • 无源蜂鸣器的优点是频率可控,可发出多来米发索拉西的效果,无源蜂鸣器也较有源蜂鸣器便宜。而有源蜂鸣器程序控制方便
课后作业
用无源蜂鸣器奏出歌曲《两只老虎》 简谱如下
蜂鸣器奏乐配合LED灯闪烁(韩妮)图1
本篇由韩妮制作,罗亮指导

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail