2021电赛-F题-智能送药小车-国二作品-超神战队 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

标准版 2021电赛-F题-智能送药小车-国二作品-超神战队

  • 2.9w
  • 2
  • 48

简介:2021电赛F题国二作品。基于arduino单片机、步进电机运动系统、openmv神经网络视觉识别、蓝牙双车通信实现功能。完成所有基础功能和发挥功能1,稳定性强。

开源协议: Public Domain

(未经作者授权,禁止转载)

工程来源: 克隆自 工科赛-信号整合板

创建时间: 2021-10-28 18:46:20
更新时间: 2024-04-06 20:27:08
描述

一、前言

        本人有非常多做车经验,因此电赛主打的方向就是做车。而本次比赛车类题目和我的团队阵容匹配,加上两个给力队员助力,取得了国二的好成绩!

二、团队介绍

        由队长赵嘉辉(电控编程)、队员陈为骞(视觉识别)和吴金颖(机械设计)组成,其中两个大四,一个大三。

三、项目分析

①.任务
        设计并制作智能送药小车,模拟完成在医院药房与病房间药品的送取作业。 院区结构示意如图 1 所示。院区走廊两侧的墙体由黑实线表示。走廊地面上画有 居中的红实线,并放置标识病房号的黑色数字可移动纸张。药房和近端病房号(1、 2 号)如图 1 所示位置固定不变,中部病房和远端病房号(3-8 号)测试时随机设定。
        工作过程:参赛者手动将小车摆放在药房处(车头投影在门口区域内,面向 病房),手持数字标号纸张由小车识别病房号,将约 200g 药品一次性装载到送药小车上;小车检测到药品装载完成后自动开始运送;小车根据走廊上的标识信 息自动识别、寻径将药品送到指定病房(车头投影在门口区域内),点亮红色指示灯,等待卸载药品;病房处人工卸载药品后,小车自动熄灭红色指示灯,开始返回;小车自动返回到药房(车头投影在门口区域内,面向药房)后,点亮绿色指示灯。
②.要求
1.基本要求
(1)单个小车运送药品到指定的近端病房并返回到药房。要求运送和返回时间均小于 20s,超时扣分。
(2)单个小车运送药品到指定的中部病房并返回到药房。要求运送和返回时间均小于 20s,超时扣分。
3)单个小车运送药品到指定的远端病房并返回到药房。要求运送和返回时间均小于 20s,超时扣分。

 

 2.发挥部分
(1)两个小车协同运送药品到同一指定的中部病房。小车 1 识别病房号装载药品后开始运送,到达病房后等待卸载药品;然后,小车 2 识别病房号装载药品后启动运送,到达自选暂停点后暂停,点亮黄色指示灯,等待小车 1 卸载;小车 1 卸载药品,开始返回,同时控制小车 2 熄灭黄色指示灯并继续运送。要求从小车 2 启动运送开始,到小车 1 返回到药房且小车 2 到达病房的总时间(不包括小车 2 黄灯亮时的暂停时间)越短越好,超过 60s 计 0 分。
2)两个小车协同到不同的远端病房送、取药品,小车 1 送药,小车 2 取药。小车 1 识别病房号装载药品后开始运送,小车 2 于药房处识别病房号等待小车 1 的取药开始指令;小车 1 到达病房后卸载药品,开始返回,同时向小车 2发送启动取药指令;小车 2 收到取药指令后开始启动,到达病房后停止,亮红色指示灯。要求从小车 1 返回开始,到小车 1 返回到药房且小车 2 到达取药病房的总时间越短越好,超过 60s 计 0 分。
题目分析
任务可简单分为3个:
(1)巡线移动。完成最基础的移动功能,是所有功能的基础。本作品采用灰度传感器循迹和步进电机的巡线移动方案。
(2)识别病房号数字。可采用openmv、k210、树莓派等视觉单片机识别。由于没有提前准备k210,且树莓派大小、功耗较大,因此采用最常见的openmv。为保证性能足够,采用openmv4plus。
(3)双机通信。本作品采用蓝牙双机通信,实现数据共享。
完成以上3个任务后,就是对小车代码逻辑的构思和想法。后面的就是多调试代码,修bug即可。
 

四、系统方案

1、单片机选择

    采用arduinoMEGA2560单片机作主控。由于其代码开源性,代码简易,适合新手使用。强大的库函数能极大减少开发时间。且对于该题目,运算速度足够,因此采用。

