1、简单易用,可快速上手
2、流畅支持300个器件或1000个焊盘以下的设计规模
3、支持简单的电路仿真
4、面向学生、老师、创客
1、全新的交互和界面
2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计
3、更严谨的设计约束,更规范的流程
4、面向企业、更专业的用户
标准版 2021电赛-F题-智能送药小车-国二作品-超神战队
简介:2021电赛F题国二作品。基于arduino单片机、步进电机运动系统、openmv神经网络视觉识别、蓝牙双车通信实现功能。完成所有基础功能和发挥功能1,稳定性强。
开源协议: Public Domain
工程来源: 克隆自 工科赛-信号整合板
一、前言
本人有非常多做车经验,因此电赛主打的方向就是做车。而本次比赛车类题目和我的团队阵容匹配,加上两个给力队员助力,取得了国二的好成绩!
二、团队介绍
由队长赵嘉辉(电控编程)、队员陈为骞(视觉识别)和吴金颖(机械设计)组成,其中两个大四,一个大三。
三、项目分析
四、系统方案
1、单片机选择
采用arduinoMEGA2560单片机作主控。由于其代码开源性,代码简易,适合新手使用。强大的库函数能极大减少开发时间。且对于该题目,运算速度足够,因此采用。
2、运动系统
采用42步进电机。该款电机转动精确度高,扭力大,额定电流2A以下,且控制简单,不会因为不同驱动的电压而导致转动步数的偏差,无需使用闭环控制即能走出非常好的直线,不易走歪,短距离内可精准控制运动位移。驱动采用TB6600 H桥双极恒相流驱动。驱动及电机采用淘宝成品套件,设置驱动细分数为800。由于驱动体积较大,且42步进电机运行时电流较小,因此可以拆除该驱动模块的金属外壳(散热器),从而达到极大缩小体积和重量。步进电机驱动市场上也有很多种类,推荐买双路的,比较省体积。
前轮采用牛眼轮进行支撑。牛眼轮的选择最好选摩擦力小的。本作品用的牛眼轮摩擦力较大,使得电机的速度不能提得太高,否则摩擦力会将车的运动姿态扰乱,走起来一抖一抖的。因此推荐使用万向轮,能大幅减少摩擦力!!!
3、循迹系统
采用八路灰度传感器(实际只用了4路)。调节好阈值,能精准分辨红白色。推荐使用下图的灰度传感器。用非常简单的数字逻辑检测循迹代码即能完成循迹功能。
4、视觉系统
手持病房号采用模板匹配识别,原因是手持病房号可动态调整远近、角度,模板匹配也能很快识别成功。
地面上的病房号数字采用OpenMV4 H7 Plus神经网络方法识别。对比模板匹配,识别成功率极高,高达90%以上。由于性能受限,运行时图像仅有2~3帧,需要在病房号前停下零点几秒让其图像稳定下来识别数字。
openmv一通电执行模板匹配算法识别手持病房号,识别到后发送对应数字给单片机,随后openmv自己保存这个“目的病房号”。之后就等待单片机发送‘1’。随后单片机控制小车来到十字路口前停下,发送‘1’后openmv使用深度学习算法识别地面的病房号,并和之前储存的“目的病房号”对比,如果是地面上贴着的左病房号和‘目的病房号’一致,就发送‘1’,右病房号一致就发送‘2’,如果都不匹配就发送‘0’。单片机根据收到的0、1、2控制小车:直行到下一个十字路口重新发送‘1’、左转到目的病房号、右转到目的病房号。
5、通信系统
采用HM-10蓝牙模块进行双机通信。主蓝牙仅能接收从蓝牙的信息,不能传信息给从蓝牙。因此从蓝牙接1号车,主蓝牙接2号车。2号车只需要接收1号车指令即可完成所有任务。注意:需提前AT指令设置主从模式和自动连接蓝牙的操作。
6、其他
采用了oled屏幕显示本次读取病房号是否成功,及实时显示一些小车运行状态,方便调试。设置红绿黄指示灯、蜂鸣器提示等功能。
采用双边自复位按钮作复位键。由于主控单片机和OpenMV工作电平不一致,复位引脚不能接入同一按键上,因此使用此按键可一键复位两个单片机。
药物检测采用简单的红外避障模块检测高低电平即可。
五、原理图电路分析
1、主控单片机扩展板
由于本作品的pcb是提前准备的,预设了很多功能接口都没有用上,因此只讲解使用过部分的原理图。
(1)单片机及其引脚外接
其中arduino的D2-D5作为IO口接入电机驱动模块,驱动两个步进电机(每个步进电机由DIR和PUL控制),D23-D37的其中一些引脚接灰度传感器的8个数字信号口。
(2)电源输入、输出
12V从圆孔DC5.5系列接口输入,一路直出给步进电机驱动和步进电机供电,领一路经过5V稳压模块给单片机等其他模块供电。引出8组5V电源接口,方便扩展。
(3)蜂鸣器驱动电路
(4)红绿灯驱动电路
在原理图中无该设计,这个是现场焊电路做成的,3个灯分别接入单片机D8、D9、D10接口。
2、步进电机驱动信号整合板
两个步进电机需要两个驱动板,需要较多信号线和电源线,会导致接线较乱、易松。为了稳定性更好,制作了这块信号整合板,并使用了XH2.54红白排插线,连接不易松,且易拔插。
(1)原理图
分为12V电源输入输出,布线配合单片机扩展板的IO分布。
(2)PCB及仿真图
印丝层加入了对应的IO口数字号,标注了步进电机驱动细分数对应的拨码器状态。且该pcb孔位、大小完全适配拆了散热外壳后的步进电机驱动模块,能直接安装在驱动上,省空间。
六、PCB设计分析
由于主要难度在电控编程上,因此对于PCB的布线难度较小,有一定基础即可,没有需要特别注意的地方。
七、实物展示
小车1和小车2用的都是同一个方案和模型。由于成本原因,我们组手头上只有1个openmv4plus,而深度学习仅能用4plus跑。因此小车2上搭载的是openmv4,使用模板匹配进行识别。
八、作品装配
1、整车模型
如图为小车机械结构3D图。前轮采用两个牛眼轮进行辅助支撑,后轮为步进电机驱动的动力轮。长21cm、宽19.5cm、高24.5cm。
图中1为牛眼轮,2为八路灰度传感器模块,3为小车底板,4为六角铜柱,5为单片机和PCB扩展板,6为摄像头支架固定底座,7为OpenMV摄像头,8为药品,9为药仓,10为红外对射模块,11为步进电机驱动板,12为普通轮子,13为步进电机,14为12V锂电池,15为支撑座。
2、车底盘图
如图为车底盘CAD图,使用激光切割亚克力制成。厚度4mm左右。
九、程序设计
1、运动函数
以前进为例:通过脉冲数控制步进电机的步进数。想让电机走一圈就是给800个脉冲,位移对应轮子周长。给脉冲的快慢(频率)决定了电机旋转快慢。
后退、顺逆时针同理,仅A、B电机的方向不一样而已。
2、循迹函数
Q3-Q6为灰度传感器中间4个,检测其电平,根据电平控制小车左转、右转。函数中:(Anit)ClockwisePX(10,3000)为(逆)顺时针微动函数,10为步进数,3000为速度(越小越快)。Advance(50,1800)为前进函数,50为步进数,1800位速度。
3、读取病房号函数
其中inData为字符类型全局变量,存储收到的信息,作缓存。Aim为目的地全局变量,其数字值代表着识别到的目的地病房号。
4、读取分岔路口病房号函数
自定义和openmv的通信协议,发送0x31时开始识别分岔路口病房号。接收到返回的字符,对应左转、右转、前进,显示屏也会显示对应Z、Y、N。u8g2类函数是oled的显示函数,使用方法自行学习,较简单。
5、小车1发送位置信息给小车2
定义病房号的绝对坐标,小车1到达某个收货点后发送该收货点的绝对坐标(3或4,目前没做到5-8的任务)。小车2收到这个绝对坐标后,到达暂停点。小车1返回结束后,会发送可运行指令给小车2,此时小车2根据接收到的绝对坐标,直接去对应的中端病房。
代码没有截全,因为后面的是发送5-8远端病房号的绝对坐标,没有做到那一步,此部分没什么用。函数里的Mid变量是记录小车1到中端病房时的动作,Mid=0对应左转、Mid=1对应右转、Mid=2时前进。以此判断小车1终点在中端病房还是远端病房。同样的变量还有Long。
6、视觉代码流程图
7、神经网络训练结果
基于部分图片数据训练的结果已经达到100%识别率。实际检测结果置信度达到90%以上,足以满足识别要求。
十、总结
1.选择自己最擅长的方案。例如本人在多个车类比赛中均使用步进电机方案,经验丰富,旧代码多,省了非常多的代码编写时间。不要去尝试其他不熟悉的方案,因为4天3页时间真的很紧急。
2.作为队长要根据每个队员的优势长处设定任务,队长要担任起进度规划的重任,经常是“单核多线程”工作。每个队员都要有强烈的责任感,在选队员上是关键。例如我们队伍有一个机械,负责车组装和3d建模打印等操作,效率极高,半天时间就设计完,一天不到就组装出第一台车,为我们队伍节省了非常多宝贵的调试时间。
3.运气也是实力的一部分。本次比赛的题目非常符合我们队伍阵容,车控电控、神经网络、机械,完美适配我们三人的优势,也许这些都是命中注定。
十一、附件
B站演示视频:https://www.bilibili.com/video/BV1Qb4y1i7Sn/
代码见附件。不懂可联系qq986274874可提供简单答疑等。
展开
加载中...
是否需要添加此工程到专辑?