15830浏览
楼主: 驴友花雕

[入门] 【Arduino】168种传感器模块系列实验(49)---蜂鸣器模块

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2022-5-5 16:48:32

程序十四:控制無源蜂鳴器發出兩隻老虎音調的聲音
1Arduino参考开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序十四:播放二只老虎乐曲
  4. */
  5. int buzzer=3;           //設定蜂鳴器接腳為D3
  6. int duration = 500;
  7. int aSo = 392;          //定义音符频率
  8. int bDo = 523;
  9. int bRe = 587;
  10. int bMi = 659;
  11. int bFa = 698;
  12. int bSo = 784;
  13. int bLa = 880;
  14. int bSi = 988;
  15. int bDDo = 1047;
  16. void setup(){
  17. pinMode(buzzer,OUTPUT);   //設定蜂鳴器為輸出
  18. }
  19. void loop(){
  20.   tone(3,bDo,duration);
  21.   delay(600);
  22.   tone(3,bRe,duration);
  23.   delay(600);
  24.   tone(3,bMi,duration);
  25.   delay(600);
  26.   tone(3,bDo,duration);
  27.   delay(800);
  28.   
  29.   tone(3,bDo,duration);
  30.   delay(600);
  31.   tone(3,bRe,duration);
  32.   delay(600);
  33.   tone(3,bMi,duration);
  34.   delay(600);
  35.   tone(3,bDo,duration);
  36.   delay(800);
  37.   
  38.   tone(3,bMi,duration);
  39.   delay(600);
  40.   tone(3,bFa,duration);
  41.   delay(600);
  42.   tone(3,bSo,duration);
  43.   delay(800);
  44.   
  45.   tone(3,bMi,duration);
  46.   delay(600);
  47.   tone(3,bFa,duration);
  48.   delay(600);
  49.   tone(3,bSo,duration);
  50.   delay(800);
  51.   tone(3,bSo,duration);
  52.   delay(600);
  53.   tone(3,bLa,duration);
  54.   delay(600);
  55.   tone(3,bSo,duration);
  56.   delay(600);
  57.   tone(3,bFa,duration);
  58.   delay(600);
  59.   tone(3,bMi,duration);
  60.   delay(700);
  61.   tone(3,bDo,duration);
  62.   delay(800);
  63.   tone(3,bSo,duration);
  64.   delay(600);
  65.   tone(3,bLa,duration);
  66.   delay(600);
  67.   tone(3,bSo,duration);
  68.   delay(600);
  69.   tone(3,bFa,duration);
  70.   delay(600);
  71.   tone(3,bMi,duration);
  72.   delay(700);
  73.   tone(3,bDo,duration);
  74.   delay(800);
  75.   tone(3,bDo,duration);
  76.   delay(700);
  77.   tone(3,aSo,duration);
  78.   delay(700);
  79.   tone(3,bDo,duration);
  80.   delay(800);
  81.   tone(3,bDo,duration);
  82.   delay(700);
  83.   tone(3,aSo,duration);
  84.   delay(700);
  85.   tone(3,bDo,duration);
  86.   delay(800);
  87.   delay(2000);
  88. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-5-5 16:50:26

2tone()函數說明:
tone(pin, frequency, duration)
pin=訊號接口,frequency=頻率,duration=間距
实验使用到的音階有Do(523Hz), Re (587Hz), Mi(659Hz), Fa(698Hz), So(784Hz), La(880Hz), Si(988Hz) 到高音 Do (1047Hz)



3)要让蜂鸣器唱歌基本上就是让蜂鸣器可以产生不同频率的声音,频率的单位是赫兹(Hz),也就是每秒振动多少次。



1939年的一次国际会议把 A (La) = 440Hz 确定为国际标准音,又名演奏会音高。 1955年,这一标准被国际标准化组织认可,并于1975年确定下来。
换句话说~我们只要让一个东西能以每秒振动440下,听到的声音就是A

音阶--频率对照表(单位:Hz)

【Arduino】168种传感器模块系列实验(49)---蜂鸣器模块图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-5-5 16:52:06

