裘炯濤 謝作如
2017年歲末,最熱門的游戲莫過于微信的“跳一跳”了(如圖1)。游戲的規(guī)則很簡單,游戲中的小人要從一個方塊跳到下一個方塊上,玩家通過按壓屏幕時間的長短來控制這個小人跳躍的距離,確保每次都能讓小人落到下一個方塊上,如能跳到方塊正中心還會有額外加分。
元旦假期,筆者也嘗試挑戰(zhàn)了這個游戲,但是屢試屢敗,得分很少能超過五十分??粗笥讶锏暮糜讯寄芴絻扇俜?,筆者深覺自己有點笨手笨腳。作為學校的創(chuàng)客教育導師,稍作思考后,筆者就準備利用Arduino來挑戰(zhàn)“跳一跳”高分榜。
在“跳一跳”游戲中,小人要從當前方塊跳躍到下一個方塊的關鍵是控制跳躍距離。玩家通過按壓屏幕蓄力,按壓越久,蓄力越多,跳得也就越遠。經(jīng)過測試后,筆者發(fā)現(xiàn)按壓時間長短和跳躍距離呈線性關系。要獲得游戲高分,得設計一個可以替代人的手指,并能夠精確控制按壓屏幕時間的小裝置,也就是常說的“物理外掛”。
人可以區(qū)分1秒與2秒的時間差,而區(qū)分10毫秒與20毫秒?yún)s很難,但是用Arduino之類的單片機來實現(xiàn)精確控制就很容易??戳丝磩?chuàng)客空間的設備,筆者設置了一個大致的方案:
在舵機上綁定一支電容筆,用Arduino控制舵機按壓屏幕,按壓一定時間后抬起舵機,小人就可以跳到一定距離之外。而按壓時間根據(jù)需要跳躍的距離來推算,跳躍距離可以用尺子測量,并用旋鈕傳感器將距離輸入Arduino。Arduino將距離轉(zhuǎn)化成對應的按壓時間,最后用一個按鈕來控制舵機執(zhí)行這一按壓動作,所需元件如圖2所示。
步驟一:模擬手指
現(xiàn)在市面上的智能手機的屏幕絕大多數(shù)都是電容屏,電容觸摸筆是專門為手機、平板電腦設計的觸摸手寫筆,使用觸摸筆是最好的選擇(如圖3)。可以將電容筆固定在舵機臂上,用舵機帶動電容筆按壓手機屏幕。
電容筆是最理想的選擇,但是手頭如果沒有電容筆,還可以用導電銅箔或者導電膠布來代替。導電銅箔具有良好的導電性(如下頁圖4),將導電銅箔一端固定在舵機上,導電銅箔另一端與手指接觸。在舵機帶動下用銅箔按壓手機屏幕,通過導電銅箔的連接,相當于手指按壓了屏幕。
步驟二:搭建結(jié)構
筆者找了個紙盒做這一裝置的平臺,盒子上面放了各種元件,Arduino等可以放在盒子中間,盡量讓這個“外掛”看起來比較像個作品,命名為“跳一跳游戲盒子”。
先將手機放在紙盒中間,確定各元件安裝位置(如圖5)。
將LCD1602顯示屏倒扣在紙盒上,用鉛筆沿著顯示屏畫出輪廓(如圖6)。
將LCD1602顯示屏和旋鈕傳感器安裝在孔位中,并用熱熔膠進行固定(如圖7)。
在舵機安裝前,先墊高約1厘米的紙板,將舵機安裝位置提高到與手機屏幕齊平的高度。然后用熱熔膠將舵機固定在紙板上,將舵機臂安裝到舵機上,由于舵機的塑料臂比較短,可以使用長約6厘米的雪糕棍進行延長(如圖8)。
在雪糕棍上安裝一個豎直向下的竹簽,竹簽末端安裝一個水平2厘米左右的雪糕棍,用于模擬手指,雪糕棍表面要正好能觸碰到手機屏幕(如圖9)。
在雪糕棍上纏繞導電銅箔,為了保證導電銅箔能與手機屏幕充分接觸,可以將接觸面做大且壓平,然后將導電銅箔引出15厘米左右,用于跟人手指接觸(如下頁圖10)。
用一只手抓住導電銅箔一端,讓模擬手指去接觸手機屏幕,觀察是否有反應。如果有反應說明模擬手指能實現(xiàn)功能,如果觸摸效果不佳,檢查導電銅箔是否纏繞牢固,接觸面是否夠大。
步驟三:電路連接
將各元件連接到主控板對應管腳,傳感器與管腳對應關系如下頁表1所示。
將主控板安裝在紙盒內(nèi)部,并連接好各元件,用熱熔膠將按鈕固定在盒子側(cè)面。主板的供電可以使用9V電池,也可以在盒子側(cè)面打孔,使用USB線連接到外部電源(如下頁圖11)。
步驟四:計算時間與距離的關系
我們雖然已經(jīng)分析出按壓時間越久,跳躍距離越大,但是并不知道兩者之間的具體關系,這還需要通過編程來測試。
編寫測試程序,當按鈕按下后,舵機轉(zhuǎn)動,帶動模擬手指按壓屏幕,并保持一定時間后彈回,程序如下頁圖12所示。
以小人身體的尾部作為起點,沿著兩個方塊邊緣平行的方向測量,終點為下一個方塊的中心點(如下頁圖13)。
根據(jù)測量出的距離先估計按壓時間,然后將時間賦值給變量time,上傳程序并跳躍,再測量出實際跳躍距離,經(jīng)過幾輪測試,得出表2數(shù)據(jù)。
將以上數(shù)據(jù)輸入到Excel表格中,用表格中數(shù)據(jù)繪制散點圖,并畫出線性趨勢線,得到按壓時間與跳躍距離的關系式為distance=0.0517time-10.952,經(jīng)轉(zhuǎn)換time=(distance+10.952)/0.0517。注意:這個公式是根據(jù)筆者的5寸屏幕手機測得的數(shù)據(jù),不同尺寸的手機測得數(shù)據(jù)不同,公式也會不同(如圖14)。
步驟五:實現(xiàn)距離數(shù)據(jù)的輸入
經(jīng)過幾輪游戲測試與測量,小人跳躍距離的范圍在10mm~50mm之間。距離輸入可以使用旋鈕傳感器,旋鈕傳感器原本的輸入范圍是0~1023,而現(xiàn)在需要輸入的距離為10mm~50mm,因此可以使用映射模塊將數(shù)據(jù)范圍進行轉(zhuǎn)化,再利用LCD1602屏幕將跳躍距離和按壓時間都實時顯示出來,完整程序如下頁圖15所示。
“跳一跳游戲盒子”制作完成后,就可以進行使用測試了。在手機上啟動游戲,并將手機放在盒子上,用尺子量出當前小人的位置到下一個方塊中心點的距離。在盒子上用旋鈕傳感器調(diào)節(jié)跳躍距離,LCD1602上會顯示跳躍距離及對應的按壓時間,調(diào)節(jié)完成后按下起跳開關,舵機就會帶著模擬手指轉(zhuǎn)動,在屏幕上按壓一定時間后抬起,小人完成了完美的一跳。利用這個裝置,筆者成功地拿到了1000多分,高居朋友圈游戲排行榜的榜首。
制作完成創(chuàng)客作品后,筆者把使用該盒子玩“跳一跳”游戲的視頻發(fā)到了朋友圈。有人點贊,有人挑戰(zhàn),還有人說這是作弊,其實這個作品最重要的價值不是幫筆者拿到游戲高分,而是告訴更多的人:對于一些有規(guī)律、重復性強的工作,機器比人類更專業(yè),可以比人類做得更好。不是嗎?緊跟筆者發(fā)布這個作品的前后,好多工程師都發(fā)布類似的“物理外掛”,大疆工程師甚至用攝像頭來做視角識別,讓更多的人知道了人工智能并不遙遠,而是“近在身邊”。
2017年被媒體譽為“人工智能”元年。在這一年里,我們不斷看到機器在越來越多的領域戰(zhàn)勝了人類。毋庸置疑,在接下來的時間里,機器將更深入、更全面進地入人們的生活。未來已來,中小學教育亟待改革,讓我們從創(chuàng)客教育開始做起吧!