當前位置:米奇創意網>生活小發明>電子DIY>

真·國際象棋人機對戰手工電子DIY教程

電子DIY 閲讀(2.76W)

真·國際象棋人機對戰

DIYer:mJusticz 製作時間:一星期 製作難度:★★★★☆ GEEK指數:★★★★☆

 

從Instructable網站(全球最大的DIY分享社區)上對國際象棋龐大的搜索數量可以説明,大家對國際象棋是多麼的鐘愛了。但,人生最大的困難就是找到一個和自己水平相當的棋友,知音難覓,棋友難尋啊~對付寂寞,獨孤求敗找到了神鵰大俠,我,只好找到Arduino。煮酒一壺,皓月當空,咱,上路吧!

我採用的也是正常的座標板,但還是稍有區別,這些區別還是要引起注意的。第一,X軸上需要增加一個額外的Z方向伺服系統,用來抬升和降低磁鐵。磁鐵吸附象棋盤上的棋子,使之可以自由移動。第二,象棋盤上嵌入64個磁控開關(其實就是幹簧管啦),用於arduino定位。

可以隨意改裝,良好的適應性是我中意這個項目的主要原因。設想一下,目前我需要的乃是一個國際象棋盤,忽然之間,改變某幾個部件,搖身一變竟然成了數控磨牀!變形金剛附體啊,有木有!在文章的結尾,我將花些筆墨來講講這個神奇。

1   工具和材料1.1   工具 

● 剝線鉗,尖嘴鉗,熱風槍等等

即正常的電工工具一套

● 快乾膠

愛死快乾膠了,天賜之物啊。它將在項目各個步驟中都發揮巨大作用,從安裝電機到安裝齒輪。。。大愛!

● 一把木工鋸

你手中應該有這玩意吧,如果沒有,隨便找個五金店吧,買鋸條,送木頭!

1.2   材料

也許,你的收藏中已然有下列所列的零件,當然,我還是假設你沒有。也不用擔心,總共加起來花費大約在350美元(摺合人民幣。。。額。。。2500元,還有,在哪買很重要,淘寶和北京中發應該是兩個價),但是記住,大部分,應該是絕大部分都能從廢棄物中改裝而來,在準備之前,動動腦,少花點冤枉錢,畢竟,咱囊中羞澀~

 

 

 

○ 一個arduino Uno 或Diecimila擴展

該裝置用來驅動步進電機和伺服系統,在網上隨便搜一下就能蹦出很多賣主來。

○ 神器——Arduino mega版

這是最貴的東東,用來感應象棋盤方格的輸入,以便電腦知道你對棋子的移動。我們需要處理移動速度和多個輸入,因此我想到了mega。

○ 一個Mux擴展板

Mux擴展板(多路轉換器的袖珍版)可以給arduino mega提供更多的輸入端,象棋盤總共需要64個輸入,一個方格設為一個輸入。

○ 電動機驅動板

電動機驅動板控制步進電機和伺服系統,需要將他們焊接到一起。

○ 一個夠大的棋盤,一套棋子

這個需要單獨解釋一番。之所以選擇較大的象棋盤,是因為其上棋子較多,而棋子之間互相穿梭往來,你方唱罷我登場,夠大的空間才不會產生干擾。因此需要準確度量棋子底部的直徑,過一會就需要那個數據。我不確定我的棋盤是怎麼來的了。。。但是可以在跳蚤市場找到便宜貨,我棋盤上棋子可移動的區域是24英寸見方。

○ 64 個 常開磁控開關(幹簧管)

幹簧管是電磁控制的開關。它將幫助我們找到棋子的位置。選擇常開的型號,就是説默認情況下電路斷開。

○ 16個 10K 0.25瓦電阻

為了上拉數字引腳需要設置上拉電阻。幸運的是,mux擴展板已經集成了下拉功能,因此並不需要另外配置下拉電阻。

○ 大約90英尺長的30AWG導線

用來連接所有的傳感器。

○ 安裝在棋子下面的稀土磁鐵

前面提到棋子底部的直徑數據將在這裏發揮作用。稀土磁鐵呈圓片狀,處於強度考慮,厚度最好是1/8英寸厚。

○ 一個大號稀土磁鐵

一個尺寸較大的稀土磁鐵,安裝在座標板下面,用來移動棋子。

○ 2副24"長的滑道滑塊

滑道滑塊的尺寸還需要和象棋盤的尺寸相匹配,設計要求是:象棋盤下面的步進電機可以來去自如。

○ 2個步進電機

步進電機步進距離十分精確,你可以在任何90年代後期電器中都找到他們的身影。最好的還是在那種老式的點陣打印機(也叫針式打印機,打印發票的那種)中,一定有。在跳蚤市場上也可以不費吹灰之力找到。

