二哈哈哈哈 发表于 2020-4-1 15:46:15

用beetle做一个贪玩棋盘

小小的beetle完成一个棋盘?当然不行,所以要请出我们的猪脚----IO扩展板-----------------------------前言-----------------------------大扎好,唔系……不好意思拿错稿子了。大家好,我是玩Arduino一月半的电子爱好者,喜欢划水、摸鱼、炸电容、写BUG。前几天出门捡到一个快递,迫不及待的拿回家拆开,wow~awesome~等等,这是啥东东?好像是上次活动与然后PY交易得到的内部工程板。研究了一段时间后……总算看出来了,这是一个IIC的IO扩展板。在我正准备扔在角落吃灰的时候,我想到了很久以前看到的一个动画片——围棋少年(似乎暴露年龄了)那个时候感觉落子的时候气势+1+1+1,疯狂模仿,以至于弄坏了许多副棋……额,似乎又跑题了……有了想法就动手去实施,要做什么?往下看就知道了。
-----------------------------正文-----------------------------当当当,自带特效的国际象棋。这是当所有棋子摆放完过后的效果
行走棋子的时候显示蓝色光路径
吃掉对方棋子的时候显示红色路径
上面的所有显示都是可以通过改程序任意改变的,只有你想不到没有你玩不到。
这个比拇指大一丢丢的beetle控制器,使用了IO扩展板,扩展出了这么多的引脚。为什么是国际象棋?因为我只拿到了四个IO扩展板(小声BB,好气呀,只白嫖了四个),看介绍可以同时使用8个IO扩展板,也就是扩展128个IO口。等我再白嫖几个后我就做一个中国象棋(咕咕咕~~~)
材料准备:1. beetle(1个)2. IO扩展板(4个)3. WS2812灯带(64颗)4. 霍尔传感器3144(64个) 5. 1K电阻(64个)6. 国际象棋棋子(1套)7. 铷磁铁(如果霍尔传感器能感应到棋子则不需要,但是市面上棋子磁力似乎都很小,磁铁大小根据棋子决定)(32颗)8. 漆包线9. 5V电源(1个)10. 纸板一大块(垃圾佬专属,如果条件允许可以使用亚克力板)
这是需要的材料,只展示了一部分
-----------------------------制作开始-----------------------------本文结构:一、硬件介绍    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. 霍尔传感器
太小了,拍的不清楚,下面是我简单的画的霍尔传感器3144
网上对霍尔传感器噼里啪啦的介绍了一大堆,简单来说,霍尔传感器就是检测磁场强度的一个传感器。我们这里使用的是单极性开关型霍尔传感器。当有磁铁时输出低电平,没有就输出高电平。我用铷磁铁测试感应距离大约8mm,不同磁性的磁铁感应距离也不一样,下面是测试原理图和结果图:测试
磁铁磁性越大,感应距离大,磁铁磁性越小,感应距离小。而且磁铁磁性越大,棋子之间的间隔也就越大,建议先测试确定数据之后再动手,并且建议这样测试每个传感器的好坏。
3. WS2818灯带
WS2812 RGB灯带是由全彩LED组成。只需一个IO口就可以控制所有LED灯,使用起来非常的方便。而且灯带柔性较大,可随意对接,弯曲,裁剪,非常符合我们的要求。需要注意:灯带之间千万不要接反
二、接线1. 接线图LED灯带连接beetle的D9引脚,扩展板的VCC、GND、SDA、SCL分别与beetle上的相应引脚焊接上,扩展板的传感器全部IO口都按照接线图接上霍尔传感器。当LED灯最高亮度点亮白色时,单的灯电流可达60mA,LED灯比较多,建议外接电源,虽然暂时不接电源也能正常运行,但是为了以后的可拓展性,建议还是加上。
2.焊接先拿出我的小纸板,在上面画出棋盘所有格子
我们在上面焊接一个霍尔传感器(焊接都是采用的漆包线)
然后我们接着焊接几个
然后去睡一觉后就自己焊接好了{:7_220:}
我们接下来焊接灯带,8个一条,我们需要八条,间距根据你格子大小确定。建议测试焊接好的灯带是否能用。
我们先在焊接完的霍尔传感器上面铺上一层白纸(防止短路),然后将灯带按下面的示意图焊接好,并贴在每个霍尔传感器的上面
睡一觉过后又自动焊接好了{:7_220:}
我们在上面再铺一层白纸,画出棋盘格子
再稍加装饰
记得组装的时候留出接口
3. 改造棋子我们将棋子里面的磁铁替换掉
三、程序编写1.思路主程序就是整个思路,下面会一步一步讲解



第一步:初始化LED灯和IO扩展板(这步比较简单就不细说了)第二步:点亮棋子摆放位置的灯,等待棋子摆放完成因为棋子摆放在1.2.7.8行,所以只要这四行电平全为低,意味着摆放完成第三步:棋子摆放完成后展现开局灯光这一步主要时点灯,想玩出什么花样都行
第四步:扫描IO扩展板IO口先将原来的IO口电平信息保存在num0中,然后读取新的信息保存到num中第五步:判断是否拿放棋子,计算位置,判断走子还是吃子通过新旧数据的对比很容易判断出哪行哪列的电平出现变化,就能得到坐标。通过判断是0变1,还是1变0,就能知道是拿起还是放下第六步:点亮相应的灯光最后就是通过两个坐标,点亮你想要的灯就行了
2.编写程序说到这个程序刚开始没有什么思路,然后我去请教大佬。
大佬的思维我这种小萌新实在搞不懂,打扰了,告辞。随着我一阵噼里啪啦乱敲过后……
幸好我不是走专业程序员的路,不然铁定被祭天。还是求助大佬吧……最后在大佬的帮助下完成了代码(文章末尾附上)。
3.烧录程序GO!GO!GO! 上电-烧录…… 欢迎来到贪玩象棋这是等待双方摆放棋子
由于身边的人都不会下,所以我就演示一下棋盘效果(由于我代码太渣,所以只有按照国际象棋规则走才会显示相应的灯光),想要什么光效完全可以自己编写,发挥自己的脑洞。国际象棋的运动轨迹有4种:横、直、斜还有马的走法。我就这里就按照走法简单演示一下。走子显示蓝色的路径,吃子显示红色的路径(附件上的代码解决视屏中第一步行走显示红色光的BUG)
https://www.bilibili.com/video/BV1WJ411N7py/
这是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

左右互博术{:5_160:}

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

看着就都眼晕{:6_203:}

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

Forgotten 发表于 2020-4-1 17:47
左右互博术

是让左手赢呢,还是右手呢?这是个值得深思的问题{:7_224:}

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

gray6666 发表于 2020-4-1 18:01
看着就都眼晕

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

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

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

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

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

wangyirun 发表于 2020-4-1 19:01
焊武帝~~

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

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
效果很赞啊,我也想要睡一觉自动焊好的技能

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

白吃白给 发表于 2020-4-2 13:46:04

记得白嫖回来哦
{:5_163:}

且歌且行 发表于 2020-4-2 14:44:08

大佬,这里有我的膝盖,请收下~{:6_215:}

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

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

原来如此,佩服佩服,学习了{:6_209:}

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

白吃白给 发表于 2020-4-2 13:46
记得白嫖回来哦

有白嫖当然要白嫖,毕竟白嫖的更香{:7_219:}

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

这个好玩,赞
页: [1] 2
查看完整版本: 用beetle做一个贪玩棋盘