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

2015-04-121.4万
AI 快速预览详细 收起
本文介绍了如何使用一个蜂鸣器和一个LED灯实现音乐与灯光同步的效果。项目以生日快乐歌为例,详细列出了所需的元件(蜂鸣器、LED灯、220欧姆电阻及导线),并提供了硬件连接图和完整的代码示例。通过定义不同音调的频率和节拍,实现了蜂鸣器奏乐与LED灯闪烁的同步效果。此外,还介绍了有源蜂鸣器与无源蜂鸣器的区别,并给出了课后作业——用无源蜂鸣器奏出《两只老虎》。


    经过报警器项目的学习,我们对蜂鸣器有了初步认识。那么我们能不能通过改变蜂鸣器的频率,奏出好听的歌曲呢。下面我以生日快乐歌为例,介绍怎样让蜂鸣器奏出歌曲,且用一个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
本篇由韩妮制作,罗亮指导

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -