基于APP控制的空气鼓棒的设计与实现

2018-07-27 11:28尹忠钰
科技视界 2018年9期
关键词:架子鼓

尹忠钰

【摘 要】架子鼓是现代乐队中一个重要的组成部分,但是架子鼓存在体积大、音量大等特点,携带不方便,训练噪音大。本文设计了一套基于APP控制的空气鼓棒,只有两个电子鼓棒,通过挥动鼓棒,手机上的APP发出相应的击鼓声音,达到了携带方便,音量可控,训练不扰民等优点,完美解决了传统架子鼓存在的问题。

【关键词】架子鼓;鼓棒;STM32;APP

中图分类号: G623.71 文献标识码: A 文章编号: 2095-2457(2018)09-0063-002

DOI:10.19694/j.cnki.issn2095-2457.2018.09.028

Design and Implementation of Air Drums Based on APP Control

YIN Zhong-yu

(School of Electrical and Information Engineering, Southwest University for Nationalities, Chengdu 610041, China)

【Abstract】Drums are an important part of the modern band, but the drums are bulky, loud, and so on. They are inconvenient to carry and have a lot of training noise. This article designed a set of air drum sticks based on APP control. There are only two electronic drum sticks. By waving the sticks, the app on the mobile phone can make a corresponding drum beat, which is convenient to carry, controllable volume, and training does not disturb people. Perfectly solves the problems of traditional drums.

【Key words】Drums; Sticks; STM32; APP

0 緒论

架子鼓是现代乐队中一个重要组成部分,但是对比与其他乐器,架子鼓的体积大质量重,搬运非常困难,同时它难以控制的巨大音量常常在乐队排练时盖过其他乐器声音,训练过程中还有扰民的危害。对比于这种情况,这款基于APP控制的空气鼓棒只需要用两个鼓棒,就可以模拟出真实架子鼓的声音,无疑的方便了许多。该空气鼓棒设计方法合理,成本低,使用与制作都很方便,对于架子鼓爱好者是一个大大的福音,有一定的推广价值。

1 系统设计

图1 系统总设计结构图

本设计由两个加速度传感器、一个脚踏开关,一个主控芯片和一款APP组成。加速度传感器和开关检测到使用者的姿态后,传输给主控MPU,在主控芯片进行处理后通过蓝牙发送给安卓手机,APP接收到数据后,根据接收到的数据发出特定音频。

1.1 硬件设计

在本设计中,使用了一些外围器件以及模块电路,检测模块使用mpu6050,主控芯片选用STM32F407最小系统板,语音模块使用版本为4.0以上的安卓手机,通信使用蓝牙芯片。Mpu6050模块固定在鼓棒上便于检测到使用者的挥动,通过电气连接与主控stm32连接,stm32模块除了必要的基础电路以外,还搭建了一个蓝牙模块,用于与手机通信。

1.2 软件设计

本项目的目标是实现超级鼓棒可以发出真实击鼓的声音、易于携带和便于练习。不仅仅需要硬件的高度配合,软件的辅助也很重要。所以本次采用的是与stm32系列单片机相对应的高级语言和结构化设计方法来对控制程序的编写,使用Android studio为开发环境,JAVA为开发语音对APP进行编写。

图2 软件总流程图

软件设计分为两块,一为主控芯片stm32的控制程序,二为手机APP的通信发声程序。控制程序中,主要是接受MPU6050传输回来的姿态数据,并进行判定、通过蓝牙模块发送特定数据。APP程序主要是接受数据进行判定,并发出声音。本次APP设计为了实现架子鼓声混音(同时发出多种鼓声),所以APP的发声程序采用多线程编程,并调用Sound pool音效池来实现。

STM32的控制程序分为3个部分:对mpu6050数据处理、蓝牙模块的通信程序、对鼓棒挥动的判定。

(1)mpu6050数据处理。

