謝作如
MaKeyMaKey是大眾融資平臺(tái)Kickstarter上的一個(gè)項(xiàng)目,由兩位MIT在讀博士設(shè)計(jì)。它能將日常物品變成觸摸板,然后連上電腦和網(wǎng)絡(luò)。MaKeyMaKey由三個(gè)部分組成:MaKeyMaKey主板、鱷魚夾和數(shù)據(jù)線。對(duì)于任何導(dǎo)體(表面濕潤(rùn)的絕緣體也可以)來說,只要用鱷魚嘴導(dǎo)線將物體與電路板上的各個(gè)金屬觸點(diǎn)相連,然后再連接電腦,就可達(dá)到觸摸板的效果,成為一個(gè)計(jì)算機(jī)輸入設(shè)備。
MaKeyMaKey能夠模擬鍵盤和鼠標(biāo)的信號(hào),結(jié)合電腦中現(xiàn)成的游戲和媒體播放器之類的軟件,不用編程,就能夠設(shè)計(jì)簡(jiǎn)單的互動(dòng)媒體作品了,常見的是用來做水果鍵盤,如圖1所示。MaKeyMaKey的意義在于它可以用極其簡(jiǎn)單的方法讓藝術(shù)家創(chuàng)造藝術(shù),讓孩子體驗(yàn)技術(shù)帶來的樂趣,因而被稱為是孩子們21世紀(jì)的發(fā)明工具包。
MaKeyMaKey并不貴,淘寶上能買到,大概500元左右。但作為一名創(chuàng)客,當(dāng)然要試著自己來做一塊。論技術(shù)難度倒真不高,只要稍微懂一點(diǎn)Arduino的基礎(chǔ)知識(shí)就能實(shí)現(xiàn)。
設(shè)計(jì)輸入模塊
MaKeyMaKey的神奇之處在于能夠把任何導(dǎo)體(包括人體、表面濕潤(rùn)的絕緣體)變成輸入設(shè)備。對(duì)照運(yùn)行圖2所示的工作原理,我們可以發(fā)現(xiàn),人體無非是一個(gè)選擇性的開關(guān),讓不同的“鍵”(引腳)和“Gnd”連接起來,形成一個(gè)回路,讓單片機(jī)能識(shí)別,如圖3所示。
作為輸入設(shè)備,我們知道最基礎(chǔ)的電路如圖4所示。這其實(shí)就是一個(gè)典型的分壓電路,Vout的電壓是受R1和R2的電阻值大小影響的。R2的電阻越大,Vout分到的電壓也就越大。但是,由于作為輸入設(shè)備人體的電阻很大,所以如何選擇合適的電阻是重點(diǎn)。
如果熟悉計(jì)算分壓電路,可以試著計(jì)算一下。一般在干燥環(huán)境中,人體電阻大約在2千歐到20兆歐范圍內(nèi),那么作為匹配的電阻,應(yīng)該選擇這一范圍的中間值,即10兆歐。經(jīng)過測(cè)試,一般來說,1~10兆歐的電阻基本上都能比較敏感地測(cè)出是否形成了回路。
控制板的選擇
控制板方面,我們當(dāng)然要選擇開源硬件Arduino。MaKeyMaKey本身就和Arduino有著密不可分的關(guān)系。不信你可以查看MaKeyMaKey板子的背后,是否寫著Arduino的字樣?
Arduino也有多種型號(hào),我們用Leonardo還是UNO?因?yàn)長(zhǎng)eonardo直接使用了ATmega32u4的USB通信功能,取消了USB轉(zhuǎn)UART芯片,這使得Leonardo不僅可以作為一個(gè)虛擬的(CDC)串行/COM端口,還可以作為鼠標(biāo)或者鍵盤連接到計(jì)算機(jī)。那么,第一選擇肯定是Leonardo了(如下頁圖5)。其實(shí),國(guó)內(nèi)有很多Arduino的兼容產(chǎn)品,有些用的芯片就是ATmega32u4。只要是用這一芯片的,都可以改造為鍵盤和鼠標(biāo)。
Arduino編程
Arduino IDE中直接提供了模擬鍵盤、鼠標(biāo)功能的范例,在“示例”-“09 USB”中,如圖6所示。范例中有英文的注釋,很容易看懂。要實(shí)現(xiàn)鍵盤和鼠標(biāo)功能,只需關(guān)注以下兩點(diǎn):①在setup函數(shù)中,加上“Mouse.begin();Keyboard.begin();”的聲明。②輸入按鍵信息,直接用“Keyboard.press('l');”即可。“Keyboard.releaseAll();”為釋放按鍵。特殊字符,可以用KEY_LEFT_ALT之類的常量來代替。
依樣畫葫蘆,我寫了如圖7的代碼,其中TouchSensitivity是用來調(diào)節(jié)輸入模塊的敏感度的。代碼中我定義了A0到A5口,分別對(duì)應(yīng)“右、左、下、上”的方向鍵,以及空格和鼠標(biāo)左鍵。
對(duì)MaKeyMaKey的改進(jìn)
測(cè)試一下這塊自制的MaKeyMaKey,除了我僅僅寫了最常用的6個(gè)鍵外,其他幾乎一模一樣。既然是自制的MaKeyMaKey,我們總要做點(diǎn)改進(jìn)。
1.解放另一只手
總是一只手接上Gnd線,另一只手觸碰導(dǎo)體,才可以模擬出按鍵或者鼠標(biāo)的動(dòng)作,還是不方便。如何做才能更方便?其實(shí)很簡(jiǎn)單,如果將觸摸傳感器作為輸入設(shè)備,就可以解放另一只手了。當(dāng)然,我們也可以用紅外測(cè)距傳感器、紅外遙控之類,連手都不用碰,也能和電腦交互,不是更有趣了嗎?
2.遠(yuǎn)程控制
用藍(lán)牙把兩塊Arduino連接起來,其中一塊接電腦做接收端,模擬鼠標(biāo)鍵盤,另一塊加上特定的傳感器做控制。哦,這不是無線鼠標(biāo)了嗎?是啊,如果加上三軸加速度傳感器,就是空中飛鼠了。我看過有人把板子縫在帽子上,實(shí)現(xiàn)了用頭部控制鼠標(biāo)來玩游戲。
其實(shí),這款自制的Arduino能做的有很多,只要你大膽想象。那么,是不是只能用Leonardo之類帶ATmega32u4芯片的板子,才能模擬MaKeyMaKey?答案當(dāng)然是否定的。在創(chuàng)客們的眼里,一件事情往往有很多種解決方案。例如,我們可以編一個(gè)客戶端,用串口和Arduino連接,然后把串口的信息轉(zhuǎn)化為模擬按鍵。國(guó)內(nèi)有一款很有名的產(chǎn)品叫酷樂宅,就是用這種方案來模仿MaKeyMaKey的。
如果對(duì)相關(guān)內(nèi)容感興趣,請(qǐng)關(guān)注主持人博客。