基于S3C2440處理器拳擊娛樂(lè)系統(tǒng)設(shè)計(jì)
引? 言??
拳擊娛樂(lè)系統(tǒng)是為滿(mǎn)足廣大群眾的需要而設(shè)計(jì),目前市場(chǎng)上還沒(méi)有模擬真人的對(duì)抗性的拳擊娛樂(lè)設(shè)備,該系統(tǒng)的出現(xiàn)使人們從枯燥的鍛煉中擺脫出來(lái),能夠主動(dòng)地投入到娛樂(lè)中。在人形靶的頭部正面和胸部正面各安裝一個(gè)擊打氣袋和壓力傳感器,當(dāng)語(yǔ)音提示可以開(kāi)始擊打時(shí),使用者可以全力擊打頭、胸部,同時(shí)ARM9處理器采集相應(yīng)的擊打數(shù)據(jù),在人形靶上安裝有自動(dòng)出擊拳裝置。
該系統(tǒng)選用了Samsung公司的16/32位RISC處理器S3C2440,由于該處理器價(jià)格低、功耗小、性能高,從而降低了整個(gè)系統(tǒng)的成本,便于市場(chǎng)的推廣。
在用戶(hù)界面的設(shè)計(jì)上,采用目前流行的Qt/Embedded,使顯示界面更直觀,操作更方便。Qt/Embedded豐富的控件資源和較好的可移植性給界面的設(shè)計(jì)以及今后的進(jìn)一步完善帶來(lái)了極大的方便。
1?拳擊健身娛樂(lè)系統(tǒng)簡(jiǎn)介
拳擊娛樂(lè)系統(tǒng)主要由人形靶、用戶(hù)操作界面、語(yǔ)音播報(bào)、數(shù)據(jù)采集處理、自動(dòng)出拳五部分組成。使用者擊打氣袋時(shí),該系統(tǒng)采集壓力傳感器數(shù)據(jù),并進(jìn)行相應(yīng)的處理,計(jì)算出使用者的出拳力量。語(yǔ)音播報(bào)用來(lái)提示、問(wèn)候使用者并播報(bào)結(jié)果數(shù)據(jù)。自動(dòng)出拳可以根據(jù)前方是否有遮擋物而隨機(jī)出拳還擊。語(yǔ)音播報(bào)和自動(dòng)出拳的結(jié)合更豐富了該系統(tǒng)的互動(dòng)性。
2 人形靶部分
人形靶高度可以根據(jù)使用者的高度進(jìn)行調(diào)整,以適應(yīng)不同人群的使用。該系統(tǒng)針對(duì)娛樂(lè)的要求設(shè)計(jì)了兩個(gè)擊打有效區(qū):頭部、胸部。每個(gè)擊打有效區(qū)都由擊打氣袋、開(kāi)關(guān)觸發(fā)裝置和壓力傳感器三部分組成。
在人形靶的頭部裝有反射式光電開(kāi)關(guān),用來(lái)判斷前方是否有遮擋物,為自動(dòng)出拳設(shè)備提供輸入信號(hào)。
3 用戶(hù)操作部分
用戶(hù)操作Qt/Embedded設(shè)計(jì)開(kāi)發(fā),界面更加人性化,簡(jiǎn)單化,使不同人群快速學(xué)會(huì)使用。Qt/Embedded是專(zhuān)門(mén)為嵌入式設(shè)備上的圖形用戶(hù)接口和應(yīng)用開(kāi)發(fā)設(shè)計(jì)的開(kāi)發(fā)包,可以跨平臺(tái)運(yùn)行在ARM處理器上的嵌入式Linux操作系統(tǒng)上。Qt/Embedded具有較好的移植性,從而使得今后該部分的進(jìn)一步開(kāi)發(fā)更加方便。采用標(biāo)準(zhǔn)PDA大小的觸摸屏,所以操作非常方便。
Qt/Embedded的底層圖形引擎基于Framebuffer。Framebuffer是在Linux內(nèi)核架構(gòu)版本2.2以后推出的標(biāo)準(zhǔn)顯示設(shè)備驅(qū)動(dòng)接口。采用mmap系統(tǒng)調(diào)用,可以將Framebuffer的顯示緩存映射為可連續(xù)訪(fǎng)問(wèn)的一段內(nèi)存儲(chǔ)針。Framebuffer驅(qū)動(dòng)程序的實(shí)現(xiàn)分為兩個(gè)方面:一方面是對(duì)LCD及其相關(guān)部分的初始化,包括畫(huà)面在緩沖區(qū)的創(chuàng)建和對(duì)DMA通道的設(shè)置;另外一方面是對(duì)畫(huà)面緩沖區(qū)的讀寫(xiě),具體到代碼為read,write,lseek等系統(tǒng)調(diào)用接口。Qt/Embedded延續(xù)了Qt在桌面系統(tǒng)的所有功能,豐富的API接口和基于組件的編程模型,使得嵌入式Linux系統(tǒng)中的應(yīng)用程序更加方便于該系統(tǒng)的開(kāi)發(fā)。
該部分分為娛樂(lè)和結(jié)果回放兩部分。主界面如圖1所示。
娛樂(lè)部分有三種模式:壓力測(cè)試、力量模式、速度模式。壓力測(cè)試用來(lái)測(cè)試頭、胸氣袋壓力是否在合適范圍內(nèi),壓力過(guò)高、過(guò)低進(jìn)行語(yǔ)音提示;壓力模式用來(lái)測(cè)試使用者力氣大??;速度模式用來(lái)測(cè)試使用者在一定時(shí)間內(nèi)擊打的有效拳數(shù)。
結(jié)果回放用來(lái)回放前段時(shí)間該系統(tǒng)使用情況,包括擊打位置和擊打力量?jī)刹糠?a target="_blank">信息。
4 語(yǔ)音播報(bào)部分
該部分負(fù)責(zé)播報(bào)使用提示、問(wèn)候語(yǔ)和使用者的擊打結(jié)果。播報(bào)結(jié)果包括有效拳重、有效拳數(shù)。當(dāng)使用者擊打到有效區(qū)域時(shí),會(huì)發(fā)出仿真的擊打聲音;壓力測(cè)試時(shí),壓力過(guò)高、過(guò)低的報(bào)警提示音;在開(kāi)關(guān)機(jī)時(shí),系統(tǒng)會(huì)播報(bào)問(wèn)候語(yǔ)等。在模擬與真人的對(duì)抗性的娛樂(lè)環(huán)境,語(yǔ)音播報(bào)突出了趣味性,提高了娛樂(lè)效果。
該部分是由專(zhuān)用的語(yǔ)音芯片UDA1341來(lái)完成的。在Linux下完成此功能,首先需要編譯UDA1341的驅(qū)動(dòng),使用編譯工具為交叉編譯器arm-linux-gcc 3.4.1,然后移植到ARM開(kāi)發(fā)板。最后再將madplay播放器使用同樣的方法編譯后移植到ARM開(kāi)發(fā)板上。驅(qū)動(dòng)和播放器都移植好后,在應(yīng)用程序中實(shí)現(xiàn)語(yǔ)音播報(bào)功能。
5 數(shù)據(jù)采集處理部分
數(shù)據(jù)采集處理部分由S3C2440處理器控制實(shí)現(xiàn)。它通過(guò)判斷采集有效區(qū)中觸發(fā)裝置的觸發(fā)信號(hào)是否有效,控制壓力傳感器數(shù)據(jù)的采集。
5.1?采集擊打點(diǎn)觸發(fā)裝置的觸發(fā)信號(hào)
在運(yùn)行力量或速度模式時(shí),需要不斷的掃描頭、胸?fù)舸虬存I的狀態(tài),當(dāng)擊打按鍵閉合時(shí),開(kāi)啟相應(yīng)壓力傳感器采集數(shù)據(jù),同時(shí)清除擊打按鍵的閉合狀態(tài)。
該部分在硬件上采用了CD4093來(lái)鎖存按鍵的狀態(tài),并且使用芯片75452來(lái)清除擊打按鍵的鎖存狀態(tài)。
5.2?壓力傳感器的采集
該部分是系統(tǒng)設(shè)計(jì)的主要部分,由該部分采集到的數(shù)據(jù)可以計(jì)算出出拳力量。
采集氣壓需要壓力傳感器和S3C2410的ADC轉(zhuǎn)換器。壓力傳感器選用Motorola的MPX5100壓力傳感器。該傳感器需要5 V直流電源供電,量程為110 kPa,對(duì)應(yīng)的輸出為0~5 V。
由于擊打氣袋時(shí),氣袋內(nèi)部不同位置壓力變化不同,造成壓力傳感器采集的壓力數(shù)據(jù)和其距離擊打位置有關(guān)。為了降低由此引起的測(cè)量誤差,在頭、胸部分別安裝兩個(gè)獨(dú)立氣袋和傳感器。實(shí)驗(yàn)證明該方案在一定程度上減小了誤差,能滿(mǎn)足本娛樂(lè)拳擊系統(tǒng)對(duì)結(jié)果精度的要求。
由于硬件電路以及電源帶來(lái)的干擾,導(dǎo)致采集的電壓疊加了許多毛刺,對(duì)數(shù)據(jù)的處理帶來(lái)了很大的困難。并對(duì)大量數(shù)據(jù)進(jìn)行分析后,在軟件上選定了中值濾波的方法減小其干擾,該方法具有編程簡(jiǎn)單,濾波效果好的特點(diǎn)。
當(dāng)擊打按鍵被擊中,這時(shí)記錄下規(guī)定時(shí)間內(nèi)采集的電壓值,通過(guò)中值濾波去除毛刺,得到平滑的波形,從而取其峰值作為擊打按鍵的電壓值。
5.3 訓(xùn)練數(shù)據(jù)的保存
娛樂(lè)結(jié)果數(shù)據(jù)保存到開(kāi)發(fā)板NAND FLASH中,為結(jié)果回放提供數(shù)據(jù)。在開(kāi)始使用該系統(tǒng)前,提示是否覆蓋已有數(shù)據(jù)結(jié)果,如此可以確保有充足的NANDFLASH空間保存當(dāng)次結(jié)果數(shù)據(jù)。數(shù)據(jù)結(jié)果包括擊打位置、擊打力量。為了以后本系統(tǒng)更容易升級(jí),采用數(shù)據(jù)庫(kù)SQLITE存放結(jié)果數(shù)據(jù),以供結(jié)果回放時(shí)使用。
數(shù)據(jù)采集處理部分在軟件的實(shí)現(xiàn)上,分別編寫(xiě)了按鍵驅(qū)動(dòng)button.ko,ADC轉(zhuǎn)換驅(qū)動(dòng)adc.ko,該驅(qū)動(dòng)能通過(guò)設(shè)置,選擇采集兩路AD中那路。建立SQLITE數(shù)據(jù)庫(kù),并對(duì)其進(jìn)行數(shù)據(jù)存取。
6?自動(dòng)出拳部分
自動(dòng)出拳分為檢測(cè)是否有遮擋物和出拳控制兩部分。是否出拳、出左右拳完全是隨機(jī)的,這樣增加了隨機(jī)不定性,可以達(dá)到更好的娛樂(lè)效果。
檢測(cè)遮擋物部分采用反射式光電開(kāi)關(guān),當(dāng)光電開(kāi)關(guān)接收到遮擋物的反射信號(hào),輸出高電平信號(hào),否則輸出低電平信號(hào),該信號(hào)通過(guò)隔離光耦傳人處理器S3C2440。S3C2440收到存在遮擋物的有效信號(hào)后,產(chǎn)生一個(gè)隨機(jī)信號(hào)控制出拳裝置。該隨機(jī)信號(hào)將決定是否出拳、出左拳還是右拳。
出拳控制部分采用兩個(gè)直流電機(jī)來(lái)帶動(dòng)兩個(gè)機(jī)械臂完成出拳動(dòng)作。為了確保每次出拳時(shí),機(jī)械臂在收回狀態(tài)時(shí)終止,在機(jī)械臂安裝一個(gè)能產(chǎn)生反饋信號(hào)的裝置。自動(dòng)出拳系統(tǒng)根據(jù)該反饋信號(hào)來(lái)確保完成一個(gè)出拳周期。
為了避免頻繁出拳,引起電機(jī)頻繁起停對(duì)電機(jī)本身的損害,同時(shí)不影響自動(dòng)出拳的娛樂(lè)效果,自動(dòng)出拳系統(tǒng)在連續(xù)出拳五次后,暫停隨后的兩次出拳,然后恢復(fù)自動(dòng)出拳。
該部分軟件實(shí)現(xiàn)包括:控制電機(jī)驅(qū)動(dòng)和光電開(kāi)關(guān)信號(hào)采集驅(qū)動(dòng)、產(chǎn)生隨機(jī)信號(hào)并控制電機(jī)的用戶(hù)態(tài)程序。
7?結(jié)? 語(yǔ)
該系統(tǒng)適用于各個(gè)年齡層的人群,可以比較準(zhǔn)確地測(cè)量擊打力量,同時(shí)該系統(tǒng)本身的語(yǔ)音播報(bào)以及自動(dòng)出拳的功能使機(jī)器人的互動(dòng)性更加豐富,體現(xiàn)了該系統(tǒng)的娛樂(lè)性。該系統(tǒng)在Linux操作系統(tǒng)下開(kāi)發(fā),結(jié)果保存采用SQLITE數(shù)據(jù)庫(kù),這給今后功能的擴(kuò)展預(yù)留了很大空間。
評(píng)論
查看更多