杭州經(jīng)濟(jì)技術(shù)開發(fā)區(qū)聽濤小學(xué) 裘炯濤
溫州中學(xué) 謝作如
微信朋友圈已經(jīng)成為了現(xiàn)代人們社交的重要的場(chǎng)合冬殃,2017年末的朋友圈被一個(gè)簡(jiǎn)單的小游戲占領(lǐng)艇搀。在2017年12月29日更新的最新版微信中队寇,增加了一個(gè)名為“跳一跳”的小游戲。
游戲的規(guī)則很簡(jiǎn)單淆党,游戲中的小人要從一個(gè)方塊跳到下一個(gè)方塊上吼蚁,玩家通過按壓屏幕時(shí)間的長(zhǎng)短來控制這個(gè)小人跳躍的距離。玩家需要每次都能讓小人落在下一個(gè)方塊上辙谜,如果每次都能跳到正中心還會(huì)有額外加分俺榆。
元旦假期,我也嘗試去挑戰(zhàn)這個(gè)游戲装哆,但是屢試屢敗罐脊,得分很少能超過50分⊥汕伲看著朋友圈里的好友都能跳到兩三百分萍桌,我深深懷疑自己的笨手笨腳。稍作思考后凌简,我準(zhǔn)備利用Arduino挑戰(zhàn)“跳一跳”高分榜上炎。
游戲分析
在游戲中,小人要從當(dāng)前方塊跳躍到下一個(gè)方塊,玩家通過按壓屏幕蓄力藕施,按壓越久寇损,蓄力越多,跳得也就越遠(yuǎn)裳食。
策略分析
經(jīng)過分析矛市,跳一跳的關(guān)鍵在于要精確控制手指按壓屏幕的時(shí)間。人們可以區(qū)分1秒與2秒的時(shí)間差诲祸,但是10毫秒與20毫秒的區(qū)別浊吏,人就很難區(qū)分了。然而救氯,機(jī)器卻可以做到對(duì)時(shí)間的精確控制找田。
我打算利用Arduino控制舵機(jī)按壓屏幕,按壓一定時(shí)間后抬起舵機(jī)着憨,小人就可以跳到一定距離之外午阵。而按壓時(shí)間根據(jù)需要跳躍的距離來推算,跳躍距離可以用尺子測(cè)量享扔,并用旋鈕傳感器將距離輸入Arduino。Arduino將距離轉(zhuǎn)化成對(duì)應(yīng)的按壓時(shí)間植袍,最后用一個(gè)按鈕來控制舵機(jī)執(zhí)行按壓動(dòng)作惧眠。
難點(diǎn)解決1:模擬手指
現(xiàn)在市面上的智能手機(jī)的屏幕絕大多數(shù)都是電容屏,一般來說需要用手指觸摸才能有效于个,而普通的筆氛魁、木棒等并不能觸控屏幕。那么可以使用哪些材料來代替手指呢厅篓?
電容觸摸筆是專門為手機(jī)秀存、平板電腦設(shè)計(jì)的觸摸手寫筆,使用觸摸筆是最好的選擇羽氮,如圖 3所示或链。可以將電容筆固定在舵機(jī)臂上档押,用舵機(jī)帶動(dòng)電容筆按壓手機(jī)屏幕澳盐。
電容筆當(dāng)然是最理想的選擇,但是手頭如果沒有電容筆令宿,還可以用導(dǎo)電銅箔或者導(dǎo)電膠布來代替叼耙。導(dǎo)電銅箔具有良好的導(dǎo)電性,將導(dǎo)電銅箔一端固定在舵機(jī)上粒没,導(dǎo)電銅箔另一端與手指接觸筛婉。在舵機(jī)帶動(dòng)下用銅箔按壓手機(jī)屏幕,通過導(dǎo)電銅箔的連接癞松,相當(dāng)于手指按壓了屏幕爽撒。
搭建結(jié)構(gòu)
利用T1飛機(jī)盒做框架入蛆,搭建游戲盒子。先將手機(jī)放在紙盒中間匆浙,確定各元件安裝位置安寺,如圖 5所示。
將LCD1602顯示屏倒扣在紙盒上首尼,用鉛筆沿著顯示屏畫出輪廓挑庶,如圖 6所示。
將LCD1602顯示屏和旋鈕傳感器安裝在孔位中软能,并用熱熔膠進(jìn)行固定迎捺,如圖 7所示。
在舵機(jī)安裝前查排,先墊高約1厘米的紙板凳枝,將舵機(jī)安裝位置提高到與手機(jī)屏幕齊平的高度。然后用熱熔膠將舵機(jī)固定在紙板上跋核,將舵機(jī)臂安裝到舵機(jī)上岖瑰,由于舵機(jī)的塑料臂比較短,可以使用長(zhǎng)約6厘米的雪糕棍進(jìn)行延長(zhǎng)砂代,如圖 8所示蹋订。
在雪糕棍上安裝一個(gè)豎直向下的竹簽,竹簽?zāi)┒税惭b一個(gè)水平的2厘米左右的雪糕棍刻伊,用于模擬手指露戒,雪糕棍表面要正好能觸碰到手機(jī)屏幕,如圖 9所示捶箱。
在雪糕棍上纏繞導(dǎo)電銅箔智什,為了保證導(dǎo)電銅箔能與手機(jī)屏幕能充分接觸,可以將接觸面做大且壓平丁屎。然后將導(dǎo)電銅箔引出15厘米左右荠锭,用于跟人手指接觸,如圖 10所示悦屏。
用一只手抓住導(dǎo)電銅箔一段节沦,讓模擬手指去接觸手機(jī)屏幕,觀察是否有反應(yīng)础爬。如果有反應(yīng)說明模擬手指能實(shí)現(xiàn)功能甫贯,如果觸摸效果不佳,檢查導(dǎo)電銅箔是否纏繞牢固看蚜,接觸面是否夠大叫搁。
電路連接
將各元件連接到主控板對(duì)應(yīng)管腳,傳感器與管腳對(duì)應(yīng)關(guān)系如表 1所示。
表 1傳感器與管腳關(guān)系表
傳感器 | 按鈕傳感器 | 舵機(jī) | 旋鈕傳感器 | LCD1602顯示屏 |
---|---|---|---|---|
管腳 | D2 | D8 | A0 | IIC |
將主控板安裝在紙盒內(nèi)部渴逻,并連接好各元件疾党,用熱熔膠將按鈕固定在盒子側(cè)面。主板的供電可以使用9V電池惨奕,也可以在盒子側(cè)面打孔雪位,使用USB線連接到外部電源,如圖 11所示梨撞。
難點(diǎn)解決:時(shí)間與距離的關(guān)系
之前我們定性地分析出按壓時(shí)間越久雹洗,跳躍距離越大,但是并不知道兩者之間的具體關(guān)系卧波。
編寫測(cè)試程序时肿,當(dāng)按鈕按下后,舵機(jī)轉(zhuǎn)動(dòng)港粱,帶動(dòng)模擬手指按壓屏幕螃成,并保持一定時(shí)間后彈回,程序如圖 12所示查坪。
以小人身體的尾部作為起點(diǎn)寸宏,沿著兩個(gè)方塊邊緣平行的方向測(cè)量,終點(diǎn)為下一個(gè)方塊的中心點(diǎn)偿曙,如圖 13所示击吱。
根據(jù)測(cè)量出的距離先估計(jì)按壓時(shí)間,然后將時(shí)間賦值給變量time遥昧,上傳程序并跳躍。再測(cè)量出實(shí)際跳躍距離朵纷,經(jīng)過幾輪測(cè)試炭臭,得出表 2數(shù)據(jù)。
表 2 按壓時(shí)間與條約距離關(guān)系表
按壓時(shí)間(time) | 跳躍距離(distance) |
---|---|
500ms | 15mm |
600ms | 20mm |
700ms | 25mm |
800ms | 30mm |
900ms | 37mm |
1000ms | 40mm |
將以上數(shù)據(jù)輸入到excel表格中袍辞,用表格中數(shù)據(jù)繪制散點(diǎn)圖鞋仍,并畫出線性趨勢(shì)線,得到按壓時(shí)間與跳躍距離的關(guān)系式為distance=0.0517time-10.952搅吁,經(jīng)轉(zhuǎn)換time=(distance+10.952)/0.0517威创。[1]
難點(diǎn)解決:距離輸入
經(jīng)過幾輪游戲測(cè)試與測(cè)量,小人跳躍距離的范圍在10mm-50mm之間谎懦。距離輸入可以使用旋鈕傳感器肚豺,旋鈕傳感器原本的輸入范圍是0-1023,而現(xiàn)在需要輸入的距離為10-50mm界拦,因此可以使用映射模塊將數(shù)據(jù)范圍進(jìn)行轉(zhuǎn)化吸申。再利用LCD1602屏幕將跳躍距離和按壓時(shí)間都實(shí)時(shí)顯示出來,完整程序如圖 15所示。
使用測(cè)試
游戲盒子制作完成后截碴,就可以進(jìn)行使用測(cè)試了梳侨。在手機(jī)上啟動(dòng)游戲,并將手機(jī)放在盒子上日丹,用尺子量出當(dāng)前小人的位置到下一個(gè)方塊中心點(diǎn)的距離走哺。在盒子上用旋鈕傳感器調(diào)節(jié)跳躍距離,LCD1602上會(huì)顯示跳躍距離及對(duì)應(yīng)的按壓時(shí)間哲虾,調(diào)節(jié)完成后按下起跳開關(guān)丙躏,舵機(jī)就會(huì)帶著模擬手指轉(zhuǎn)動(dòng),在屏幕上按壓一定時(shí)間后抬起妒牙,小人完成完美一跳彼哼。
小結(jié)
制作完成這個(gè)盒子后,我將使用該盒子玩“跳一跳”游戲的視頻發(fā)到了朋友圈湘今,有人給我點(diǎn)贊敢朱,也有人向我挑戰(zhàn),還有人說這是作弊摩瞎。我覺得拴签,這個(gè)作品再一次告訴我們,對(duì)于一些有規(guī)律的旗们、重復(fù)性強(qiáng)的工作蚓哩,機(jī)器比我們?nèi)祟惛訉I(yè),可以比我們做得更好上渴。2017年岸梨,可以說是“人工智能”元年,在這一年里稠氮,我們發(fā)現(xiàn)機(jī)器在越來越多的領(lǐng)域戰(zhàn)勝了人類曹阔。毋庸置疑,在接下來的時(shí)間里隔披,機(jī)器將更加深入全面進(jìn)入人們的生活赃份。
[1] 該公式是根據(jù)5寸屏幕測(cè)得的數(shù)據(jù),不同尺寸的手機(jī)測(cè)得數(shù)據(jù)不同奢米,公式也會(huì)不同抓韩。