用beetle做一个贪玩棋盘

2020-04-012.6万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用Beetle控制器和IO扩展板制作一个带有灯光效果的国际象棋棋盘。项目中使用了64个霍尔传感器来检测棋子的位置,并通过WS2812灯带实现不同的灯光效果。文章详细介绍了硬件准备、接线方法和程序编写步骤,适合STEM教育和编程启蒙。
小小的beetle完成一个棋盘?当然不行,所以要请出我们的猪脚----IO扩展板
-----------------------------前言-----------------------------
大扎好,唔系……不好意思拿错稿子了。
大家好,我是玩Arduino一月半的电子爱好者,喜欢划水、摸鱼、炸电容、写BUG。
前几天出门捡到一个快递,迫不及待的拿回家拆开,wow~awesome~
等等,这是啥东东?好像是上次活动与然后PY交易得到的内部工程板。
用beetle做一个贪玩棋盘图1
研究了一段时间后……总算看出来了,这是一个IIC的IO扩展板。
在我正准备扔在角落吃灰的时候,我想到了很久以前看到的一个动画片——围棋少年(似乎暴露年龄了)
用beetle做一个贪玩棋盘图2
那个时候感觉
用beetle做一个贪玩棋盘图3
落子的时候气势+1+1+1,疯狂模仿,以至于弄坏了许多副棋……额,似乎又跑题了……有了想法就动手去实施,要做什么?往下看就知道了。

-----------------------------正文-----------------------------
当当当,自带特效的国际象棋。
这是当所有棋子摆放完过后的效果
用beetle做一个贪玩棋盘图4

行走棋子的时候显示蓝色光路径
用beetle做一个贪玩棋盘图5

吃掉对方棋子的时候显示红色路径
用beetle做一个贪玩棋盘图6

上面的所有显示都是可以通过改程序任意改变的,只有你想不到没有你玩不到。

这个比拇指大一丢丢的beetle控制器,使用了IO扩展板,扩展出了这么多的引脚。
为什么是国际象棋?因为我只拿到了四个IO扩展板(小声BB,好气呀,只白嫖了四个),看介绍可以同时使用8个IO扩展板,也就是扩展128个IO口。等我再白嫖几个后我就做一个中国象棋(咕咕咕~~~)
用beetle做一个贪玩棋盘图7

材料准备:
1. beetle(1个)
2. IO扩展板(4个)
3. WS2812灯带(64颗)
4. 霍尔传感器3144(64个)
5. 1K电阻(64个)
6. 国际象棋棋子(1套)
7. 铷磁铁(如果霍尔传感器能感应到棋子则不需要,但是市面上棋子磁力似乎都很小,磁铁大小根据棋子决定)(32颗)
8. 漆包线
9. 5V电源(1个)
10. 纸板一大块(垃圾佬专属,如果条件允许可以使用亚克力板)

这是需要的材料,只展示了一部分
用beetle做一个贪玩棋盘图8

-----------------------------制作开始-----------------------------
本文结构:
一、硬件介绍
    1. IO扩展板
    2. 霍尔传感器
    3. WS2818灯带
二、接线
    1. 接线图
    2. 焊接
三、程序编写
    1. 思路
    2. 编写程序
    3. 烧录演示

一、硬件介绍
在开始制作前我们先了解一下元器件:
1. IO扩展板

我们所用的是IIC接口的16位数字IO口扩展板,最多可以并联8个这样的扩展板,也就是可以扩展出128个IO口!虽然是扩展出的IO口,但是这些IO口功能可不弱,每个IO口都可独立被设置为输入、输出、上拉输入或中断IO模式。而且这个扩展板还有2个中断信号引脚INTA和INTB,当这两个引脚与主控板的中断IO口连接后可以实现真正的中断!在这个作品中我们只用到了扩展板的输入功能。

2. 霍尔传感器
用beetle做一个贪玩棋盘图9

太小了,拍的不清楚,下面是我简单的画的霍尔传感器3144
用beetle做一个贪玩棋盘图10

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

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

3. WS2818灯带
用beetle做一个贪玩棋盘图13

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

二、接线
1. 接线图
用beetle做一个贪玩棋盘图15
LED灯带连接beetle的D9引脚,扩展板的VCC、GND、SDA、SCL分别与beetle上的相应引脚焊接上,扩展板的传感器全部IO口都按照接线图接上霍尔传感器。当LED灯最高亮度点亮白色时,单的灯电流可达60mA,LED灯比较多,建议外接电源,虽然暂时不接电源也能正常运行,但是为了以后的可拓展性,建议还是加上

2.焊接
先拿出我的小纸板,在上面画出棋盘所有格子
用beetle做一个贪玩棋盘图16

我们在上面焊接一个霍尔传感器(焊接都是采用的漆包线)
用beetle做一个贪玩棋盘图17

然后我们接着焊接几个
用beetle做一个贪玩棋盘图18

然后去睡一觉后就自己焊接好了
用beetle做一个贪玩棋盘图19

我们接下来焊接灯带,8个一条,我们需要八条,间距根据你格子大小确定。建议测试焊接好的灯带是否能用。
用beetle做一个贪玩棋盘图20

我们先在焊接完的霍尔传感器上面铺上一层白纸(防止短路),然后将灯带按下面的示意图焊接好,并贴在每个霍尔传感器的上面
用beetle做一个贪玩棋盘图21

睡一觉过后又自动焊接好了
用beetle做一个贪玩棋盘图22

我们在上面再铺一层白纸,画出棋盘格子
用beetle做一个贪玩棋盘图23

再稍加装饰
用beetle做一个贪玩棋盘图24

记得组装的时候留出接口
用beetle做一个贪玩棋盘图25

3. 改造棋子
我们将棋子里面的磁铁替换掉
用beetle做一个贪玩棋盘图26

三、程序编写
1.思路
主程序就是整个思路,下面会一步一步讲解




用beetle做一个贪玩棋盘图34
第一步:初始化LED灯和IO扩展板(这步比较简单就不细说了)
用beetle做一个贪玩棋盘图30
第二:点亮棋子摆放位置的灯,等待棋子摆放完成
因为棋子摆放在1.2.7.8行,所以只要这四行电平全为低,意味着摆放完成
用beetle做一个贪玩棋盘图31
第三:棋子摆放完成后展现开局灯光
这一步主要时点灯,想玩出什么花样都行

第四:扫描IO扩展板IO口
先将原来的IO口电平信息保存在num0中,然后读取新的信息保存到num中
用beetle做一个贪玩棋盘图32
第五步:判断是否拿放棋子,计算位置,判断走子还是吃子
通过新旧数据的对比很容易判断出哪行哪列的电平出现变化,就能得到坐标。
通过判断是0变1,还是1变0,就能知道是拿起还是放下
用beetle做一个贪玩棋盘图33
第六步:点亮相应的灯光
最后就是通过两个坐标,点亮你想要的灯就行了

2.编写程序
说到这个程序刚开始没有什么思路,然后我去请教大佬。
用beetle做一个贪玩棋盘图27

大佬的思维我这种小萌新实在搞不懂,打扰了,告辞。
随着我一阵噼里啪啦乱敲过后……
用beetle做一个贪玩棋盘图28

幸好我不是走专业程序员的路,不然铁定被祭天。
还是求助大佬吧……最后在大佬的帮助下完成了代码(文章末尾附上)。

3.烧录程序GO!GO!GO!
上电-烧录……
欢迎来到贪玩象棋
这是等待双方摆放棋子
用beetle做一个贪玩棋盘图29

由于身边的人都不会下,所以我就演示一下棋盘效果(由于我代码太渣,所以只有按照国际象棋规则走才会显示相应的灯光),想要什么光效完全可以自己编写,发挥自己的脑洞。
国际象棋的运动轨迹有4种:横、直、斜还有马的走法。我就这里就按照走法简单演示一下。走子显示蓝色的路径,吃子显示红色的路径(附件上的代码解决视屏中第一步行走显示红色光的BUG)


