-
摘要:为了直观展示智能搬运小车的控制系统工作原理,硬件模块的功能设计以及相互作用,研究分析一般智能搬运小车的硬件模块组成和普遍用途,并设计出一种简单而基础功能完整的智能搬运小车理论方案,主要包括控制模块所需的单片机、灰度传感器、舵机、颜色识别传感器、电机等功能模块的选型及其依据。基于STM32芯片,采用C语言编程,为实现智能搬运小车自动循迹、物块的颜色识别、抓取等功能,编写了相应的程序,并进行了程序测试。结果表明,智能搬运小车的控制系统可通过程序的不断调整优化,实现灵活地运行和功能优化。所提设计方案可用于科技馆直观展示一般智能小车控制系统的工作原理以及C语言编程的应用和优势。
关键词:STM32;颜色识别;循迹;编程
0引言
目前网上购物发展迅速,导致物流量大涨,物流行业进入迅猛发展阶段。但传统的分拣模式在人力需求、效率和准确性等方面均已不能满足物流行业的需求,物流行业逐渐向智能化、自动化发展,此时智能物流机器人就应运而生[1]。另外,来科技馆体验的观众在实际生活中经常遇到快递的寄取,容易对搬运功能机器人产生兴趣。科技馆有必要提供与此有关的科普信息。目前智能搬运小车一般是以STM32芯片为控制系统平台,其用途有物资搬运[2]、竞赛[3]、教学[4]、交通[5]等领域。智能搬运小车智能化的核心之一是通过模块化编程[6]发挥多样化功能,一般基于STM32的多任务系统的设计[7-8]。本文设计的智能搬运小车可以实现物品按照特定路线进行自主抓取搬运,其具体结构包括智能小车整体结构理论设计、灰度循迹、颜色识别程序设计,能实现循迹、识别物块、抓取等过程。可为智能搬运小车的整体构成、硬件设计、控制程序设计、智能化功能开发等科普和研究提供参考。
1整体设计原理
智能搬运小车以STM32作为主控芯片,利用电流的方向来控制电动机的正反,并对电动机的速度进行控制,从而使智能小车前进、倒退、左右转向等。用颜色识别区分物块颜色,用舵机加机械结构抓取物块。
1.1控制系统及实现功能
本文重点研究的是控制程序(循迹、物块识别、抓取搬运)的设计,根据搬运智能小车的功能进行程序的编写和运行测试。所设计的控制程序能实现以下功能:(1)实现智能小车自动循迹;(2)能自动识别物块颜色并进行抓取。
1.2整体构件
智能搬运小车控制系统在无人车控制的基础上加上颜色识别模块和抓取装置。图1所示为上述控制模式的控制原理。
搬运智能小车硬件主要由STM32主控芯片、颜色识别模块、搬运智能小车车架、电机驱动模块、灰度循迹模块、抓取装置、电源等部分组成。
主控芯片模块:采用STM32,STM32微控制器采用了主流的Cortex内核,成本低,抗干扰能力强,函数库丰富,功耗低。拥有自带的函数库,支持C语言编写。支持在软件上修改调试程序,然后直接下载到单片机中,不需要对硬件电路进行修改,自由度高并且使用方便[9]。
颜色识别模块:颜色识别模块采用TCS230光电传感器。TCS230是彩色光电传感器,它由彩色光电变频器利用硅光电二极管和电流频率发生器组成CMOS集成电路,再加上红、绿、蓝3种滤光片组成,具有数字相容性。TCS230的反应速度快,输出为数字信号,使用方便,有较强的抗干扰能力[10]。
抓取装置:抓取装置由4组EMAX ES08A模拟舵机和抓钩组成,舵机旋转角度为180°,所以用两个舵机复合便可以实现两自由度的180°内的自由旋转。这符合本文中小车设计的需求,并且抓钩质量为4 g,可以保证旋转的精度要求。
电动机的驱动电路组件:电动机的驱动电路组件由电刷、换向片、绕组线圈和一对主磁极组成。改变电机上直流电压的极性可以改变电动机的方向,改变电压可以控制直流电动机的旋转速度。单片机的输入功率较低,需要电动机的驱动模块才可以完成以上的功能。
2硬件结构设计
搬运智能小车采用3层复合结构。主体为一块完整的车模底座,底座下面有4个位孔用于安装灰度传感器,前端有TSC230颜色传感器的安装位置,并且用另外一块打印板进行加固和定位。为保证传感器安装精准,预留了一些孔位方便安装。底板之上用铜柱架高,给主板和电源以及其他的硬件预留足够的空间。整车为三轮结构,左右两端各安装一个电机来驱动整车的行进,车尾安装万向轮进行转弯和旋转。图2所示为智能小车模型结构设计。
2.1主控芯片
主控板核心为STM32F407VET6,拥有32位高性能ARM核心,工作频率168 MHz;存储空间为192 KB RAM、512 KB FLASH;包含70个IO引脚、16路PWM.16路ADC(12位精度)、6个UART接口;同时还拥有FSMC.DCMII2S.CAN.Ether net,SDIO.SWD.USBOTG等专用外设接口,其中的DCMI接口单独引出可以直接接入OV2640/0V7670模块使用;1个USB转串口设备接口可以配合开发工具实现一键下载,使用非常方便。该芯片满足各个部分硬件连接需求,同时PWM接口能够更简单驱动电机的精确转动,同时有USB接口和UATR接口,支持不同的程序上传和下载方式。
2.2颜色识别模块
利用单片机对传感器采集的颜色信号进行处理,可以有效地区别不同的颜色[11]。目前的颜色传感器通常是在独立的光电二极管上覆盖经过修正的红、绿、蓝滤光片,然后对输出信号进行相应的处理,才能将颜色信号识别出来,本文选用的TCS230能够较好地完成任务目标,TCS230共有64根光电二极管被分成4种,其中16个是具有红色滤光片的光电二极管;16个是具有绿色滤光片的光电二极管;16个光电二极管:一种是带蓝光的滤光片,另一种是没有滤光片的,它可以把所有的光信息都传输到晶片内部,这样就可以把入射光的不均匀性降到最低,提高了色彩辨识的准确度;而16个同色光电二极管是平行排列,且在二极管中均匀分布,能有效地克服色彩位置上的错误。
2.3电机驱动电路
选用AQMH2407ND的驱动板,相较于其他的驱动电路,AQMH2407ND比较稳定并且拥有PWM调试功能,其优点如下:
(1)体积非常小,只有5.5 cm×5.5 cm;
(2)能提供7~24 V的电动机电压及低电压保护;
(3)具有双通道马达,输出功率为7 W;
(4)控制电路类似于L298N马达的驱动电路,每个电路都支持三线控制,正、反向和刹车;
(5)启动信号可以与PWM相结合,而正反相控制信号可以串行限制开关;
(6)采用灌流驱动模式的控制信号,可支持大部分MCU的直接驱动;
(7)可利用光耦器隔离所有的控制信号。
其中以L298N单片集成芯片为核心,利用直流减速器对智能小车左右车轮进行驱动。L298N是一种用于二相、四相电动机的特殊驱动,其内置有2个H桥型双全桥驱动电路,可以实现两个电动机的同步控制,而且程序设计简单。
2.4循迹模块
本设计的场地要求沿着黑白的固定路线进行行走,同时为了保证循迹的稳定性和精确性选用能识别颜色并且精准度好的八路灰度传感器。该方法采用了基于不同颜色的探测方法,在不同的光线下,反射的强度不同,从而实现了色彩的深度检测。由于外部光源的存在,最好的探测距离是15~50 mm,(距离太高必须进行屏蔽)。LED的光照射到探测表面,光敏二极管则会探测到反射光的强度,并把它转化成单片机能够识别的电信号。该电信号为模拟值,由MCU进行二值化处理,即给出一个电平的界限,在该电压超过某一值时,该值为高电平(或低电平)。因此,可以将电压比较器用作基准电压。
2.5舵机电机选型
舵机选用ES08A仿真舵机,成本低廉、精度高、能耗低。该舵机有3根导线,分别是电源线、地线和信号线。该舵机采用PWM脉冲信号控制[12],通过编程脉冲控制,实现了舵机旋转角的控制。该舵机由直流电机、减速齿轮组、传感器及控制回路构成。输出的转动角由发出的信号决定。
一般来说,舵机的转动角度存在最大值(如180°)。本控制系统使用的是直流电动机,电动机的功率必须达到搬运智能小车的动力,而且在行驶过程中必须停止抓取,电动机会出现多次启动,所以在选择电动机时要考虑到电动机的过载和启动能力。
3软件设计
本文设计的控制系统根据其设计要求及实现功能,在编写主程序时,首先要明确其控制逻辑的次序,绘制程序的控制流程,以降低程序设计中的逻辑错误。程序控制流程图如下图所示。
图3展示了搬运车的工作流程,给出了程序编写的总体框架。单片机早期采用汇编语言编程,后来普遍使用C语言编程[13]。本文主要控制程序在于循迹和颜色识别,具体程序设计编写如下。
3.1智能小车循迹程序主要程序代码如下。
void trackstraight()//追踪直线{
if(lGray==1&&rGray==0)//如果偏左调速
{
TIM_SetCompare1(TIM8,500);//PWM调差速左轮TIM_SetCompare2(TIM8,800);//右轮
//Delay(1000);}
else if(lGray==0&&rGray==1)//如果偏左调速{
TIM_SetCompare1(TIM8,400);TIM_SetCompare2(TIM8,600);Delay(1000);
}
else gostraight();}
trackstraight()设计用于控制机器人的左右轮,以保持其沿直线路径行进。它基于两个条件判断——lGray和rGray的值,这两个值代表了左右两侧灰度传感器检测到的信息,用以判断机器人是否偏离直线轨迹。该程序的具体运行说明如下。
如果lGray==1且rGray==0,意味着左侧传感器检测到的是灰色(或特定颜色/非引导线),而右侧传感器没有检测到(假设在白色背景下)。这种情况下,机器人会认为自己偏向左边,因此需要减慢左侧轮子的速度,同时适当加速右侧轮子,使得机器人向右调整方向回到直线路径上。通过设置TIM_SetCompare1(TIM8,500)减少左轮速度,而TIM_SetCompare2(TIM8,800)增加右轮速度来实现这一目的。
反之,如果lGray==0且rGray==1,说明机器人偏向右边,这时需要减慢右侧轮子,加速左侧轮子,以向左调整方向。通过TIM_SetCompare1(TIM8,400)和TIM_SetCompare2(TIM8,600)来调节轮速。
如果lGray和rGray都为0或都为1,意味着两侧都处于相同条件(可能都位于引导线上或外),则直接调用gos‐traight()函数,该函数让机器人保持当前速度直线前进。
另外在上述程序中,需要补充说明的是:TIM_Set‐Compare1()和TIM_SetCompare2()函数用来控制PWM(脉冲宽度调制)信号,进而调节左右电机的速度。数值大小直接影响电机转速。
3.2激光传感器识别程序主要程序代码如下。
上述程序功能为激光传感器读值并且赋予两个不同变量,里面两个激光传感器对应单片机的串口为pin0-1.
void jiguang(){
if(lLaser1==0&&rLaser1==1){//左侧检测到黑线(设定0为检测到)
Delay(50);//短暂停顿
}else if(lLaser1==1&&rLaser1==0){//右侧单独检测到黑线stop();//停止
Delay(5000);//长时间延迟}
只有当左右两个激光传感器同时检测到黑线时,说明到达指定位置,智能小车停止前进,进行下一步工作。
3.3 TCS230传感器的颜色识别程序主要程序代码如下。
void Normal_Work(void){
TCS3200_Color_Read();//读取颜色printf("R=%d",R);
printf("G=%d",G);
printf("B=%d",B);
if(R>G&&R>B&&R>80){
color=0;//hong}
Else if(G>B&&G>R&&G>80){
color=1;//lv}
else if(B>R&&B>G&&B>80){
color=2;//lan}
else if(R<100&&G<100&&B<100){
color=3;//hei
}
else
color=4;//bai
}
TCS3200_Color_Read()为传感器的颜色读取函数,当数值读取后printf("R=%d",R)、printf("G=%d",G)、printf("B=%d",B),即分别将绿红蓝三原色的数值显示出来。用if逻辑加数值的比较将不同的颜色分为01234分别代表红色、绿色、蓝色、黑色和白色。具体运行步骤如下。
第1步,颜色读取。首先调用TCS3200_Color_Read()函数来读取当前检测到的颜色值,这个函数应该是外部定义的,负责与TCS3200颜色传感器通信并获取RGB三色的亮度值。
第2步,输出颜色值。通过printf语句输出当前读取到的红色(R)、绿色(G)、蓝色(B)的亮度值。这有助于调试,了解传感器实际接收到的数据情况。
第3步,颜色判断逻辑。
如果红色值(R)大于绿色(G)和蓝色(B),并且大于80(设定的一个阈值,用于过滤掉较暗的颜色或噪声),则判定为红色(color=0)。
如果绿色值(G)最大且大于80,则判定为绿色(color=1)。
同理,如果蓝色值(B)最大且大于80,则判定为蓝色(color=2)。
若R、G、B三色值均小于100,这可能表示颜色非常暗或者传感器未能有效识别颜色,此时判定为黑色(color=3)。
上述条件都不满足时,默认判定为白色(color=4)。在上述程序中,需要补充说明以下几点。
(1)阈值80并非固定,实际应用中可能需要根据环境光线条件和传感器性能进行调整,以优化颜色识别的准确性。
(2)color变量是整数,用来标记识别出的颜色类别,其中0~3分别对应红、绿、蓝、黑,4代表白。这种标记方式简单明了,便于后续程序根据颜色执行不同操作。
(3)在实际应用中,可能还需要考虑环境光线变化对颜色识别的影响,以及进行更精细的颜色区分逻辑,特别是在颜色边界不那么明显的情况下。
4测试验证与结果分析
4.1程序测试
将已经编译好的循迹程序通过ST-LINK[14]烧写至单片机中,在主界面端设置了串口调试模块,将无线模块的引脚同单片机连接后,实时读取发出的控制指令,以此测试软件是否设计成功。具体步骤是,首先设置特定参数,然后点击发送数据,检查软件的接收区是否能接收相应的指令。以此类比,接着测试激光传感器识别程序和颜色识别程序是否正确。测试结果表明,通过运行上述编写的程序,接收端能够收到相对应的指令。
4.2结果分析
智能小车的控制程序能够运行,解决了软件相关的问题。硬件方面则还需要注意一些问题。例如,一般情况下,激光传感器易受外光源干扰、受限于道路信息、易损坏等[15-16]。在实现自动循迹和指定位置停车时,容易出现偏差。为提高小车运行的准确性,需要对实验环境进行额外的设置,比如去掉无关的光源、通信干扰等。
5结束语
本文设计了一种智能搬运小车的整体方案,可以实现物品按照特定路线进行自主抓取搬运,其采用STM32单片机,采用八路灰度计、激光感应器对黑线进行扫描,多路PWM舵机的协同输出控制。本文重点对小车控制系统中的软件程序进行了分析和编译,使其具有自动循迹、物块颜色识别、抓取等一般功能。基于STM32的控制系统具有设计简单[17],实施成本低、运行稳定、易控制等特点。智能车在实际生活中应用领域比较广泛,更丰富的功能开发,不仅仅是硬件的设计,还应该关注控制程序的设计。C语言作为近年来越来越普遍应用于单片机编程,本文研究其在智能化功能开发方面的作用,具有重要的意义。
参考文献:
[1]胡振圆,王路平,付睿.智能物流小车底盘系统设计[J].科技创新与应用,2022,12(7):38-40.
[2]徐贤,高小慧,李羽晴,等.基于STM32单片机的智能送药小车设计[J].电子制作,2024,32(6):37-40.
[3]彭周萍,王丽芳,满达虎.基于STM32控制的竞赛用智能物流搬运机器人设计[J].轻工科技,2022,38(3):82-84.
[4]冼进.基于STM32的教学智能小车设计与试验[J].微型电脑应用,2022,38(9):152-155.
[5]刘学文.基于STM32单片机的智能小车控制[J].现代制造技术与装备,2019(1):192-193.
[6]张敬鸿.基于STM32的可编程模块化机器人设计[J].信息与电脑(理论版),2022,34(8):126-129.
[7]赵宇科,高红亮,胡惠敏,等.基于STM32的多任务系统的设计与实现[J].湖北师范大学学报(自然科学版),2021,41(3):64-68.
[8]钟毅,陈国凡.基于STM32的自动报废抓片系统的设计与实现[J].装备制造技术,2023,(12):241-244.
[9]姬冠妮.单片机开发应用技巧探讨[J].信息记录材料,2022,23(2):209-211.
[10]李静,梁鹏超.基于TCS230传感器的颜色识别系统设计[J].计算机与数字工程,2017,45(5):984-987.
[11]冯婷,钟澔.使用颜色传感器TCS230的色卡检测研究[J].单片机与嵌入式系统应用,2016,16(6):36-39.
[12]周满,李冬辉,王立献,等.电动舵机单闭环控制系统研究与设计[J].微电机,2023,56(8):16-20,42.
[13]高瑞丽,张爱荣,刘霞.基于STM32嵌入式系统四种编程方法的探究[J].软件,2022,43(4):158-161.
[14]程望斌,陈久,杨路思,等.自动导引小车的优化设计与实现[J].湖南理工学院学报(自然科学版),2021,34(1):45-49.
[15]王玲玲,孙艳丽,王康.基于激光传感器的路径识别算法与实现[J].电子设计工程,2016,24(4):26-28,31.
[16]单鹏,蔡牟辰.基于改进模糊PID算法的AGV控制系统抗干扰优化[J].装备制造技术,2023,(12):206-209.
[17]王嘉俊.基于STM32的智能小车控制系统设计[J].电子制作,2018(17):21-22,25.
后台-系统设置-扩展变量-手机广告位-内容正文底部 |
-
<< 上一篇
下一篇:没有了!