○ 2對齒輪和齒條

齒輪齒條組可以使電機在滑道上移動,具體過程參看第四步。

○ 一個標準的Hobby 伺服

該伺服使大磁鐵在象棋板下上下移動。在hobby店或者亞馬遜中有購買。

○ 一個 2'×2'萬能電路板

萬能電路板要非常薄,所有的幹簧管佈置在電路板上。它的價格浮動比較大,我花了約5美元在Home Depot上購置。

○ 一個2' x 2' x 1/2"中纖板(中密度纖維板的簡稱)

與萬能電路板類似。我花了約5美元在Home Depot上買到。

○ 不同長度的木頭,木頭截面尺寸為1"x2"。

這些木頭構成X軸上軸承支架的支撐塊和橫樑。去一些五金店,他們廢棄物中有足夠的木條供你選擇,重要的是,應該通通免費。

 

2   設計和代碼介紹正面 

反面 

從上圖可以看出,藉助齒輪的作用,每個步進電機可以在相應的滑道上自由前進後退。在Y方向上,每個滑塊與木製機構連接在一起,因此,X方向機構就可以放置在Y方向機構的上方,同時,X方向也有Z軸方向的伺服電機,可以自由抬高或降低大磁鐵。在工作中它可以在移動棋子之前給自身定位。 

這個項目另一個有趣的地方就是,如何實現arduino和電機之間的通訊。我們需要給棋盤上每個小格定義座標,以便控制器能夠找到合適的距離和角度。但是,傳統的將方格賦值為A1,A2,B3的方式似乎工作起來並不順暢。標準的二維座標(x,y)就方便多了。這些座標值當然採用自然數的形式。採取上圖這種對方格賦值的方式也有一定的缺陷,它和8x8的棋盤並不匹配,這是由於我們一般採取十進制的關係。 

為了解決那個問題,我們將十進制賦值的方法改為八進制的賦值。例如八進制表中23,2表示第三列,3表示第四行,若換在十進制賦值表中,第三列第四行的數值是19。看吧,用八進制表示就會省去一些麻煩。轉換後的八進制賦值表如圖所示。 

3   安裝Y軸機構(軸承)安裝滑道的目的是為了使滑塊沿着滑道做定向移動。安裝説明無非就是根據各個不同牌子的滑道進行安裝,其實,也就是擰兩顆螺絲就結束了。 

 

之所以將這個步驟也列為單獨的一個步驟,自有我的道理。這是因為校準滑道和滑塊是灰常灰常重要滴!如果不進行校準,加入他們都各自朝外邊稍微偏向了一點,兩邊滑塊不再平行,到時候可能就在滑道中的某一個地點停下來,棋子就無法送達到指定地點了,也就是説,前功盡棄!為了減少後期麻煩,同時也是經驗總結,我單列一步,一定要校準! 

4   安裝步進電機(Y方向)步進電機擁有理想的轉矩,可惜他是圓形的,這也就意味着它不可以直接安裝在滑道上,除非自己製備一個方形的支撐塊。另外,還需要鑽孔,孔徑與步進電機的直徑相差不大。使用鑽孔鋸(就是鑽頭用圓形鋸片替換了那種)比便攜鋸要方便許多,我往自己學校借用了一下。 

鑽孔結束後,將圓圈劈成兩半,半圓孔邊緣毛刺較多,使用200目砂紙將其打磨平整。 

 

接下來,開始鑽些螺釘孔,當然要與木條配合好。我使用的是我能找到的最小的螺絲。我使用了螺絲固定之後,已經相當牢固了,如果你安裝之後發現有點“弱不禁風”,最好用點快乾膠將其加固。 

5   安裝齒輪齒條組(Y軸) 

齒輪齒條組的原理就是將旋轉運動轉換為直線運動。步進電機軌跡是圓,使用齒輪齒條組後,其軌跡就轉化為直線。物理老師應該在課堂上講解這個原理了吧。 

再次,使用快乾膠將齒條安裝到中纖板上,除了保證在中纖板上需要塗抹大量的快乾膠,同時也要在滑塊側面塗抹一定量的快乾膠,這樣可以保持在兩個方向都有強度保證。儘量小心點塗抹,保證膠水都塗抹在正確的位置上,避免將膠水塗抹在別的地方——很可能將電機也粘緊了! 

齒輪齒條組最好延伸到中纖板(滑道)外頭一點。這樣齒輪就可以走過整個中纖板的距離,避免死角的出現。如果齒條的長度僅僅只是中纖板的長度,由於電機與齒輪之間有一定的間隙,那麼在中纖板的某一端肯定出現死角,這就會導致電機被卡死。 

