基于STM32单片机的智能送药小车系统设计
2022-08-15王浩楠黄宇新唐金荣肖江周宇洋胡安正
王浩楠,黄宇新,唐金荣,肖江,周宇洋,胡安正
(湖北文理学院 物理与电子工程学院,湖北襄阳,441053)
1 智能送药小车总体思路
该智能小车系统主要有四个基本部分,包括单片机、摄像头处理模块、载物检测模块和无线通信模块,系统总体设计框图如图1所示。其中,使用STM32F103RC单片机作为主控单元;OpenMV摄像头作为巡线单元,OpenART摄像头用来识别数字;载物检测选择电阻式压力传感器;选用NRF24L01模块做双车通信,电机采用L298N驱动。该系统可服务于电商物流、医药、食品等领域,代替人工对物体进行配送或执行无菌作业。
图1
2 单元电路设计
2.1 单片机控制单元
本单元主要由 STM32F103RC 单片机最小系统,OLED显示模块、无线通信模块NRF24L01组成。单片机的最小系统由电源电路、复位电路、时钟电路和下载电路组成。
STM32F103RC单片机基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的 ARM Cortex-M3 内核,CPU 时钟频率72MHz,1.25DMips/MHz,2×12位ADC,256kFalsh,48K RAM,12个独立的可配置的 DMA通道[1]。
2.2 电源系统
智能送药小车主控电源管理系统由供电电源,5V电源,3.3V摄像头电源,舵机电源,电机驱动电源组成。供电电源由8.4V航模电池给整个智能送药小车供电。
2.2.1 舵机电源
舵机电源采用AS1015舵机方案,AS1015是一款高效率DC—DC转换器,满足5V输出电流,带负载能力强。该器件内部包括电压基准源,使得输入、输出电压可调,AS1015输入电压范围为3.6~23V,输出电压范围为0.8V~VIN。原理图如图2所示。
图2 舵机电源原理图
2.2.2 主控电源
STM32单片机是系统的控制核心,它的稳定性直接影响整个系统的工作。为了保证其正常工作且减少其他模块对它的干扰,采用LM2940低压差线性三端稳压器(LDO)方案,标准输出电压5V,最大输出电流1A,器件内部含有过流保护和电压保护,可以有效的保护单片机。原理图如图3所示。
图3 主控电源原理图
2.2.3 摄像头电源
摄像头的工作电压一般为3.3V,采用RT9013-33方案,RT9013是一款高性能、输出电流能力 500mA 的线性稳压器。其特性包括超低压差电压、高输出精确度、限流保护、输入电源和负载瞬态下具有超快的回应的特点。摄像头是模拟传感器,其供电电压的波动性将会直接影响其性能,RT9013稳压后电压波动较小,用其对摄像头单独供电。
2.2.4 其他电源
考虑到系统还有其他模块需要供电,但是对电源的线性度和精确度无过多的要求,故采用了AMS1117稳压。AMS1117是一个正向低压降稳压器,且其内部集成过热保护和限流电路。线性调节器对输出电压进行采样,然后将其反馈给调节电路,以调整输出级调节管的阻抗。当输出电压较低时,调整输出级的阻抗以减小调节管的压降。当输出电压较高时,调整输出级的阻抗以增加调节管的压降,从而保持输出电压的稳定性。
2.3 驱动模块
2.3.1 L298N简介
电机驱动采用L298N。L298N是一种特殊的驱动集成电路,属于H桥集成电路。L298N和L293D的区别在于其输出电流增加,功率增加。其输出电流为2A,最大电流为4A,最大工作电压为50V。可驱动大功率直流电机、步进电机、电磁阀等感性负载,特别是其输入端可直接与单片机连接,便于单片机控制。在驱动直流电机时,可直接控制步进电机,实现电机的正反转。要实现此功能,只需改变输入端的逻辑电平即可。
2.3.2 驱动的实现方式
L298N一共有四个逻辑输入口,每两个为一组可以控制一个电机的正转和反转。在该设计中需要驱动四个电机运行,故将四个电机分成两组,两两并联。使用单片机的定时器PWM模式生成四路频率为10kHz的PWM波。然后单片机的I/O端口分别与L298N的四个逻辑输入口相连,以便于控制小车的正转和反转,将两个电机的正极和负极分别接入L298N的输入口。该芯片的控制逻辑如表1所示[2]。
从表1可以看出,单片机通过I/O端口将不同的高电平或低电平组写入芯片的信号输入端可以相应地控制电机的转向。在本设计中,IN1和IN3为一组控制一个电机,IN2和IN4为一组控制另一个电机,当IN1、IN3 为高电平,IN2、IN4 为低电平时,小车前进,当IN1、IN4 为高电平,IN2、IN3 为低电平,左侧轮正转,右侧轮反转,实现小车的差速转向。
表1 电机控制方式
2.4 载物检测处理模块
载物检测采用了FSR402电阻式薄膜压力传感器,它是一款重量轻、体积小、感测精度高、超薄型电阻式压力传感器。这款传感器是将施加在FSR传感器薄膜区域的压力转换成电阻值的变化,从而获得压力信息。压力越大,电阻越低。其适用于压力为0g~10kg的场合。
根据 FSR402数据手册中对于FSR402特性的描述,可以知道在输出管脚之间的的电阻和压力之间的关系如下。
在起始阶段,当压力突破一定压力阈值之后,导通电阻有一个突破,这个阈值之前FSR相当于一个开关。当超过这个阈值的时候,FSR的电阻与压力之间就呈现一种连续变化的关系。通过单片机ADC采集得到压力的数值,当时压力的数值超过设定的阈值后,认为药品装载完毕,从而完成药品的检测。
3 总体软件设计
软件程序设计主要包括:①OpenMV获取病房走廊的路线信息,主控MCU得到路线信息后对小车进行调整,保证其能够稳定行驶。②OpenART识别不同类型的目标病房号码,将识别的图像作为一个信息单元进行存储。③主控MCU获取到的号码信息与目标病房进行匹配,通过摄像头识别算法,将小车准确无误地行驶到对应的病房。
3.1 OpenMV路线识别部分
3.1.1 自动寻径算法
自动寻径算法主要使用OpenMV的像素颜色统计实现,寻径示意图如图4所示。首先从OpenMV的视野中设置一个感兴趣区(ROI)的矩形区域,然后对这个区域进行颜色统计,如果颜色阈值在红色阈值范围内,则认为该区域内包含红实线。将包含红实线的区域使用库函数img.draw_rectangle()框选出来,然后将blob色块对象中的中心坐标blob.cx()通过串口发送给单片机。最后单片机通过标记信息判断小车相对于红实线的偏移程度,并利用PID算法精准控制小车的转向角并及时调整小车的前进方向,即可完成自动寻径。
图4 循迹示意图
3.1.2 自适应阈值算法
由于摄像头图像容易收到环境光的影响,提前设置好的阈值有可能并不适合实际比赛或者应用场地,故提出一种基于OpenMV摄像头的自适应阈值算法,该算法适合比赛应用或者抗光干扰实验。
首先获取感兴趣区域(ROI)中最大的色块,将其余干扰滤除,然后调用OpenMV的统计函数,分别计算R、G、B三个颜色分量的众数,得到它们的最大值和最小值并转换为LAB值,将新的阈值数据重新赋值给阈值数组,最终实现阈值的自动更替。算法流程框图如图5所示。
图5 自适应阈值算法流程框图
3.2 OpenART数字识别卷积神经网络
3.2.1 输入层图像大小
神经网络的输入层决定了输入图像大小。图像越大,越能更好的保存原始图像信息,但运算时间也会大大增加。相反,小图像可以快速完成矩阵运算,但是对原始图像信息保存并不完整。考虑到OpenART的工作性能,经过多次实验,我们最终选择将图像缩放为48×48像素[3]。
3.2.2 卷积层、池化层叠加
由于卷积运算过于消耗算力,同时数字1~8的特征比较明显,提取起来并不困难,所以不需要太多的卷积层连接。同时池化层能够减小运算后图像大小,节约算力的同时实现降采样,防止过拟合。因此,将网络模型设计为3层卷积层与池化层连接,最终以全连接层输出实现数字分类[4]。数字识别效果如图6所示。
图6 数字识别效果图
4 结语
本系统采用 STM32 作为小车控制核心,通过使用两个摄像头分别处理寻线和识别数字等操作,加强了系统的图像分析处理能力,使小车能够快速的识别病房号,实现了设计要求的巡线,数字识别等内容,小车采用四轮驱动抗干扰性较强,实物图如图7所示。在图像识别的过程中,能够减少抖动提高了巡线的稳定度和精确度。在当前新冠疫情背景下,该系统结构简单,可以救助病人,为隔离者提供服务,可避免医护人员与患者的直接接触,从而降低传染风险。
图7 作品实物图