程序十五:播放do re mi fa sol la si
Arduino参考开源代码


  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序十五:播放do re mi fa sol la si
  4. */
  5. const int buzzPin = 3;//无源蜂鸣器接D3
  6. int delayTime = 200;
  7. void setup() {
  8.   // 把你的设置代码放在这里,运行一次
  9.   pinMode(buzzPin, OUTPUT);//设置为输出
  10. }
  11. void loop() {
  12.   // 把你的主要代码放在这里,重复运行
  13.   tone(buzzPin, 262, 150);
  14.   delay(delayTime);
  15.   noTone(buzzPin);
  16.   tone(buzzPin, 294, 150);
  17.   delay(delayTime);
  18.   noTone(buzzPin);
  19.   tone(buzzPin, 330, 150);
  20.   delay(delayTime);
  21.   noTone(buzzPin);
  22.   tone(buzzPin, 349, 150);
  23.   delay(delayTime);
  24.   noTone(buzzPin);
  25.   tone(buzzPin, 292, 150);
  26.   delay(delayTime);
  27.   noTone(buzzPin);
  28.   tone(buzzPin, 440, 150);
  29.   delay(delayTime);
  30.   noTone(buzzPin);
  31.   tone(buzzPin, 494, 150);
  32.   delay(delayTime);
  33.   noTone(buzzPin);
  34. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-5-5 16:53:32

程序十六:播放melody音乐
Arduino参考开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序十六:播放melody音乐
  4. */
  5. #define NOTE_C4  262//诠释旋律
  6. #define NOTE_G3  196
  7. #define NOTE_A3  220
  8. #define NOTE_B3  247
  9. int melody[] = {
  10.   NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
  11. };
  12. // 音符时长:4 = 四分音符,8 = 八分音符,等等
  13. int noteDurations[] = {
  14.   4, 8, 8, 4, 4, 4, 4, 4
  15. };
  16. void setup() {
  17.   // 遍历旋律的音符
  18. }
  19. void loop() {
  20.   for (int thisNote = 0; thisNote < 8; thisNote++) {
  21.     // 计算音符持续时间,用一秒除以音符类型。
  22.     //例如。 四分音符 = 1000 / 4,八分音符 = 1000/8 等等。
  23.     int noteDuration = 1000 / noteDurations[thisNote];
  24.     tone(3, melody[thisNote], noteDuration);
  25.     // 为了区分音符,设置它们之间的最小时间。
  26.     // 音符的持续时间 + 30% 似乎效果很好
  27.     int pauseBetweenNotes = noteDuration * 1.30;
  28.     delay(pauseBetweenNotes);
  29.     // 停止播放音调
  30.     noTone(3);
  31.   }
  32. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-5-5 16:55:32

实验场景图

【Arduino】168种传感器模块系列实验(49)---蜂鸣器模块图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-5-5 16:57:07

程序十七:利用蜂鸣器播放天空之城

【Arduino】168种传感器模块系列实验(49)---蜂鸣器模块图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-5-5 16:59:06

Arduino参考开源代码


  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   程序十七:利用蜂鸣器播放天空之城
  4. */
  5. #define NOTE_D0 -1
  6. #define NOTE_D1 294
  7. #define NOTE_D2 330
  8. #define NOTE_D3 350
  9. #define NOTE_D4 393
  10. #define NOTE_D5 441
  11. #define NOTE_D6 495
  12. #define NOTE_D7 556
  13. #define NOTE_DL1 147
  14. #define NOTE_DL2 165
  15. #define NOTE_DL3 175
  16. #define NOTE_DL4 196
  17. #define NOTE_DL5 221
  18. #define NOTE_DL6 248
  19. #define NOTE_DL7 278
  20. #define NOTE_DH1 589
  21. #define NOTE_DH2 661
  22. #define NOTE_DH3 700
  23. #define NOTE_DH4 786
  24. #define NOTE_DH5 882
  25. #define NOTE_DH6 990
  26. #define NOTE_DH7 112
  27. //以上部分是定义是把每个音符和频率值对应起来,其实不用打这么多,但是都打上了,后面可以随意编写
  28. #define WHOLE 1
  29. #define HALF 0.5
  30. #define QUARTER 0.25
  31. #define EIGHTH 0.25
  32. #define SIXTEENTH 0.625
  33. //这部分是用英文对应了拍子,这样后面也比较好看
  34. int tune[] =
  35. {
  36.   NOTE_D0, NOTE_D0, NOTE_D0, NOTE_D6, NOTE_D7, NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D3, NOTE_D3,
  37.   NOTE_D6, NOTE_D5, NOTE_D6, NOTE_DH1, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D3, NOTE_D4, NOTE_D3, NOTE_D4, NOTE_DH1,
  38.   NOTE_D3, NOTE_D3, NOTE_D0, NOTE_DH1, NOTE_DH1, NOTE_DH1, NOTE_D7, NOTE_D4, NOTE_D4, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D0, NOTE_D6, NOTE_D7,
  39.   NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_D7, NOTE_D7, NOTE_D7, NOTE_D3, NOTE_D3, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_DH1,
  40.   NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D2, NOTE_D3, NOTE_D4, NOTE_DH1, NOTE_D7, NOTE_D7, NOTE_DH1, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_DH3, NOTE_DH1, NOTE_DH1, NOTE_DH1,
  41.   NOTE_DH1, NOTE_D7, NOTE_D6, NOTE_D6, NOTE_D7, NOTE_D5, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_DH1, NOTE_DH2, NOTE_DH3, NOTE_DH2, NOTE_DH3, NOTE_DH5,
  42.   NOTE_DH2, NOTE_DH2, NOTE_DH2, NOTE_D5, NOTE_D5, NOTE_DH1, NOTE_D7, NOTE_DH1, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3,
  43.   NOTE_D6, NOTE_D7, NOTE_DH1, NOTE_D7, NOTE_DH2, NOTE_DH2, NOTE_DH1, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_DH4, NOTE_DH3, NOTE_DH2, NOTE_DH1,
  44.   NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH6, NOTE_DH6, NOTE_DH5, NOTE_DH5, NOTE_DH3, NOTE_DH2, NOTE_DH1, NOTE_DH1, NOTE_D0, NOTE_DH1,
  45.   NOTE_DH2, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_DH5, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH3, NOTE_DH6, NOTE_DH6, NOTE_DH5, NOTE_DH5,
  46.   NOTE_DH3, NOTE_DH2, NOTE_DH1, NOTE_DH1, NOTE_D0, NOTE_DH1, NOTE_DH2, NOTE_DH1, NOTE_DH2, NOTE_DH2, NOTE_D7, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D7
  47. };//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数
  48. float duration[] =
  49. {
  50.   1, 1, 1, 0.5, 0.5,     1 + 0.5, 0.5, 1, 1,     1, 1, 1, 0.5, 0.5,
  51.   1 + 0.5, 0.5, 1, 1,     1, 1, 1, 1,          1 + 0.5, 0.5, 1, 1,
  52.   1, 1, 0.5, 0.5, 0.5, 0.5,    1 + 0.5, 0.5, 1, 1,     1, 1, 1, 0.5, 0.5,
  53.   1 + 0.5, 0.5, 1, 1,    1, 1, 1, 0.5, 0.5,     1 + 0.5, 0.5, 1, 1,
  54.   1, 1, 1, 0.5, 0.5,    1, 0.5, 0.25, 0.25, 0.25, 0.5,    0.5, 0.5, 0.5, 0.25, 0.5, 1,
  55.   0.5, 0.5, 0.5, 0.5, 1, 1,    1, 1, 1, 0.5, 0.5,    1 + 0.5, 0.5, 1, 1,
  56.   1, 1, 1, 0.5, 0.5,    1.5, 0.5, 1, 1,    1, 1, 1, 1,
  57.   0.5, 0.5, 1, 1, 0.5, 0.5,    1.5, 0.25, 0.5, 1,    1, 1, 1, 1,
  58.   1, 1, 1, 1,    1, 1, 1, 1,    0.5, 0.5, 1, 1, 0.5, 0.5,
  59.   1, 0.5, 0.5, 1, 1,    1, 1, 1, 1,    1, 1, 1, 1,
  60.   0.5, 0.5, 1, 1, 0.5, 0.5,    1, 0.5, 0.25, 0.5, 1,    1, 1, 1, 0.5, 0.5
  61. };//这部分是整首曲子的节拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应么)
  62. int length;//这里定义一个变量,后面用来表示共有多少个音符
  63. int tonePin = 3; //蜂鸣器的pin
  64. void setup(){
  65.   pinMode(tonePin, OUTPUT); //设置蜂鸣器的pin为输出模式
  66.   length = sizeof(tune) / sizeof(tune[0]); //这里用了一个sizeof函数, 可以查出tone序列里有多少个音符
  67. }
  68. void loop(){
  69.   for (int x = 0; x < length; x++) //循环音符的次数
  70.   {
  71.     tone(tonePin, tune[x]); //此函数依次播放tune序列里的数组,即每个 音符
  72.     delay(400 * duration[x]); //每个音符持续的时间,即节拍duration,是调整时间的越大,曲子速度越慢,越小曲子速度越快,自己掌握
  73.     noTone(tonePin);//停止当前音符,进入下一音符
  74.   }
  75.   delay(5000);//等待5秒后,循环重新开始
  76. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-5-5 17:29:59

回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail