【点击上方「蓝字」关注DF,一起成为技术颜控!】

大家好,我是玩Arduino一个半月的电子爱好者,喜欢划水、摸鱼、炸电容、写BUG。
前几天出门捡到一个快递,迫不及待的拿回家拆开,wow ~ awesome!
等等,这是啥东东?好像是上次活动与然后PY交易得到的内部工程板。

研究了一段时间后……总算看出来了,这是一个IIC的IO扩展板。
在我正准备扔在角落吃灰的时候,我忽然想到了很久以前看过的一个动画片——围棋少年(似乎暴露年龄了)
那个时候感觉好炫酷。
落子的时候气势+1+1+1,疯狂模仿,以至于弄坏了许多副棋……
额,似乎又跑题了……
有了想法就动手去实施,要做什么?往下看就知道了。
正文
当当当,自带特效的国际象棋。这是当所有棋子摆放完过后的效果:
行走棋子的时候显示蓝色光路径:
吃掉对方棋子的时候显示红色路径:
上面的所有显示都是可以通过改程序任意改变的,只有你想不到没有你玩不到。
这个比拇指大一丢丢的beetle控制器,使用了IO扩展板,扩展出了这么多的引脚。
为什么是国际象棋?因为我只拿到了四个IO扩展板(小声BB,好气呀,只白嫖了四个),看介绍可以同时使用8个IO扩展板,也就是扩展128个IO口。等我再白嫖几个后我就做一个中国象棋(咕咕咕~)
材料准备:
•Beetle[1](1个)•IO扩展板[2](4个)•WS2812灯带[3](64颗)•霍尔传感器3144(64个)•1K电阻(64个)•国际象棋棋子(1套)•铷磁铁(如果霍尔传感器能感应到棋子则不需要,但是市面上棋子磁力似乎都很小,磁铁大小根据棋子决定)(32颗)•漆包线•5V电源[4](1个)•纸板一大块(垃圾佬专属,如果条件允许可以使用亚克力板)
这是需要的材料,只展示了一部分。
制作开始
一、硬件介绍
在开始制作前我们先了解一下元器件:
1. IO扩展板
我们所用的是IIC接口的16位数字IO口扩展板,最多可以并联8个这样的扩展板,也就是可以扩展出128个IO口!
虽然是扩展出的IO口,但是这些IO口功能可不弱,每个IO口都可独立被设置为输入、输出、上拉输入或中断等IO模式。
而且这个扩展板还有2个中断信号引脚INTA和INTB,当这两个引脚与主控板的中断IO口连接后可以实现真正的中断!在这个作品中我们只用到了扩展板的输入功能。
2. 霍尔传感器

太小了,拍的不清楚,下面是我简单的画的霍尔传感器3144:

网上对霍尔传感器噼里啪啦的介绍了一大堆,简单来说,霍尔传感器就是检测磁场强度的一个传感器。
我们这里使用的是单极性开关型霍尔传感器。
当有磁铁时输出低电平,没有就输出高电平。我用铷磁铁测试感应距离大约8mm,不同磁性的磁铁感应距离也不一样。
下面是测试原理图和结果图:

▲ 测试一下
磁铁磁性越大,感应距离大,磁铁磁性越小,感应距离小。而且磁铁磁性越大,棋子之间的间隔也就越大。
建议先测试确定数据之后再动手,并且建议这样测试每个传感器的好坏。
3. WS2818灯带

WS2812 RGB灯带是由全彩LED组成。只需一个IO口就可以控制所有LED灯,使用起来非常的方便。而且灯带柔性较大,可随意对接,弯曲,裁剪,非常符合我们的要求。
需要注意:灯带之间千万不要接反!
二、接线
1. 接线图

LED灯带连接Beetle的D9引脚,扩展板的VCC、GND、SDA、SCL分别与beetle上的相应引脚焊接上,扩展板的传感器全部IO口都按照接线图接上霍尔传感器。
当LED灯最高亮度点亮白色时,单灯电流可达60mA,LED灯比较多,建议外接电源,虽然暂时不接电源也能正常运行,但是为了以后的可拓展性,建议还是加上。
2.焊接
先拿出我的小纸板,在上面画出棋盘所有格子:

我们在上面焊接一个霍尔传感器。(焊接都是采用的漆包线)

然后我们接着焊接几个:
然后去睡一觉后就自己焊接好了。

我们接下来焊接灯带,8个一条,我们需要八条,间距根据你格子大小确定。建议测试焊接好的灯带是否能用。
我们先在焊接完的霍尔传感器上面铺上一层白纸(防止短路),然后将灯带按下面的示意图焊接好,并贴在每个霍尔传感器的上面:
睡一觉过后又自动焊接好了。

我们在上面再铺一层白纸,画出棋盘格子:
再稍加装饰,
记得组装的时候留出接口!

3. 改造棋子
我们将棋子里面的磁铁替换掉:
三、程序编写
1.思路
主程序就是整个思路,下面会一步一步讲解。

第一步:初始化LED灯和IO扩展板。(这步比较简单就不细说了)
第二步:点亮棋子摆放位置的灯,等待棋子摆放完成 因为棋子摆放在1.2.7.8行,所以只要这四行电平全为低,意味着摆放完成。
第三步:棋子摆放完成后展现开局灯光。这一步主要是点灯,想玩出什么花样都行。
第四步:扫描IO扩展板IO口 先将原来的IO口电平信息保存在num0中,然后读取新的信息保存到num中。
第五步:判断是否拿放棋子,计算位置,判断走子还是吃子。
通过新旧数据的对比很容易判断出哪行哪列的电平出现变化,就能得到坐标。
通过判断是0变1,还是1变0,就能知道是拿起还是放下。

第六步:点亮相应的灯光 最后就是通过两个坐标,点亮你想要的灯就行了。
2.编写程序
说到这个程序刚开始没有什么思路,然后我去请教大佬。

大佬的思维我这种小萌新实在搞不懂,打扰了,告辞。随着我一阵噼里啪啦乱敲过后……

幸好我不是走专业程序员的路,不然铁定被祭天。还是求助大佬吧……最后在大佬的帮助下完成了代码[5](文章末尾附上)。
3.烧录程序GO!GO!GO!
上电-烧录……
欢迎来到贪玩象棋!
等待双方摆放棋子:
由于身边的人都不会下,所以我就演示一下棋盘效果(由于我代码太渣,所以只有按照国际象棋规则走才会显示相应的灯光),想要什么光效完全可以自己编写,发挥自己的脑洞。
国际象棋的运动轨迹有4种:横、直、斜还有马的走法。我就这里就按照走法简单演示一下。
走子显示蓝色的路径,吃子显示红色的路径。(附件上的代码解决视屏中第一步行走显示红色光的BUG)
▲ 视频演示
这是1.0版本,如果我没有咕咕咕,以后会做一个2.0版本(硬件方面改动很小,加一个喇叭和DFPlayer Mini),当拿起一个棋子之后会发出相应的声音,如:拿起马,会发出马叫,吃子会发出兵戎相见的声音……
这个还可以做成类似于开心消消乐的游戏,亮多种颜色的灯,用磁铁调换两个灯,来消除。8个扩展板最多可以扩展出128个IO口,玩法肯定不止这些,等待大佬们的创意。
References
[1] Beetle: https://www.dfrobot.com.cn/goods-839.html[2] IO扩展板: https://www.dfrobot.com.cn/goods-2657.html[3] WS2812灯带: https://www.dfrobot.com.cn/goods-1909.html[4] 5V电源: https://www.dfrobot.com.cn/goods-1930.html[5] 代码: https://mc.dfrobot.com.cn/thread-304497-1-1.html,'可以点击链接在论坛免费下载'
硬件购买请戳👆
大家有什么想法,欢迎下方留言!
欢迎大家点击阅读原文,到社区论坛查看更多有趣内容!
往期回顾
听说创客们都收藏了这个网站……
自制的大疆S1战车来了!
当谷歌小恐龙变成了一个小人……
焊武帝,他来了!
Arduino大家都熟,你听过Freeduino么?
【福利】Arduino系列引脚大全