此设计的数据处理调用了mpu6050自带的数字运动处理器,即 DMP,并且,InvenSense提供了一个 MPU6050 的嵌入式运动驱动库,结合 MPU6050 的 DMP,可以将我们的原始数据,直接转换成四元数输出,而得到四元数之后,就可以很方便的计算出欧拉角,从而得到 yaw、roll 和 pitch。具体实施步骤为,主函数内首先利用一个循环初始化mpu6050和IIC,结束后运行算法函数,得到具体的欧拉角。

(2)蓝牙模块的通信程序。

蓝牙模块与STM32通过串口通信,所以直接使用串口函数即可通信。

(3)对鼓棒挥动的判定。

此部分函数的作用为准确检测鼓棒的挥动,且两个鼓棒的检测要分开,不能分别影响。鼓棒的一次挥动分为,鼓棒抬起,与鼓棒落下。因此可以设置状态标识变量,来对鼓棒挥动状态进行实时检测,当满足到一次挥动抬起和一次挥动落下时,判定为鼓棒挥动了一次,即可运行通信函数。

1.3 APP程序设计

APP的开发环境为Android Studio,核心代码主要分为3个部分:实现发声功能的Sound Pool 音效池部分、实现通信功能的蓝牙部分、界面代码部分。

1.3.1 Sound Pool 音效池部分

Sound Pool一般用来播放的文件特点有:声音短,文件小,延时慢(不像使用Media Player类播放音乐时,需要等待一段时间),因此常用来播放各种实时音效,如游戏音效。因此选用它是非常合适的。使用方法为(1)将鼓的音乐文件拷贝到工程下(2)新建一个Sound Pool实例;(3)使用load()方法,让Sound Pool实例加载音效资源,该方法会返回一个整型的sound ID,在第四步需要用到;(4)使用play()方法播放音效,該方法会返回一个整型的stream ID,这个返回值可以保存起来,在需要暂停/恢复播放时需要用到。Sound pool具体使用方法可以参考谷歌官方文档,这里不做过多结束。

初始化音效池

1.3.2 蓝牙通信部分

蓝牙通信部分主要用到4种API,分别为Bluetooth Adapter、Bluetooth Socket、Bluetooth Server Socket、Bluetooth Device。此设计具体实现流程为(1)在主线程里设置一个按钮,用来检测蓝牙是否开启,若没有便开启蓝牙。(2)设置另外一个按钮用于开启蓝牙搜索功能并开启广播监听搜索结果。(3)蓝牙搜索到指定设备后,开启连接子线程,设立标志位检测连接是否成功。(4)连接成功后开启通信子线程(5)子线程中接受蓝牙传输过来的数据,并通过handle方法发送回主线程(6)主线程进行数据判定,播放指定声音。

开启蓝牙并获取本机蓝牙信息

搜索设备和停止搜索

adapter.startDiscovery();

adapter.cancelDiscovery();

配置监听广播

监听结果

连接子线程核心代码

通信子线程核心代码

主线程发声代码

1.3.3 界面代码部分

活动代码包含3个按键,name分别为:“打开蓝牙”、“连接鼓棒”、“关闭”。按照线性布局排列。

2 结束语

在组建好硬件并在手机上下载好软件后,两根超级鼓棒能发出传统架子鼓的声音,能够用于平常练习和大部分歌曲的伴奏;播放设备能传送多种鼓声,达到混音效果。接口既可连接耳机也可连接音响。

随着科技的发展和社会的进步,便携式的装备在日常生活中会越来越常见以及受欢迎。如何使乐器做到不占太大空间,方便携带,又能达到训练或演出的效果,并且训练时不扰民,这可能是未来乐器制作的方向。这次设计涉及的姿态检测与APP开发,在便携式装备的开发中有着很重要的地位。

【参考文献】

[1]STMicroelectronics,STM32F103C6T6数据手册,2007.

[2]刘军,张洋,严汉宇.例说STM32[M].北京,北京航天出版社,2014.

[3]郭霖.第一行代码Android(第二版)[M].人民邮电出版社,2016.

猜你喜欢
架子鼓
我和架子鼓
你好,架子鼓
弟弟的“架子鼓演奏会”
架子鼓的魔力