arduino编乐谱_基于Arduino的电子音乐发声器设计

摘要:Arduino 是一块基于开放原始代码的Simple I/O平台,具有使用简单,功能多样,价格低廉等优点,广泛应用于电子系统设计和互动产品开发方面。系统以ArduinoUNO开发平台为控制核心,充分利用其内部Tone 库,以数组形式组织乐曲的音高和节拍数据,通过串口和外围无源蜂鸣器进行通信,实现了电子音乐播放,随音乐节拍亮灭的LED为设计添加了温馨感。本系统成本低廉,可靠性高,可实现乐曲DIY,有良好的扩展性。

引言

1 系统硬件设计

本发声器以ArduinoUNO为控制核心,外部电路包括控制电路、蜂鸣器电路、LED显示节奏电路,系统硬件电路图如图1所示。开关S1对整个电路起控制作用,当检测到开关按下,即D3端口为高电平时,电路开始工作。预先组织好的音符数据(音高和节拍)通过数字端口D8发送到5V无源蜂鸣器J1,无源蜂鸣器接收到特定频率的(即特定的音高)方波去驱动它,可以发出“Do Re Mi Fa Sol La Si”的音乐效果。各数据加上延时(即节拍数据)即可实现乐曲的播放。无源蜂鸣器的优点是声音频率可控,可以和LED复用一个控制口。所以,D8端口的数据同时加到LED1、LED2、LED3上时,其节奏性的亮灭实现了节拍的显示。

2.2 乐曲播放的软件实现

ArduinoIDE包含的Tone库可以很方便地帮助用户制作音乐。本设计主要采用了Tone(pin, frequency, duration)函数来产生电子音乐。此函数中,pin表示频率数据的数字输出接口,int型;frequency是音符频率,int型;duration是节拍数据,单位是毫秒,unsigned long型。只要把上述频率和节拍数据连续赋值给Tone函数,就可以实现乐曲的播放,系统软件实现的程序流程图见图2。

Arduino语言是以setup( )开头,loop( )作为主体的一个程序构架。本发声器的软件实现过程中, loop( )函数内部包含了控制按键判断函数,乐曲播放函数和延时函数。其中,乐曲播放函数play( )是发声器软件实现的核心语句,函数内所有语句周而复始地循环执行。下面以《生日快乐歌》(简谱见图3)的第一小节为例,给出了play( )函数的实现过程。

arduino编乐谱_基于Arduino的电子音乐发声器设计

int melody[] = {

NOTE_G4,//5

NOTE_G4,//5

NOTE_A4,//6

NOTE_G4,//5

NOTE_C5,//1.

NOTE_B4,//7

0,

……};

int noteDurations[] = {

8,8,4,4,4,4,

4,

……

};

void play()

{

for (int thisNote = 0; thisNote

{

int noteDuration = 1000/noteDurations[thisNote];

tone(8, melody[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.30;

delay(pauseBetweenNotes);

noTone(8);

}}

3 结论

参考文献:

[1]赵英杰.Arduino互动设计入门[M].北京:科学出版 ,2014.

[2]Michael McRoberts,Begin Arduino[M].杨继志,郭敬译.北京:电子工业出版 ,2013.

[3]杨继志,杨宇环.基于Arduino的 络互动产品创新设计[J].机电产品开发与创新,2012,25(1):99-100.

[4]蔡睿妍.Arduino 的原理及应用[J].电子工程设计,2012,20(16):155-157.

[5]赵云娥,陈学煌.基于AT89C51的电子节拍器设计[J].电子测量技术,2008,31(3):176-179.

相关资源:Yalefree雅乐简谱打谱软件_打谱软件-WindowsServer工具类资源…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月18日
下一篇 2020年11月18日

相关推荐