这是1.0版本,如果我没有咕咕咕,以后会做一个2.0版本(硬件方面改动很小,加一个喇叭和DFPlayer Mini),当拿起一个棋子之后会发出相应的声音,如:拿起马,会发出马叫,吃子会发出兵戎相见的声音……
这个还可以做成类似于开心消消乐的游戏,亮多种颜色的灯,用磁铁调换两个灯,来消除。
8个扩展板最多可以扩展出128个IO口,玩法肯定不止这些,等待大佬们的创意。








创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(16)
Llllllambt
Llllllambt

看我的盆腔肌肉跑过一串肌电信号,
太赞了
visionsl
visionsl
有意思
做成一整块的PCB更耐用
二哈哈哈哈
二哈哈哈哈
作者
回复visionsl
我写想做成一个PCB,但是我的大脑给我说,不,你没这个能力
小慈
小慈
有意思,赞
DFSyHoEgu3S
DFSyHoEgu3S
大佬厉害
gada888
gada888
有创意
ad2000
ad2000
楼主的图是什么软件画,这么漂亮
二哈哈哈哈
二哈哈哈哈
作者
回复ad2000
原理图里面的大部分元件是使用产品WIKI中的SVG图。绘制矢量图的软件有AI(付费)、inkscape(开源)。上面说的两个软件我都不怎么会用,哈哈哈,所以我用的电脑自带的 图画 画的。步骤就是,先找到相应的SVG图,截屏黏贴到画画中,然后用线条画连线
铁熊
铁熊
这个好玩,赞
DFHJM_IpFmV
DFHJM_IpFmV回复铁熊
你知道这个是用什么软件编的吗?(我不知道,向大神求助)
二哈哈哈哈
二哈哈哈哈
作者
回复铁熊
正在升级2.0版本,加上声音播放
且歌且行
且歌且行
大佬,这里有我的膝盖,请收下~
二哈哈哈哈
二哈哈哈哈
作者
回复且歌且行
多动手都可以成为大佬
白吃白给
白吃白给
记得白嫖回来哦
二哈哈哈哈
二哈哈哈哈
作者
回复白吃白给
有白嫖当然要白嫖,毕竟白嫖的更香
小刚郭
小刚郭
我想问,不能用单总线的neopixel吗就一根线还是全彩刷新率us级别,只不过要用1mhz的gpio波形
二哈哈哈哈
二哈哈哈哈
作者
回复小刚郭
灯是单总线的呀,扩展板主要的作用是读取64个霍尔传感器的电平来确定棋子的位置
lastbullet
lastbullet
效果很赞啊,我也想要睡一觉自动焊好的技能
这个人很菜
这个人很菜回复二哈哈哈哈
原来如此,佩服佩服,学习了
二哈哈哈哈
二哈哈哈哈
作者
回复lastbullet
这个先要使元器件感到害怕,在他们面前焊坏一个又一个,他们就会自己焊接自己了
王佩奇儿
王佩奇儿
焊武帝~~
王佩奇儿
王佩奇儿回复二哈哈哈哈
元件:我太难了!
二哈哈哈哈
二哈哈哈哈
作者
回复王佩奇儿
可能那些元器件知道我焊接技术差,每一个焊点都要含半分钟,然后他们受不了,自己焊自己
这个人很菜
这个人很菜
膜拜大佬,真的好厉害
二哈哈哈哈
二哈哈哈哈
作者
回复这个人很菜
感谢捧场,我也不是什么大佬,只是平时爱捣鼓,多动手就熟练了,这个棋盘只是焊接麻烦一点
dt
dt
很赞,就是没明白,磁铁怎么记住位置的???
二哈哈哈哈
二哈哈哈哈
作者
回复dt
通过IO扩展板不断扫描端口,当上面有棋子时,读取的端口电平就为低电平,将端口数据记录到数组里面跟上一次做对比,就能知道有没有移动棋子和坐标了。
gray6666
gray6666
看着就都眼晕
二哈哈哈哈
二哈哈哈哈
作者
回复gray6666
焊接是有点麻烦,不过如果自己画PCB那就非常简单
Forgotten
Forgotten
左右互博术
二哈哈哈哈
二哈哈哈哈
作者
回复Forgotten
是让左手赢呢,还是右手呢?这是个值得深思的问题
- 没有更多了 -