趣味创意馆

位置:首页 > 创意diy > 电子DIY

真·国际象棋人机对战手工电子DIY教程

电子DIY2.74W

真·国际象棋人机对战

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的不竭动力!