侯怡帆,楊淇善*,梁楷銘,劉興宇,劉凱威
(北京工業(yè)大學(xué),北京)
我國豐富的傳統(tǒng)文化中,京劇是重要的構(gòu)成元素之一[1]。隨著新興的藝術(shù)形式出現(xiàn),京劇藝術(shù)的吸引力逐漸降低,傳承與發(fā)展遇到了一定的挑戰(zhàn)[2]。動態(tài)裝置是局部或整體具有活動、交互能力的藝術(shù)作品,能夠提升文化藝術(shù)的感染力和吸引力[3]。本文以Arduino Mega 2560 開發(fā)板為核心,設(shè)計并實現(xiàn)了一種具有動態(tài)效果的微型戲臺,具有良好的觀賞性與創(chuàng)意性,可增強(qiáng)京劇文化對普通受眾的吸引力。
微型戲臺的結(jié)構(gòu)設(shè)計綜合考慮舞臺效果與人機(jī)交互中的主要因素,總體結(jié)構(gòu)見圖1。
圖1 微型戲臺結(jié)構(gòu)設(shè)計圖
戲臺尺寸應(yīng)依據(jù)視距、視野等計算合適的參數(shù)范圍[4]。在雙眼觀看的條件下,最佳視區(qū)的水平夾角約為25°,垂直夾角約為15°[5]。最佳視距設(shè)定為0.5 m,最佳視區(qū)的水平寬度約為0.466 m,垂直高度約為0.268 m,面積約為0.098 m2。綜合框架材料厚度、底座高度等因素,則微型戲臺整體的設(shè)計水平寬度為0.5 m、垂直高度為0.35 m。
根據(jù)不同的場景,系統(tǒng)可設(shè)置為普通模式和觀賞模式。普通模式中,系統(tǒng)循環(huán)演播劇目內(nèi)容。觀賞模式中,正面0.5 m 范圍內(nèi)有觀眾時演播劇目內(nèi)容。若觀眾離開,則立刻暫停當(dāng)前的劇目。
Arduino Mega 2560 開發(fā)板基于微控制器ATmega2560 設(shè)計,擁有54 個數(shù)字信號引腳,并支持UART、I2C 和SPI 等多種標(biāo)準(zhǔn)的通信接口[6]。系統(tǒng)硬件電路設(shè)計見圖2。
圖2 系統(tǒng)硬件設(shè)計框圖
兩個28BYJ-48 步進(jìn)電機(jī)帶動角色模型底部的齒條實現(xiàn)移動,同時,人物模型上放置LED,以突出當(dāng)前唱詞所對應(yīng)的角色。
戲臺兩端分別放置音頻模塊DY-SV5W,并掛載3 W 的揚(yáng)聲器,通過兩個UART 接口分別控制。
在0.5 m 視距條件下,黑體12 號字可被人眼準(zhǔn)確識別[7]。戲臺正面安裝0.96" OLED 顯示屏,其內(nèi)置支持I2C 通信接口的SSD1315 控制芯片。
通過輕觸按鍵可實現(xiàn)開機(jī)、關(guān)機(jī)、播放、暫停、音量調(diào)節(jié)和運(yùn)行模式切換等基本的控制功能。此外,包含兩個指示運(yùn)行模式的LED。
采用超聲波測距模塊HC-SR04 與人體熱釋電傳感器HC-SR505 的數(shù)據(jù)綜合判斷是否有觀眾在適宜的距離內(nèi)。
戲臺內(nèi)頂安裝全彩LED 柔性燈帶,內(nèi)置SK6812控制芯片。
控制程序采用有限狀態(tài)機(jī)的設(shè)計方法進(jìn)行構(gòu)建。系統(tǒng)上電后,進(jìn)入待機(jī)狀態(tài)STANDBY。當(dāng)用戶按下“開機(jī)”按鍵后,系統(tǒng)進(jìn)入演播的相關(guān)狀態(tài)。演播過程以角色的唱詞段落劃分為38 個狀態(tài),即PART_1 至PART_38,并根據(jù)劇目內(nèi)容順序跳轉(zhuǎn)。狀態(tài)PART_38 執(zhí)行完畢后,系統(tǒng)進(jìn)入劇終狀態(tài)PART_END,將軟、硬件狀態(tài)恢復(fù)為開場就緒的情況。隨后,跳轉(zhuǎn)至PART_1 重新演播劇目。處于狀態(tài)PART_1至PART_38 時,若用戶按下“暫?!卑存I則進(jìn)入暫停狀態(tài)PAUSE_K,觀賞模式下離開則進(jìn)入暫停狀態(tài)PAUSE_P,按下“關(guān)機(jī)”按鍵則進(jìn)入重置狀態(tài)RESET。在兩個暫停狀態(tài)下,若用戶按下“播放”按鍵或觀賞模式下返回,系統(tǒng)將跳轉(zhuǎn)回前一個狀態(tài)繼續(xù)演播劇目。在狀態(tài)PAUSE_P下,若長時間無觀眾觀看則跳轉(zhuǎn)至狀態(tài)RESET。狀態(tài)RESET 與狀態(tài)PART_END 的功能相似,執(zhí)行完畢后跳轉(zhuǎn)至狀態(tài)STANDBY??刂瞥绦虻南到y(tǒng)狀態(tài)設(shè)計見圖3。
圖3 系統(tǒng)狀態(tài)設(shè)計圖
主函數(shù)中首先根據(jù)當(dāng)前系統(tǒng)狀態(tài)對若干前置條件進(jìn)行判斷,并更新標(biāo)記變量或系統(tǒng)狀態(tài)值。前置條件判斷完成后,執(zhí)行系統(tǒng)狀態(tài)機(jī)中相應(yīng)狀態(tài)分支的任務(wù)函數(shù)。最后,記錄當(dāng)前系統(tǒng)已運(yùn)行時間,用于劇目演播的同步控制。主函數(shù)流程圖見圖4。
圖4 主函數(shù)流程圖
系統(tǒng)中每個狀態(tài)均有對應(yīng)的任務(wù)函數(shù),可分為四類:演播任務(wù)、暫停任務(wù)、重置任務(wù)和待機(jī)任務(wù)。各個系統(tǒng)狀態(tài)進(jìn)一步劃分為任務(wù)子狀態(tài)機(jī)。
演播任務(wù)函數(shù)的子狀態(tài)機(jī)以劇目內(nèi)容及時間節(jié)點為主要因素,將各個硬件功能模塊需要完成的控制工作劃分為多個動作子狀態(tài)。每個動作子狀態(tài)之間加入等待子狀態(tài),控制下一個動作執(zhí)行時間。同時,通過系統(tǒng)狀態(tài)值與時間判斷是否需要跳轉(zhuǎn)至其他系統(tǒng)狀態(tài)。
當(dāng)進(jìn)入暫停任務(wù)狀態(tài)時,暫存各個軟、硬件功能模塊的參數(shù),以備恢復(fù)演播狀態(tài)后使用。同時,記錄當(dāng)前任務(wù)函數(shù)運(yùn)行時間值。若暫停時間超過閾值,則更新系統(tǒng)狀態(tài)值跳轉(zhuǎn)至狀態(tài)RESET。
重置任務(wù)負(fù)責(zé)恢復(fù)各個軟、硬件功能模塊的初始狀態(tài)。該任務(wù)運(yùn)行期間不響應(yīng)中斷,以保證代碼能夠完整執(zhí)行。
待機(jī)任務(wù)中僅記錄待機(jī)的時間值。若待機(jī)時間超過閾值,則提示用戶關(guān)閉電源。
測試工作可分為前期的功能模塊測試與后期的用戶實際測試兩部分。
針對各個硬件模塊獨立測試,驗證函數(shù)庫及控制方法的正確性。系統(tǒng)中的步進(jìn)電機(jī)、音頻模塊、LED、按鍵、OLED 顯示屏、全彩LED 燈帶、測距模塊和人體感應(yīng)模塊等功能測試均符合預(yù)期。
由于各個硬件器件的響應(yīng)時間不一致,為保證唱詞與字幕的時間點匹配,需對代碼執(zhí)行至實際功能有效的延遲時間進(jìn)行測試。
經(jīng)測試,唱詞延時總平均值約為765 ms,最大值為782 ms。字幕延時總平均值約為36 ms,最大值為50 ms。因此,執(zhí)行唱詞播放代碼約730 ms 后執(zhí)行字幕顯示代碼,可使唱詞與字幕的匹配達(dá)到感官適宜的程度。
觀賞模式中,需檢測0.5 m 范圍內(nèi)有無觀眾在場。根據(jù)不同距離與角度,均以20 次測量結(jié)果的準(zhǔn)確率進(jìn)行分析,測試結(jié)果見表1。
表1 觀眾檢測準(zhǔn)確率
采用滑動閾值法可準(zhǔn)確的檢測當(dāng)前有無觀眾。但是,當(dāng)夾角度數(shù)達(dá)到45°,即超聲波反射信號夾角明顯大于15°后,在邊界值0.5 m 處會出現(xiàn)一定的誤判。
以用戶實際使用檢驗系統(tǒng)是否能夠正常運(yùn)行并完成既定的功能,實物見圖5。
圖5 微型戲臺實物圖
首先,以普通模式完整演播劇目。第二次測試時,用戶多次進(jìn)行暫停、調(diào)節(jié)音量等操作。第三次測試時,系統(tǒng)調(diào)整為觀賞模式,用戶多次離開和返回。經(jīng)測試,微型戲臺可完整地實現(xiàn)劇目演播、用戶交互操作響應(yīng)等功能,驗證了設(shè)計的可行性及開發(fā)工作的正確性。
良好的創(chuàng)意設(shè)計能夠影響人們的思想和觀念[8]。利用Arduino Mega 2560 開發(fā)板所實現(xiàn)的微型京劇戲臺是開源硬件與傳統(tǒng)藝術(shù)的結(jié)合,充分發(fā)揮動態(tài)裝置的優(yōu)勢,具有一定的創(chuàng)意性,有利于京劇文化的傳播與推廣。