2、运动系统

    采用42步进电机。该款电机转动精确度高,扭力大,额定电流2A以下,且控制简单,不会因为不同驱动的电压而导致转动步数的偏差,无需使用闭环控制即能走出非常好的直线,不易走歪,短距离内可精准控制运动位移。驱动采用TB6600 H桥双极恒相流驱动。驱动及电机采用淘宝成品套件,设置驱动细分数为800。由于驱动体积较大,且42步进电机运行时电流较小,因此可以拆除该驱动模块的金属外壳(散热器),从而达到极大缩小体积和重量。步进电机驱动市场上也有很多种类,推荐买双路的,比较省体积。

uDL5w3a5dhVp6KNTgJIJZkTMcY5NZ4LJ0eJkDS42.png

 

    前轮采用牛眼轮进行支撑。牛眼轮的选择最好选摩擦力小的。本作品用的牛眼轮摩擦力较大,使得电机的速度不能提得太高,否则摩擦力会将车的运动姿态扰乱,走起来一抖一抖的。因此推荐使用万向轮,能大幅减少摩擦力!!!

3、循迹系统

    采用八路灰度传感器(实际只用了4路)。调节好阈值,能精准分辨红白色。推荐使用下图的灰度传感器。用非常简单的数字逻辑检测循迹代码即能完成循迹功能。

2zXauUpEuSMt80VRUAGWtaTvouo38fEb1enKnOrD.png

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个数字信号口。

x4g1gOPrRTNESrdLPqL9Z4FlTlYBq5hikwvZMugO.png

(2)电源输入、输出

    12V从圆孔DC5.5系列接口输入,一路直出给步进电机驱动和步进电机供电,领一路经过5V稳压模块给单片机等其他模块供电。引出8组5V电源接口,方便扩展。

zqep039aVQmj8OredlicbjtU4ykdlMh3btZSz8FM.png

(3)蜂鸣器驱动电路

shfThaC5Z09xWAT0bvUaVevAndUHFhNaFdGDW1f6.png

(4)红绿灯驱动电路

    在原理图中无该设计,这个是现场焊电路做成的,3个灯分别接入单片机D8、D9、D10接口。

RyZ2lxMnD33mYgpyscsAPxhzKpEEQWWWy36neS1l.png

 

2、步进电机驱动信号整合板

    两个步进电机需要两个驱动板,需要较多信号线和电源线,会导致接线较乱、易松。为了稳定性更好,制作了这块信号整合板,并使用了XH2.54红白排插线,连接不易松,且易拔插。

(1)原理图

    分为12V电源输入输出,布线配合单片机扩展板的IO分布。

xACQ9MolK1rxVcBuWRGWfblEwLocSqakd726MQyb.png

(2)PCB及仿真图

    印丝层加入了对应的IO口数字号,标注了步进电机驱动细分数对应的拨码器状态。且该pcb孔位、大小完全适配拆了散热外壳后的步进电机驱动模块,能直接安装在驱动上,省空间。

PPtiXitdamwauLJ923TdUJOTsSo0zTJK5DW2ahaP.pngWRy9MwrXYFLN8XhBJOOzPbtZgWe4EbyPeF63oah3.png

 

六、PCB设计分析

        由于主要难度在电控编程上,因此对于PCB的布线难度较小,有一定基础即可,没有需要特别注意的地方。

 

七、实物展示

    小车1和小车2用的都是同一个方案和模型。由于成本原因,我们组手头上只有1个openmv4plus,而深度学习仅能用4plus跑。因此小车2上搭载的是openmv4,使用模板匹配进行识别。

VVdGScRzlB4yu1RAfX2xFZ3yjWUNE6kZf2SoZQYZ.jpeg

 

八、作品装配

1、整车模型

   如图为小车机械结构3D图。前轮采用两个牛眼轮进行辅助支撑,后轮为步进电机驱动的动力轮。长21cm、宽19.5cm、高24.5cm

wkzv0AH778LGiKcqeiIXCc4RhdQgFU20T1SKyaPP.png

    图中1为牛眼轮,2为八路灰度传感器模块,3为小车底板,4为六角铜柱,5为单片机和PCB扩展板,6为摄像头支架固定底座,7OpenMV摄像头,8为药品,9为药仓,10为红外对射模块,11为步进电机驱动板,12为普通轮子,13为步进电机,1412V锂电池,15为支撑座。

