使用Arduino和蜂鸣器播放流行歌曲
使用蜂鸣器生成的流行歌曲和旋律
项目介绍
蜂鸣器用于生成歌曲的声音、哔哔声甚至旋律。它可以在警报设备、计算机、计时器和用户输入的确认(如鼠标点击或击键)中找到。
压电蜂鸣器不像您可能想到的普通扬声器。它使用的材料实际上会在您对其施加电力时改变形状,从而产生噪音。材料弯曲得越快,产生的噪音音调就越高。
接线方案
连接非常简单,它只有控制信号和GND。引脚 D9 将用于控制音调。
Arduino代码
内置的Arduino函数将用于生成旋律。 Tone() 在引脚上生成指定频率(和 50% 占空比)的方波。可以指定持续时间,否则波会一直持续到调用 noTone() 。如果您尝试为人耳制作音调,那么 2000 到 5000 之间的值是我们耳朵调谐最多的地方。
主程序将遍历音符,并为音符使用指定的持续时间。该代码具有不言自明的注释,以便更好地理解正在执行的操作。
#include "pitches.h"
#define BUZZER_PIN 9
int melody[] = {
// Notes goes here
};
int durations[] = {
// Notes duration goes here
};
void setup()
{
pinMode(BUZZER_PIN, OUTPUT);
}
void loop()
{
int size = sizeof(durations) / sizeof(int);
for (int note = 0; note < size; note++) {
//to calculate the note duration, take one second divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int duration = 1000 / durations[note];
tone(BUZZER_PIN, melody[note], duration);
//to distinguish the notes, set a minimum time between them.
//the note's duration + 30% seems to work well:
int pauseBetweenNotes = duration * 1.30;
delay(pauseBetweenNotes);
//stop the tone playing:
noTone(BUZZER_PIN);
}
}
一次只能生成一个音调。如果一个音调已经在另一个引脚上播放,则对 tone() 的调用将不起作用。如果音调在同一针脚上播放,呼叫将设置其频率。使用 tone() 函数会干扰引脚 3 和 11 上的 PWM 输出(在 Mega 以外的电路板上)。此外,无法生成低于 31Hz 的音调。
音高库
用于生成旋律的代码使用我们的 $ GitHub 上提供的额外库。$ 此文件包含典型音符的所有音高值。
要导入库,请打开 Arduino IDE,转到 Sketch >Include Library >Add.ZIP Library,然后选择从我们的 GitHub 存储库下载的库文件。
然后,您可以简单地使用 include 语句:
#include "pitches.h"
它将包括具有预定义音高常数的库,因此旋律生成变得更加容易。
流行歌曲
目前,以下旋律可用。可以根据用户请求使用新列表更新列表。因此,请随时发表评论,并附上您想听的旋律。