电子设计竞赛 - 三子棋人机对战

2024年 全国大学生电子设计竞赛 区赛控制题 三子棋,人机对战。这里主要分享一下我们的设计思路实现,采用 XYZ三轴步进电机进行控制,可以精确的定位到目标点位,原理就跟3D打印机一样,虽然是开环,但是步进电机的精度足以满足需求。主控板采用esp32控制,驱动a4988,进行电机控制。视觉部分采用openmv模块,使用串口进行交互。

1.步进电机控制

步进电机的控制原理非常简单,通过脉冲(一个高低电平的跳变)数量 控制旋转的角度,通过控制脉冲的频率控制旋转的速度,下面为驱动器接线示意,DIR为方向,通过连接单片机的GPIO引脚,输出高低电平进行正反转方向控制。STEP为步调,连接单片机的脉冲输出引脚,根据脉冲数量与细分角度,可以计算出步进电机旋转一周所需要的脉冲数量,例如,42步进电机的步距角为1.8°,那么旋转一周所需脉冲数量应为 200,若驱动器设置细分为4倍,那么电机旋转一周所需的角度应为200*4=800,这一点对于电机的调试非常重要。

arduino控制步进电机代码-----------------------------------------------------------        

STM32控制步进电机代码-----------------------------------------------------------                                                           

  

二,Openmv视觉识别

先讲识别思路,因为步进电机精度准确,这里没有采用视觉闭环,小伙伴可以自己根据情况设计添加,摄像头采集照片后,先设定黑棋与白棋的阈值,由于背景可以自定义,因此openmv识别黑白色色块几乎不会出现问题,识别到色块后根据 色块位置,进行棋盘的地图分布,这里 我采用黑色为1,白色为2,空为0,例如当只有中间位置出现黑色色块时,识别结果为 map=[0,0,0,0,1,0,0,0,0],Openmv只做这么一件事情,每次收到下位机标记后,都去识别当前的棋盘,并返回棋盘的情况。 下面为识别的效果展示,此时棋盘情况应为map=【0,0,1,0,1,1,2,0,0,2】

Openmv部分代码----------------------------------------------------------------------------------

三 解法以及控制思路                                       -                          -

三子棋的地图分布情况在上位机获取后,下位机进行求解,并返回下一步的目标点,我们将3*3的地图标记为了规定的 1.2.3.4.5.6.7.8.9个区域,每个区域的电机旋转角度是固定的,只需要在放置完成后,回到零点即可。解棋的策略其实非常简单,网上一搜一大把,只要搞懂输入的地图与输出的目标点位逻辑即可,重点在于棋盘的标零与位置计算,步进电机的初始位置必须固定,而地图的长度是固定的,拿X轴举例,地图长度为15cm,步进电机带动吸盘移动15cm所需要的脉冲数为8000,那么步进电机在15cm内的任意位置移动,都可以根据这个比例计算得到,通过对XY轴的位置计算,吸盘就可以到达平面内的任意点,下面为部分计算程序

Z轴操作,Z轴其实只需要两个位置,一个是吸盘吸放棋子时的高度,一个是去目标点时的高度,通过对XYZ三轴的操作,即可实现对任意点的棋子的放置。

小结

      整体设计其实并不难,主要在于对控制平台的熟悉,理解XYZ三轴移动的策略,配置好步进电机的驱动,就可以很好的实现功能了,缺点在于,没有做闭环设计,摄像头位置需要固定好。最终实现的效果在我的bilibili账号上传,附上链接https://www.bilibili.com/video/BV1NyvxeaE9j/?spm_id_from=333.999.0.0

这也是本人第一次写博客,内容规划可能有所欠缺,希望日后多多记录学习过程,提高水平。

源码工程获取可以私聊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值