這個時候就可以安裝齒輪到電機上了。我使用螺釘螺帽將齒輪固定在電機上。如果你用的是JB weld之類的膠水將齒輪粘接在電機上,那麼要注意接點要事先打磨乾淨,保持足夠乾淨,否則齒輪可能從電機上掉下來! 

6   接線,裝機(Y軸) 

從步進電機中出來的引線非常之短,因為Arduino 沒有安裝到中纖板上,因此導線的長度至少需要中纖板邊長那麼長,我使用了2' 5"長。然後開始將線接起來,這個時候,熱縮管特別好用——這個地方花費了不少力氣,因為一不小心就容易折斷。 

 

如果你的步進電機有5根輸入線,那麼灰常好辦,如果有6根輸入線,就得將兩根中心引線短路(連接起來),這樣就能變成5根輸入線,Jason Babcock編寫了一個非常不錯的調整電機的説明手冊,可以參考。在我這,所有的線均是黑色的。 

將導線延長後,中心線就接入了電機的一個接口。此時導線的狀態應該一端和電機相連,另一端和電機擴展板的接口相連。這個時候,我們可給電機擴展板接上24V,1A電源,此時要注意電機和電源的極性匹配,否則可能燒壞心愛的電機。 

將電機支撐塊磨削至4英尺左右,在滑塊端部劃定一部分區域,在該區域塗抹充足的快乾膠,將支撐塊放置在該區域上,使支撐塊和滑塊實現膠接。 

值得注意的是,如果你飼養寵物,請拒絕你的愛物闖進你的工作室,貌似小貓咪和快乾膠是上輩子的情侶,小貓咪總是要踹翻正在固化的快乾膠。 

7   安裝橫軸(X軸)在Y軸上方設置一根橫樑,用以承擔X軸機構。在已安裝結構Y軸對面的滑道上也需要安裝一個同樣高度的支撐塊。這個支撐塊與電機支撐塊安裝類似。 

接下來,找到截面約為1"x2"木塊,截取約2'長度。將該木塊作為X軸支撐橫樑,將橫樑用螺釘固定在上述提及的支撐塊上。檢查螺釘是否固定牢固,否則Y軸滑道和X軸橫樑的運動將不同步。當然也可以考慮用點木工膠塗抹在橫樑和支撐塊上,可以更為放心一點。X軸橫樑需要足夠的尺寸承受其上驅動機構,同時,也應當注意不要使重量超重,因為Y軸電機功率也只有那麼一點,防止功率不夠使電機停在那不工作,導致機毀棋亡的敗局。因此在計算合理的尺寸後,儘量減少體積,減少重量。 

用手滑動各個滑塊,檢查是否都能正常滑動,橫樑與Y軸滑道盡量報紙垂直。 

8   安裝X軸滑道和齒輪組(X軸)與Y軸安裝滑道的過程一樣,包括安裝滑道螺釘,將滑道固定在橫樑上,在一端留有一定餘量給齒輪組等幾個要點。 

與Y軸不同的是,安裝齒輪齒條組時有幾點區別。比如選擇在橫樑的哪一端來安裝齒輪,這是由電機安裝在支撐塊上的方式來決定的。如果你決定在X方向上的某個位置安裝步進電機,那麼要按照同樣的方式固定在Y軸上。將齒輪齒條組稍許超出滑道一點,以保證有足夠的空間運動到整個象棋盤區域。 

再次強調,保證膠水沒有進入滑道運動系統(包括滑塊,齒輪,電機等),如果不小心不幸發生了上述“壯舉”,就準備蛋疼吧,祈禱還有點希望補救。不過幸運的是,滑道配合成對,壞掉一個,還可以留下一個,只需要將新的重新裝入到螺栓孔就可以解決。但,蛋疼之後不要再蛋疼吧。儘量一次過關! 

9   安裝X軸上磁鐵到伺服電機上整個象棋盤需要一個裝置,可以準確走到指定方格,同時還能吸住棋子。要實現整個過程,我製作了一個偽Z軸(事實上,Z軸不需要精確運動,只相當於指針一類的東西)。將Z軸安裝到X軸上面。將大磁鐵用快乾膠粘接到一片木塊上(Jenga木塊感覺較好),當快乾膠固化後,將木塊粘接到X軸伺服電機上。 

安裝過後,出於對伺服電機轉矩的考慮,可能在另一端還需要增加一個平衡錘,使伺服電機舉起磁鐵不那麼困難。 

這個時候,同樣需要延長伺服電機的輸入導線。與步進電機做法一樣,每次增加一根導線,然後用熱縮管或者電工膠布將其裹嚴實。 

快乾膠在有一定壓力下固化,其粘接效果是最好的。因此最好在粘接界面上施加一定的壓力。另外還需記住,5分鐘快乾膠在理想條件下固化是5分鐘,表面如果不處理,或者不加壓力,可能需要花上上小時的時間。 

10   接線,裝電機(X軸)在步驟8我們已經將X軸步進電機及其輸入導線進行了安裝和改裝,同時,我們也需要將我們的伺服電機安裝到X軸上。安裝伺服系統時需要小心,既要保證和步進電機保持足夠的接近,同時也要避免伺服系統上下運動與齒輪齒條組產生干涉。同時還要保證象棋板下面有最大的覆蓋空間。使用一根導線或者棉球蘸上一些快乾膠,小心的塗抹在安裝伺服系統的位置,如果你粗心大意,眼神一飄,將快乾膠滲入到了X軸步進電機當中,步進電機喝了毒藥似的毒發身亡!同時清理步進電機裏快乾膠(即使它沒固話)也是相當痛苦的過程。因此,為了省去身心疲憊,還是小心為妙。加入快乾膠後用手捏緊幾秒鐘,然後用鉗子夾緊,使其在壓力下固化。 

伺服系統安裝完畢,將步進電機支撐塊安裝到滑塊上,當然和以前一樣,在傳動裝置上使用快乾膠也是需要萬分小心的。還要提出以下,在支撐塊和金屬接觸的地方也要增加一些快乾膠有助於整個結構的穩定。快乾膠幹了之後,將電機和Arduino連接,參看步驟6。但是這次,要與Arduino另外一個電機終端連接起來。現在,XY軸機構都已經順利安裝完畢(外帶一個偽Z軸)。小結以下就是:快乾膠是好東西,同時也挺討厭,讓人又愛又恨吶! 

11   連接傳感器 

每個棋子在其底部都安裝有一個小磁鐵,因此電腦找到棋子的位置就非常簡單。每個方格下面都安裝一個幹簧管,開關都和Arduino mega相連,因此一旦棋子的移動被偵查到,arduino就可以準確找到座標。 

 

上拉電阻是為了防止傳感器將錯誤的信號輸入到系統當中。64個開關中有48個並不需要安裝電阻,因為多路器中已經內置了電阻。不幸的是,我們仍然需要焊接64個傳感器。為了加快焊接速度,在焊接到開關之前,先錫焊各個導線,一般來説,就是在焊接導線之前上錫再進行焊接。焊接完一個開關就需要對開關進行標號,否則,嘿嘿,等着到時候你都分不清哪根線在哪個茬!一怒之下,摔盤而起! 

然後將開關和arduino用導線連接起來,多路器在其輸入端有一個內置的“接地”,這給安裝導線帶來了不少方便。舒心啊! 

 

將電阻連接到內置針腳時,首先將電阻一端與5V電源相連,另一端連接到目前使用的針腳。然後,跳過電阻,開關導線的一端接到接地,另一端接到針腳。 

找個太師椅,因為這真是個費神的活! 

12   安裝圓片磁鐵 

每個棋子底部都嵌入了一個圓形磁鐵,用來觸發磁控開關。這個步驟唯一需要注意的一點就是象棋板的上面是一個極性(如北極),而在象棋的另一面就一定是另外一個極性(如南極),如果只想讓電腦扮演一個角色,那麼就確定綁在伺服電機上磁鐵的極性與棋子的極性相反,這樣就棋子就可以穩住的吸附在象棋盤上,並且可以運動。這個步驟比較簡單,僅僅花費幾分鐘就可以完成。 

13   代碼,最終組裝+思考

這個項目的程序非常簡單,從棋盤上讀取輸入信號,輸入到終端處理當中,然後將象棋計算算法輸入到電腦系統(我採用的是mac OS X系統,具體參看應用),電腦系統經過計算後,輸出到arduino窗口(需要幾行漂亮的蘋果腳本代碼),然後arduino開始驅動電機進行動作。該算法完全免費開源,而且具有良好的可移植性,在不同的平台上都可以應用。 代碼地址

 

 

這個項目最終的組裝並不複雜,找點木塊托住傳感器網格(萬能板),平放之後,然後將象棋盤放置其上,放好棋子,項目就完成了。點擊程序,走動棋子,同時要將某些“吃掉”的棋子適時拿走。如果對象棋下累了,不再激情四射,將這個項目改成數控系統也是很簡單的事情。用裁紙刀替換偽Z軸上的磁鐵,將整個機構倒置,它就是個數控紙張切割機嘛。若將裁紙刀替換成鉛筆,就成了一個自動繪圖儀。想象無處不在,一切皆有可能,去陳出新,樂趣無窮啊! 

 

14   結束語

我希望我所做的事情能夠給大家帶來歡樂,同時這個項目也可以激發我的以及各位DIYer豐富的想象。

希望大夥充滿樂趣的讀完它,正如我充滿樂趣的製作它一樣,如有寶貴意見,請留言,你們的關注和支持是我DIY的不竭動力!