7340浏览
查看: 7340|回复: 31

用beetle做一个贪玩棋盘

[复制链接]
小小的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口,玩法肯定不止这些,等待大佬们的创意。








二哈哈哈哈  中级技师
 楼主|

发表于 2020-4-7 16:20:32

ad2000 发表于 2020-4-6 07:11
楼主的图是什么软件画,这么漂亮

原理图里面的大部分元件是使用产品WIKI中的SVG图。绘制矢量图的软件有AI(付费)、inkscape(开源)。上面说的两个软件我都不怎么会用,哈哈哈,所以我用的电脑自带的 图画  画的。步骤就是,先找到相应的SVG图,截屏黏贴到画画中,然后用线条画连线
回复

使用道具 举报

小刚郭  初级技师 来自手机

发表于 2020-4-2 11:50:26

二哈哈哈哈 发表于 2020-4-1 15:46
小小的beetle完成一个棋盘?当然不行,所以要请出我们的猪脚----IO扩展板-----------------------------前 ...

我想问,不能用单总线的neopixel吗就一根线还是全彩刷新率us级别,只不过要用1mhz的gpio波形
回复

使用道具 举报

二哈哈哈哈  中级技师
 楼主|

发表于 2020-4-2 08:58:39

dt 发表于 2020-4-1 18:42
很赞,就是没明白,磁铁怎么记住位置的???

通过IO扩展板不断扫描端口,当上面有棋子时,读取的端口电平就为低电平,将端口数据记录到数组里面跟上一次做对比,就能知道有没有移动棋子和坐标了。
回复

使用道具 举报

Forgotten  版主

发表于 2020-4-1 17:47:02

左右互博术
回复

使用道具 举报

gray6666  初级技神

发表于 2020-4-1 18:01:52

看着就都眼晕
回复

使用道具 举报

dt  高级技师

发表于 2020-4-1 18:42:08

很赞,就是没明白,磁铁怎么记住位置的???
回复

使用道具 举报

Vibranium  高级技师

发表于 2020-4-1 18:48:57

膜拜大佬,真的好厉害
回复

使用道具 举报

wangyirun  初级技匠

发表于 2020-4-1 19:01:43

焊武帝~~
回复

使用道具 举报

二哈哈哈哈  中级技师
 楼主|

发表于 2020-4-2 09:22:32


是让左手赢呢,还是右手呢?这是个值得深思的问题
回复

使用道具 举报

二哈哈哈哈  中级技师
 楼主|

发表于 2020-4-2 09:25:41


焊接是有点麻烦,不过如果自己画PCB那就非常简单
回复

使用道具 举报

二哈哈哈哈  中级技师
 楼主|

发表于 2020-4-2 09:30:25

Vibranium 发表于 2020-4-1 18:48
膜拜大佬,真的好厉害

感谢捧场,我也不是什么大佬,只是平时爱捣鼓,多动手就熟练了,这个棋盘只是焊接麻烦一点
回复

使用道具 举报

二哈哈哈哈  中级技师
 楼主|

发表于 2020-4-2 09:33:38


可能那些元器件知道我焊接技术差,每一个焊点都要含半分钟,然后他们受不了,自己焊自己
回复

使用道具 举报

wangyirun  初级技匠

发表于 2020-4-2 09:40:27

二哈哈哈哈 发表于 2020-4-2 09:33
可能那些元器件知道我焊接技术差,每一个焊点都要含半分钟,然后他们受不了,自己焊自己 ...

元件:我太难了!
回复

使用道具 举报

lastbullet  见习技师

发表于 2020-4-2 11:23:20

效果很赞啊,我也想要睡一觉自动焊好的技能
回复

使用道具 举报

二哈哈哈哈  中级技师
 楼主|

发表于 2020-4-2 13:07:36

小刚郭 发表于 2020-4-2 11:50
我想问,不能用单总线的neopixel吗就一根线还是全彩刷新率us级别,只不过要用1mhz的gpio波形 ...

灯是单总线的呀,扩展板主要的作用是读取64个霍尔传感器的电平来确定棋子的位置
回复

使用道具 举报

二哈哈哈哈  中级技师
 楼主|

发表于 2020-4-2 13:12:36

lastbullet 发表于 2020-4-2 11:23
效果很赞啊,我也想要睡一觉自动焊好的技能

这个先要使元器件感到害怕,在他们面前焊坏一个又一个,他们就会自己焊接自己了
回复

使用道具 举报

白吃白给  中级技师

发表于 2020-4-2 13:46:04

记得白嫖回来哦

回复

使用道具 举报

且歌且行  中级技师

发表于 2020-4-2 14:44:08

大佬,这里有我的膝盖,请收下~
回复

使用道具 举报

Vibranium  高级技师

发表于 2020-4-2 16:46:12

二哈哈哈哈 发表于 2020-4-2 05:12
这个先要使元器件感到害怕,在他们面前焊坏一个又一个,他们就会自己焊接自己了 ...

原来如此,佩服佩服,学习了
回复

使用道具 举报

二哈哈哈哈  中级技师
 楼主|

发表于 2020-4-3 09:15:30


有白嫖当然要白嫖,毕竟白嫖的更香
回复

使用道具 举报

铁熊  初级技神

发表于 2020-4-5 17:04:36

这个好玩,赞
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail