尹忠鈺
【摘 要】架子鼓是現代樂隊中一個重要的組成部分,但是架子鼓存在體積大、音量大等特點,攜帶不方便,訓練噪音大。本文設計了一套基于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.