自动分拣小车总体方案
分拣小车的任务是:小车来到上货点并放上货物后,经过扫码识别和服务器判断,给小车发送指令信息,接收到指令后小车将货物分拣到指定位置。
小车总体功能结构
本设计需要的模块有:循迹避障小车模块、定位卸货模块、无线交互模块。
主控单片机:采用STC的STC89C52RC,为8051内核,内含Flash E2PROM存储器,为CMOS产品,芯片内部存续存储空间的大型为8KB。单片机内部RAM随机读写存储器大小为512B。选用的工业级双列直插式封装型号的单片机。
除此之外,STC89C52单片机具有以下标准功能:4个外部中断,看门狗定时器,MAX810复位电路,16 位定时器3个,全双工串行口,7向量4级中断结构一个。可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲时CPU 停止工作,可允许串口、RAM、中断、定时器/计数器继续工作。掉电保护模式下,冻结振荡器,RAM里的内容被保存,一切工作停止,直到下一个硬件复位或中断。
51系列单片机在市面上综合的成本较低,相比于STM32,其开发的简单应用更为低价。对比其他八位单片机,51系列有乘法和除法指令,RAM区间有一个双重功能的地址区间,从硬件到软件有一套完整的位处理器。因此在市场中还是占有很大份额。
寻迹避障硬件设计
实现小车基础的循迹避障功能,需要用到驱动系统提供小车行驶的动力,和循迹避障系统判断小车执行的行驶指令。
驱动系统硬件设计:根据本设计的思路,由单片机根据所检测的数据进行判断,然后执行对应的功能,实现对自动分拣小车的智能控制。在此过程中,动力系统为小车提供动力,以实现在各功能中的小车的移动。
动力系统的选用:
方案一:V-M直流调速系统。V-M双闭环直流调速系统是工业生产中使用最多的传动装置之一,常用于机床、冶金等许多机械领域。具有调速范围广、稳定性好、响应快、抗干扰能力强等优点,在直流调速系统中最为成熟。其缺点是只能单向导通,运行要求条件严格,且对其他电子设备可能会造成干扰。
方案二:PWM直流调速系统。PWM直流电机普遍用于单片机或其他微处理器当中,是利用数字输出对模拟电路进行控制的技术,节省能源,成本较低。实现了用数字方式控制模拟信号,降低了成本和功耗。
分析V-M系统和PWM系统,对比两者,PWM具有以下优点:
(1) PWM系统功耗较低,在同样的电流下,发热损耗比V-M系统低。
(2) PWM系统开关频率高,快速响应性能好,调速范围高[12]。
(3) PWM系统控制较为方便,设计简单,适用于单片机小板的搭配使用。
(4) 可设计成可逆型PWM系统,实现电机反转,小车倒退。
综上所述,采用可逆PWM直流调速系统。安装简单,控制方便。并使用市面上常见的L298N驱动芯片驱动电机工作。
直流电机没有正负极,但为了方便设计,我们模拟电机某同一端为正,另一端为负极。该设计将芯片的5、6、7、10、11、12接脚接到51单片机的P1.1、P1.0、P1.2、P1.4、P1.3、P1.5接口。芯片的2和3输出口接到左电机正负极,13、14接到右电机正负极。电机需要4节1.5V5号电池带动,外接一个电池盒用来放置电池。
当单片机P1.0信号为“1”,左电机输出电路开关打开,P1.1输出信号“1”,P1.2信号“0”,OUT1口输出一个VCC高电平,OUT2输出低电平0V,左电机正转。同样,P1.3信号“1”,P1.4信号“0”,P1.5信号“1”,则右电机反转。这样便实现了小车前进。在程序中,可以这样定义:
1)执行左电机正转:{ P1_0 = 1 ; P1_1 = 1 ; P1_2 = 0 }
2)执行左电机停转:{ P1_0 = 0 ; P1_1 = 0 ; P1_2 = 0 }
3)执行左电机反转:{ P1_0 = 1 ; P1_1 = 0 ; P1_2 = 1 }
4)执行右电机正转:{ P1_3 = 1 ; P1_4 = 1 ; P1_5 = 0 }
5)执行右电机停转:{ P1_3 = 0 ; P1_4 = 0 ; P1_5 = 0 }
6)执行右电机反转:{ P1_3 = 1 ; P1_4 = 0 ; P1_5 = 1 }
循迹系统的硬件设计:本设计中采用的红外循迹模块为TCRT5000红外反射传感器。该传感器的工作原理是依靠红外发射二极管不断发射红外线,经物体反射回接收管。接收到的信号经过比较器电路处理,输出数字信号。使用者可通过旋钮调节检测的灵敏程度,在该设计中,用于检测是否行驶在浅色地面布置好的黑线上,进而通过程序判断调整电子旋转来保持循迹行驶。
上图为TCRT5000红外反射传感器原理图,图中红外对接管用于发射和接收红外信号。平时电源接通时,电源指示灯有电流通过,指示灯亮。图中10K的可调电阻就是芯片上的可调旋钮,用于改变阻值而调整感应的灵敏度。LM3939是一个比较器,当正端电压大于负端,输出高电平,开关指示灯不亮。当正端电压小于负端电压,输出低电平0,开关指示灯形电流流通,灯亮。在实际中,当红外线被黑线吸收,接口管未接收到足够红外线,接收管未接通,则比较器正端电压一定大于负端电压,输出高电平。当传感器在白色地面上,红外接收管接收到红外线,接收器形成通路,比较器正端电压为0。而负端连接滑动变阻器,其电压一定大于0,所以比较器输出0,开关指示灯亮。根据其检测到黑线输出1,未检测到黑线输出0的特点,左循迹传感器输出连接单片机P3.6接口,右循迹传感器输出连接P3.7接口,在代码中可这样设计:
1)判断两边未检测到黑线:{P3_6 == 0 ; P3_7 == 0 } 执行 前行
2)判断左边检测到黑线:{P3_6 == 1 ; P3_7 == 0 } 执行 左转
3)判断右边检测到黑线:{P3_6 == 0 ; P3_7 == 1 } 执行 右转
4)判断两边都检测到黑线:{P3_6 == 1 ; P3_7 == 1 } 执行 停车
避障系统和循迹系统所采用的模块原理一样,也是采用同样的红外发射和红外接收的方法工作。当发射管发射出的红外线遇到障碍物,反射回来的红外线被接收管接通。比较器输出低电平0;当未遇到障碍物,接收管未接通,比较器输出高电平1。该模块检测距离约2~30cm,检测角度35度,可通过调节旋钮滑动变阻器来调整检测的距离。
本设计采用红外发射式传感器仅用于检测障碍物,市面上虽有更好的超声波传感器等模块,但由于小车模拟环境是在仓库等工作环境,甚至在无人的仓库中工作,所以用红外检测障碍物就已经足够了。另外,使用自动避障行驶容易造成仓库工作中小车群组的意外失误,可能一个小车避障成功,其他的就得重新规划路线,增大了管理系统的负担。所以为了方便方便总控系统的线路计算,本设计检测到障碍物后只执行停车指令,用红外检测模块就已足够。
本设计中左避障传感器输出接P3.4,右避障输出端接P3.5,在程序中可以这样设置:
(1)判断左方遇到障碍:{ P3_4 == 0 ; P3_5 == 1 } 执行 停车
(2)判断右方遇到障碍:{ P3_4 == 1 ; P3_5 == 0 } 执行 停车
(3)判断两方都遇到障碍:{ P3_4 == 0 ; P3_5 == 0 } 执行 停车
定位卸货硬件设计
定位卸货系统由定位系统和舵机卸货系统构成,定位系统用来判断小车是否行驶到指定的卸货点,舵机卸货系统则是用于操作货物卸下。
定位系统的硬件设计:定位系统采用光敏电阻传感器和LED发光二极管搭配使用组成定位点的识别系统,设计中使用4个LED发光二极管和一个光敏电阻传感器,实际使用方法如图4-1所示,在路线中设置四个点,各点适当位置放置一个LED发光二极管,小车侧边安装一个光敏电阻传感器。四个定位点位置模拟仓库中的上货点、A区、B区、C区。当小车到达第一个点,光敏电阻传感器感应到光线达到标准,输出低电平。然后判断wifi信号是否存入变量中,如果wifi变量为0,则小车停车。等上货后,wifi变量不等于0,光敏信号为0,则小车循迹前进。当光敏电阻传感器感应不到标准强度光线后,输出信号“1”,此时对比变量,给另一个变量值加一。如此循环,直到小车到达wifi信息所对应的定位点后,停车卸货。
卸货系统的硬件设计:
采用SG90 9g型号的舵机,用于执行卸货动作。当卸货条件达成时,舵机子程序驱动舵机旋转90度,将放置在称重模块上的货物推下。动作完成后,卸货功能完成,舵机复位,并将变量归零,程序又开始循环变量判断,小车继续循迹绕回初始点停车。下图小车第二层的舵机安装平面图,将wifi模块放到第二层避免其他干扰。
驱动舵机转动需要通过信号线给舵机一个周期性的直流偏置电压,舵机会根据输入的电压和基准电压进行比较,得到电压差输出,根据电压差正负确定旋转方向。另外,根据输入方波的周期来判断旋转的角度,该参数t使用定时器0来计数,该单片机晶振计时为每次0.1ms,计数的次数决定参数t的周期。
让设计中舵机旋转90度,需要输入一个周期为1.5ms的方波,待转动完成后,再输入一个为0.5ms的方波,电机开始逆转复位。
无线传输与称重系统硬件设计
无线传输系统意为通过无线连接,客户机与服务机进行信息交换,并对传输的数据进行处理。本系统分为WIFI无线模块、红外遥控模块、称重模块。
WIFI传输功能的设计:采用ESP8266WIFI模块。该设计使用android手机app扫描货物上的条形码或者二维码,识别出数字后,根据选择的区间范围发送给esp8266模块数据,单片机获取传来的wifi数据,并称重上传数据,然后判断在哪个LED定位点停车卸货。此系统需要用到ESP8266模块、手机APP、打印好的条形码/二维码来构成WIFI无线传输系统。
红外遥控功能的设计:意为人工处理临时问题时的手动控制方式,在单片机初始化后,或者中断期间通过按钮切换自动和手动模式,设计采用的是IR1838型号的红外接收管。红外遥控通过遥控器发射的红外信号,让小车实现遥控停车、直行、转弯、倒退四个简单动作,使用通用的21键红外遥控器来进行遥控操作。
称重传感器功能的设计:称重传感器选择的是桥式压力应变传感器和型号为hx711的24位A/D转换器芯片。hx711模块专用于高精度电子秤,其集成了所需的外围电路,抗干扰能力强,能直接连接单片机使用。当单片机判断获得的wifi数据符合后,执行称重功能,获得24位AD信号后,通过公式计算重量。再将条码数据和计算结果发送到手机端,手机程序根据获得的数据在列表框中加入数值显示。随后小车开始行驶,开始下一流程。下图为称重模块的功能结构图:
程序设计与调试
主函数的设计:
void main() //主程序入口
{
bit ExeFlag=0; //定义可执行位变量
EX0=0; //同意开启外部中断1
IT0=1; //设定外部中断1为低边缘触发类型
EA=1;
TMOD=0X01;
TH0= 0XFc;//1ms定时
TL0= 0X18;
TR0= 1;
ET0= 1;
Init_Tim1(); //串口初始化子程序
#if(0) //里面数值填0代表是手机与Wifi模块直连模式,里面数值改为1代表是手机与家庭路由器连接
SendString("AT+CWMODE_DEF=1rn"); //进入模式1 Station
HAL_Delay(100); //延时100ms
SendString("AT+CWJAP_DEF="SCY","bilibili"rn"); //连接家庭路由器
HAL_Delay(3000);
#else
SendString("AT+CWMODE_DEF=2rn");//进入模式2 SoftAP
#endif
HAL_Delay(100);//延时100ms
SendString("ATE0rn");//关闭回显
HAL_Delay(100);
SendString("AT+CIPMUX=1rn");//wifi模块多连接模式
HAL_Delay(100);
SendString("AT+CIPSERVER=1,333rn");//建立TCP服务器
while(1) //程序主循环
{
if(P3_3 == 0)
{
delay_nms(10);
if(P3_3 == 0)
{temp++ ; while(!P3_3); } //检测到按钮按下
BUZZ=0; //蜂鸣器发出“滴”声响。
delay(50);
BUZZ=1; //响50ms后关闭蜂鸣器
}
if(temp > 2) //如果按下超过2次,即第三次还原成1
{temp = 1; }
switch(temp)
{
case 1: Car_Avoidance();EX0 = 0;break; //执行自动模式子程序
case 2: BUZZ = 1; EX0 = 1;break; //打开中断,解码红外遥控指令
}}}