- 所需硬件:
- 了解Arduino的Tone()函数:
- 该pitches.h头文件:
- 在Arduino上播放音符:
- 原理图和硬件:
- Arduino程序说明:
- 此Melody Player Arduino电路的工作原理:
得益于其开发人员社区,Arduino使几乎所有内容看起来都变得简单,是简化和加速微控制器项目的绝佳方法。这里有很多Arduino项目供您尝试并玩得开心。您的某些项目可能需要采取一些声音行动来通知某些事情或仅仅给观众留下深刻的印象。如果我告诉您,可以借助一个简单的程序和一个便宜的压电扬声器在您的Arduino上模仿几乎可以在钢琴上弹奏的主题曲该怎么办?
在本教程中,我们将学习使用Arduino tone()函数在Piezo Buzzer或Speaker上播放Melody是多么简单和容易。在本教程的最后,您将可以播放加勒比海盗,疯狂青蛙,超级马里奥和泰坦尼克号的一些著名音色。您还将学习如何使用Arduino演奏任何钢琴音乐。最后检查视频。
所需硬件:
- Arduino(任何版本–此处使用UNO)
- 压电扬声器/蜂鸣器或任何其他8ohm扬声器。
- 面包板
- 连接线
- 按按钮
- 1k电阻器(可选)
了解Arduino的 Tone() 函数:
在我们了解 音调()的 工作原理之前,我们应该知道压电蜂鸣器的工作原理。我们可能在学校里学到了压电晶体,无非就是将机械振动转换成电或反之亦然的晶体。在这里,我们施加一个可变电流(频率),使晶体振动,从而产生声音。因此,为了使压电蜂鸣器产生一些噪声,我们必须使压电晶体振动,噪声的音调和音调取决于晶体振动的速度。因此,可以通过改变电流的频率来控制音调和音调。
好的,我们如何从Arduino获得可变频率?这是使用tone()函数的地方。tone()可以在特定的引脚上生成特定的频率。如果需要,还可以提及持续时间。 tone() 的语法是
语法tone(引脚,频率)tone(引脚,频率,持续时间)参数pin:在其上生成音频的引脚频率:以赫兹为单位的音频频率-无符号int持续时间:以毫秒为单位的音频持续时间(可选) -无符号长
引脚的值可以是任何数字引脚。我在这里使用了8号针。可以产生的频率取决于Arduino开发板中计时器的大小。对于UNO和大多数其他通用板,可以产生的最小频率是31Hz,可以产生的最大频率是65535Hz。但是,我们人类只能听到2000Hz至5000 Hz之间的频率。
该 pitches.h 头文件:
现在,我们知道了如何使用arduino tone()函数 产生一些噪声。但是,我们如何知道每个频率会产生什么样的音调?
Arduino给了我们一个音符表,将每个频率等同于一种特定的音符类型。该注释表最初由Brett Hagman编写, tone() 命令基于其工作。我们将使用此注释表来播放主题。如果您是熟悉乐谱的人,您应该可以对这张表有所了解,对于像我这样的人来说,这些只是另一段代码。
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2B 117 #define #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3#233 NOTE_C4 262#定义NOTE_CS4 277#定义NOTE_D4 294#定义NOTE_DS4 311#定义NOTE_E4 330#定义NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E698 NOTE_FS5 740#定义NOTE_G5 784#定义NOTE_GS5 831#定义NOTE_A5 880#定义NOTE_AS5 932#定义NOTE_B5 988#定义NOTE_C6 1047#定义NOTE_CS6 1109#定义NOTE_D6 1175#定义NOTE_DS6 1245#定义NOTE_E6 13F#定义NOTE_E6 13F #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 NOTE_G7 3136#定义NOTE_GS7 3322#定义NOTE_A7 3520#定义NOTE_AS73729#定义NOTE_B7 3951#定义NOTE_C8 4186#定义NOTE_CS8 4435#定义NOTE_D8 4699#定义NOTE_DS8 4978
上面的代码在此zip文件的pitches.h头文件中给出 , 您只需下载此文件并将其包含在本教程末尾给出的Arduino代码中,或使用zip文件中给出的代码即可。
在Arduino上播放音符:
要使用Arduino演奏体面的旋律,我们应该知道这些旋律的构成。播放主题所需的三个主要因素是
- 票据价值
- 音符持续时间
- 速度
我们有 pitches.h 头文件可以播放任何音符值,现在我们应该找出要播放它的特定音符持续时间。节奏不过是旋律应该演奏多快。一旦你知道的音符值和持续时间注意你可以用使用它们 音() 一样
音调(pinName,音符值,音符持续时间);
对于本教程中播放的音调,我在“ themes.h”头文件中为您提供了“音符值”和“音符持续时间”,您可以使用它们在项目中播放它们。但是,如果您在自己的矿山中有任何特定的语气,并且想要在项目中演奏它,请继续阅读…。否则,请跳过本主题,然后转到下一主题。
要播放任何特定的音调,您必须获取该特定音乐的乐谱,然后通过读取其音符值和音符持续时间,将乐谱转换为Arduino草图。如果您是一名音乐系学生,那对您来说将是小菜一碟,否则会花一些时间像我一样打扰您。但是,当您的声音在压电蜂鸣器上播放时,您将发现自己值得付出的努力。
获得音符值和音符持续时间后,将它们加载到“ themes.h”头文件中的程序中,如下所示
// ############## **“ HE IS A PIRATE”加勒比海盗主题曲** ############### // int Pirates_note = {NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_D4 NOTE_A3,NOTE_C4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_F4,NOTE_F4,NOTE_G4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,0,NOTE_A3,NOTE_C4,NOTE_B3,NOTE_D4,NOTE_B3,NOTE_E4,NOTE_F4,NOTE_F4, NOTE_C4,NOTE_C4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_C4,NOTE_D4,0,0,NOTE_A3,NOTE_C4,NOTE_D4,NOTE_D4,NOTE_D4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_G4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_A4,NOTE_G4,NOTE_A4,NOTE_D4, 0,NOTE_D4,NOTE_E3,NOTE_F4,NOTE_F4,NOTE_G4,NOTE_A4,NOTE_D4、0,NOTE_D4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_F4,NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8,4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8,8,4,8,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4,4,8,8,8,8,4,4,8,8,4,4,8,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ###########他的结尾是海盗歌############# //
上面的代码块显示了电影“加勒比海盗”中“他是海盗”主题的音符值和音符持续时间。您可以像这样添加主题。
原理图和硬件:
下图显示了此 Arduino Tone Generator Project 项目的示意图:
连接非常简单,我们有一个压电扬声器,该扬声器通过1K电阻连接到Arduino的引脚8和接地。该1k电阻是一个限流电阻,用于将电流保持在安全范围内。我们还有四个开关可以选择所需的旋律。开关的一端接地,另一端分别连接到引脚2、3、4和5。开关将使用软件在内部启用上拉电阻。由于电路非常简单,因此可以使用面包板进行连接,如下所示:
Arduino程序说明:
一旦了解了这一概念,Arduino程序就非常简单了。完整的代码在本教程的结尾给出。如果您不熟悉添加头文件,则可以从此处将代码作为ZIP文件下载,然后直接将其上传到Arduino。
上面两个是必须添加的头文件。 “ pitches.h” 用于将每个音符等同于特定频率, “ themes.h” 包含所有四个音调的音符值和音符持续时间。
#include“ pitches.h” #include“ themes.h”
需要时会创建一个功能来播放每个音调。在此,当调用 Play_Pirates() 函数时,将播放“他是海盗”的声音。此功能由音调功能组成,该音调功能在第8号针脚产生频率。一旦播放音乐,就会调用 noTone(8) 停止音乐。如果您想弹奏自己的音调,请将Pirates_note和Pirates_duration更改为新的音符和持续时间值,并保存在 “ themes.h” 值中
void Play_Pirates(){for(int thisNote = 0; thisNote <(sizeof(Pirates_note)/ sizeof(int)); thisNote ++){int noteDuration = 1000 / Pirates_duration; //将持续时间转换为延时音(8,Pirates_note,noteDuration ); int pauseBetweenNotes = noteDuration * 1.05; //这里1.05是速度,增加播放速度会降低延迟(pauseBetweenNotes); noTone(8); }}
针脚2、3、4和5用于选择要播放的特定音调。默认情况下,使用上述代码行使用内部上拉电阻将这些引脚保持为高电平。当按下按钮时,它被下拉到地面。
pinMode(2,INPUT_PULLUP); pinMode(3,INPUT_PULLUP); pinMode(4,INPUT_PULLUP); pinMode(5,INPUT_PULLUP);
当按下一个按钮时,下面的代码块用于播放歌曲。它读取每个按钮的数字值,当它变低(零)时,它假定该按钮已被按下并通过调用所需功能播放相应的音调。
如果(digitalRead(2)== 0){Serial.println(“ Selected->'He is a Pirate'”); Play_Pirates(); }如果(digitalRead(3)== 0){Serial.println(“ Selected->'Crazy Frog'”); Play_CrazyFrog(); }如果(digitalRead(4)== 0){Serial.println(“ Selected->'Mario UnderWorld'”); Play_MarioUW(); }如果(digitalRead(5)== 0){Serial.println(“ Selected->'He is a Pirate'”); Play_Pirates(); }
此Melody Player Arduino电路的工作原理:
一旦您的代码和硬件准备就绪,只需将程序刻录到Arduino,您只需按一下按钮就可以播放声音。如果您有任何问题,请查看串行监视器进行调试,或使用注释部分报告问题,我们将竭诚为您服务。
以下视频显示了该项目的完整工作。希望您喜欢这个项目,并希望在您的某些项目中使用它,或者为您的项目创建新的音调。如果是,请随时在评论部分分享您的工作。