作者 赵云娥1 吴振强2 1.青海建筑职业技术学院(青海 西宁 810012) 2.陕西师范大学计算机科学学院(陕西 西安 710119)本文引用地址:http://www.eepw.com.cn/article/201702/344566.htm

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

引言

Arduino 是一个基于开放原始代码的Simple I/O平台,由硬件(MCU及外围电路)和软件(编程接口和语言)两部分组成。它基于单片机系统开发,具有使用简单,功能多样,价格低廉等优点,广泛应用于电子系统设计和互动产品开发方面。目前市场所见电子音乐发声器调节不便,价格较高,不能很好地实现和使用者的交互。本电子音乐发声器的设计以ArduinoUNO板为控制核心,在相关乐理基础知识上,充分利用Arduino编辑器自带Tone扩展库,以数组形式输出各音符的指定频率和节拍,送到无源蜂鸣器和彩色LED,实现了音乐播放和随音乐节奏亮灭的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.1 乐曲播放原理

2.1.1 单音符的演奏原理

一首乐曲由若干音符组成。从物理的角度来说,每一个音符唯一对应一个发声频率。Arduino只要把这个频率数据发送给蜂鸣器或喇叭,就会发出对应的音符。Arduino IDE自带的头文件“pitches.h”中以宏定义的形式给出了各个音符和频率的对应关系表。例如“#define NOTE_C4 262”语句给出了钢琴标准键盘小字一组C4(唱名为Do)按键对应的频率是262Hz。因此,只要能够识别给定的乐谱,就能得到一组对应该乐曲的频率数据,即制作出其数组形式的韵律函数。

2.1.2 节拍

除了音高,构成旋律的另一个重要因素是节拍,即音符演奏的持续时间。它决定了音乐进行的快慢程度。本发声器的设计中,通过读取旋律的节拍速度,来确定基本的延时单位。如二分音符为一拍,每拍延时1/2秒,则四分音符延时1/4秒,八分音符延时为1/8秒,均为基本延时的偶数倍。最终,采用了noteDurations[thisNote]数组来存放每个音符的节拍数据。在应用过程中,我们也可以通过调节基本延时来调节乐曲速度。频率数据按照节拍数据的延时来驱动蜂鸣器,就实现了一首乐曲的播放。

2.2 乐曲播放的软件实现

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

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

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 < 29; thisNote++)

{

int noteDuration = 1000/noteDurations[thisNote];

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

int pauseBetweenNotes = noteDuration * 1.30;

delay(pauseBetweenNotes);

noTone(8);

}}

3 结论

本系统利用了目前较为流行的Arduino电子互动平台,通过对ARDUINO IDE平台进行软件开发来控制外围部件,实现了电子音乐的播放和节奏的显示。Arduino是基于源代码的软硬件平台,具有价格便宜,互动多样,支持实时ISP在线烧录等特点。因此,本发声器价格低廉,操作简单,编辑方便,节拍速度可以调节,灵活性较高。该发声器功能可以进一步拓展,如果使用者具有一定的音乐素养,可以实现电子音乐DIY,为生活添加乐趣。

参考文献:

[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.

本文来源于《电子产品世界》2017年第2期第36页,欢迎您写论文时引用,并注明出处。

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

  1. arduino编乐谱_【Arduino】用Arduino编首小曲子吧

    本次我们需要用的材料不多,一块UNO板,一块扩展板,一个喇叭模块再加一张乐谱.主要的核心内容是我们用arduino来编写音乐的部分. 编写音乐,首先我们一定要知道其中的乐理知识,知道音乐是怎样编排的, ...

  2. arduino灯光装置_基于Arduino的智能家居灯控系统设计

    &能应用 ------ T X 阵 W S 2 8 1 2 全 彩 灯 带 R X 工 G N D r 0 引言 智能家居的概念虽然已经有了几十年,但进入我国并取 得一定发展还是最近几年的事, ...

  3. arduino编码器计数_基于Arduino开发环境的光电编码器检测仪设计方案 - 全文

    0 引言 Arduino是一款基于单片机系统的电子产品开发平台,它的软硬件系统都具有高度的模块化,而且软件系统是完全开源的.其硬件系统也是高度模块化的,在核心控制板的外围有开关量输入/输出模块.各种模 ...

  4. arduino 伸缩轨道_基于Arduino的多轨道Midi音序器的实现

    基于 Arduino 的多轨道 Midi 音序器的实现 陈业欣,丰大军,张 蓓 [摘 要] 我国对于专业电声设备的研究相对落后,当今专业电声产品无一例外 均来自日本及欧美国家.通过对使用音乐合成器时声 ...

  5. arduino nano 蓝牙_基于Arduino的摩尔斯电码练习及无线收发报训练器

    摘要:本文介绍一款基于Arduino NANO开发的,带2.4G无线收发报功能的摩尔斯电码训练器的系统设计思路.发射端通过NANO板的外部中断引脚采集电键输入的脉冲PPM序列同时驱动喇叭播放电键音,然 ...

  6. arduino编乐谱_把乐谱播出来,自制简谱播放库

    关注我们微信的童鞋可能还记得,昨天我发了一章关于UNO+喇叭就可以播放歌曲的文章. 文章到最后也没有完成整个天空之城歌曲.因为实在是太麻烦了..于是今天就苦思冥想,想借此机会整理出一个简谱的播放程序. ...

  7. arduino灯光装置_基于Arduino的灯光秀

    步骤1:准备木制框架 您可以按照您希望的任何方式构建框架或外壳.我选择木材是因为仅需使用基本工具即可轻松完成工作. 我已使用一些已打捞过的木板来搭建框架.我在长度为30厘米的木板上标记了4个干净的零件 ...

  8. arduino智能闹钟_基于arduino的震动闹钟

    本帖最后由 cloverli 于 2020-7-10 15:24 编辑 参赛项目: 震动闹钟 参赛组员: cloverli 项目简介: 在叫醒自己的同时,不打扰到别人的闹钟.微型震动马达为闹铃装置,利 ...

  9. 基于android的电子词典设计_基于Android的电子词典的设计

    本毕业设计课题主要分为两个模块:即英-汉查询模块和汉语查询模块.在此两模块都是使用的Sqlite数据库,且数据库为.db文件. 对于电子词典,自己会根据任务书下达的任务来一步一步完成,实现系统的设计与 ...

最新文章

  1. 如何在多Node版本的情况下公用一个npm
  2. php程序员面试题(持续补充,偏中级面试题)
  3. SublimeText3系列(1)-安装、设置、快捷键、常用插件
  4. Dependence Injection
  5. 高阶函数 实现sum(2)(3) 柯里化
  6. 【Web后端笔记】SQL Server与java数据类型对应
  7. 2021年三月上旬推荐阅读文章
  8. 链表的中间节点--快慢指针
  9. 如何提高计算机软件的性能,如何提高计算机性能?
  10. 自动驾驶横向控制 LQR 算法推导及仿真学习笔记
  11. 如何解决Flash “此Flash Player 与您的地区不相容,请重新安装Flash”的提示?
  12. 测试所用的技术(黑盒、白盒测试等)
  13. 对反游戏外挂技术的思考及实现
  14. Spring In Action 学习 第一章 Spring之旅
  15. iOS设备指纹的前世今生
  16. 自动监控Oracle 表空间信息并发送邮件脚本
  17. 谈谈如何通过需求文档产生工作排期
  18. 哈佛大学计算机专业研究生排名,2019USnews美国大学ece研究生专业新排名诞生
  19. 剑指 Offer17-21
  20. RealFlow在线教程翻译(2)——Foam with SPH Fluids(基于平滑粒子流体动力学算法(SPH)的流体泡沫)

热门文章

  1. 迦瓦栈队 团队第一周项目总结
  2. angular.min.js:80 Error: [$injector:unpr] http://errors.angularjs.org/1.2.9/
  3. ExtJS的History使用
  4. axios请求发送两次请求_vue使用axios发送请求,都会发送两次请求
  5. ansys一段时间后进入model报错:ansysWBU.exe encountered a problem.
  6. CF919C Seat Arrangements
  7. 测试-------性能测试(一)
  8. 多臂老虎机(Multi-armed bandit problem)
  9. Generating Summaries with Topic Templates and Structured Convolutional Decoders笔记
  10. vue echarts绘制市级地图下钻(带注释)