2、车底盘图

   如图为车底盘CAD图,使用激光切割亚克力制成。厚度4mm左右。

uHkKA7H4yY2bUDHFqx1oVFv62aOlESl8sSZYR7TQ.png

 

九、程序设计

1、运动函数

    以前进为例:通过脉冲数控制步进电机的步进数。想让电机走一圈就是给800个脉冲,位移对应轮子周长。给脉冲的快慢(频率)决定了电机旋转快慢。

    后退、顺逆时针同理,仅A、B电机的方向不一样而已。

cSR4eYeVPgZE7Ld7oyV2wKW9cIZDqm98rDyymQbv.png

 

2、循迹函数

    Q3-Q6为灰度传感器中间4个,检测其电平,根据电平控制小车左转、右转。函数中:(Anit)ClockwisePX(10,3000)为(逆)顺时针微动函数,10为步进数,3000为速度(越小越快)。Advance(50,1800)为前进函数,50为步进数,1800位速度。

pUhgYVffHBFfKLqQEftuM5WAkTjY7CxHRSECso63.png

 

3、读取病房号函数

    其中inData为字符类型全局变量,存储收到的信息,作缓存。Aim为目的地全局变量,其数字值代表着识别到的目的地病房号。

RHN8OkFD8RpSt7t8uka5jrgF7CSYEBm1KEye8tao.png

 

4、读取分岔路口病房号函数

    自定义和openmv的通信协议,发送0x31时开始识别分岔路口病房号。接收到返回的字符,对应左转、右转、前进,显示屏也会显示对应Z、Y、N。u8g2类函数是oled的显示函数,使用方法自行学习,较简单。

GXijYrSd7qhDa1THuEsM5VnHj1puyXaQVYFF2uVH.png

 

5、小车1发送位置信息给小车2

    定义病房号的绝对坐标,小车1到达某个收货点后发送该收货点的绝对坐标(3或4,目前没做到5-8的任务)。小车2收到这个绝对坐标后,到达暂停点。小车1返回结束后,会发送可运行指令给小车2,此时小车2根据接收到的绝对坐标,直接去对应的中端病房。

代码没有截全,因为后面的是发送5-8远端病房号的绝对坐标,没有做到那一步,此部分没什么用。函数里的Mid变量是记录小车1到中端病房时的动作,Mid=0对应左转、Mid=1对应右转、Mid=2时前进。以此判断小车1终点在中端病房还是远端病房。同样的变量还有Long。

VG38jDoLeX3SlN3If9U6MecBBwbHE8G9VpmpZaZj.png

 

6、视觉代码流程图

oRkqS87J3JKr1KJXWTA6GMA8iQ0RCFlfRY0pWb1o.png

7、神经网络训练结果

    基于部分图片数据训练的结果已经达到100%识别率。实际检测结果置信度达到90%以上,足以满足识别要求。

CYFv69svGoMAVWuZlfegCU7qJwH8EkK3yo43Nbbw.pngGjNR35msf1wqF6iZAbCeP56SgGKgKiY00cjXtM4W.png

 

十、总结

    1.选择自己最擅长的方案。例如本人在多个车类比赛中均使用步进电机方案,经验丰富,旧代码多,省了非常多的代码编写时间。不要去尝试其他不熟悉的方案,因为4天3页时间真的很紧急。

    2.作为队长要根据每个队员的优势长处设定任务,队长要担任起进度规划的重任,经常是“单核多线程”工作。每个队员都要有强烈的责任感,在选队员上是关键。例如我们队伍有一个机械,负责车组装和3d建模打印等操作,效率极高,半天时间就设计完,一天不到就组装出第一台车,为我们队伍节省了非常多宝贵的调试时间。

    3.运气也是实力的一部分。本次比赛的题目非常符合我们队伍阵容,车控电控、神经网络、机械,完美适配我们三人的优势,也许这些都是命中注定。

 

十一、附件

    B站演示视频:https://www.bilibili.com/video/BV1Qb4y1i7Sn/

    代码见附件。不懂可联系qq986274874可提供简单答疑等。

 

设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
工程视频/附件
序号 文件名称 下载次数
1

代码.rar

1160
2

openmv端.zip

125
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP