利用Arduino控制板的光引导运动小车设计
2011-09-19崔才豪张玉华杨树财
崔才豪 张玉华 杨树财
(哈尔滨理工大学自动化学院1,黑龙江 哈尔滨 150080;哈尔滨理工大学工程训练中心2,黑龙江 哈尔滨 150080)
0 引言
在人类的生产生活中,很多货物的运输路线在短时间内是固定的。因此,若为满足这种运输要求而铺设轨道或增设传送带,就会增加相应的生产成本,降低运输的灵活性。
传统的运输方式是依靠人驾驶装卸车运输货物[1]。人在货物运输中的主要作用就是控制车的启动、停止、运动方向和速度,这类相对简单的劳动可以通过改进自动控制技术来实现。本文提出了利用普通光源来引导小车运动的设计方案。这种利用光信号引导小车运动的设计,节约了人力,并提高了生产效率和工作的灵活性。
1 主要技术核心
1.1 光引导技术
光是沿直线传播的,物体接收光能的大小与受光面积成正比,单位面积所获得的光能称为光强。光电阻传感器是将光信号转换成为电阻变化的一种传感器[2]。这种测量方法具有结构简单、非接触、可靠性高、精度高和反应快等优点,因此,被广泛地应用于自动检测系统中[3]。光引导技术就是基于上述原理,通过光电阻传感器检测小车在不同方向上的光强,从而判断出小车引导光源的方向,实现以光源为基准的趋光运动。
本设计采用光电阻传感器对光信号进行采集。在光源引导方向上,分别设置1号、2号、3号光电阻传感器,其中2号传感器和小车轴线平行。3个传感器轴线所构成的夹角ω1和ω2保持相等,光源引导信号的采集如图1所示。
图1 信号采集示意图Fig.1 Schematic of signal collection
设1号和3号传感器分别与光源引导方向形成的夹角分别为θ1和θ2,当小车运动方向偏离光源引导方向时,小车的实际运动方向与光源的引导方向产生了一个偏差角。小车偏离光引导方向示意图如图2(a)所示。
设小车的实际运动方向与光源的引导方向产生的偏差角大小为Δθ。此时调整小车的运动方向,就等价于调整偏差角Δθ,使其平衡在零度,从而使小车的运动方向和光源引导方向一致,达到了光引导的效果。小车恢复光引导方向示意图如图2(b)所示。
图2 小车光引导示意图Fig.2 Schematic of the light-guided car
1.2 运动控制技术
小车运动控制系统设计的核心在于如何使小车以最快的速度从偏离光引导的状态中修正过来,从而恢复到正常的运动状态,并且不会有较大的超调或调整时间。
对于小车的方向控制,可以采用Δθ为调节变量,通过Andriod控制板调节驱动电机的PWM信号,改变电机输出功率,从而控制左右电机的转速,以实现方向的修正。控制算法可以使用经典的PID控制方法[4]。PID就是利用小车与引导光源的方向偏差,通过比例、积分和微分作用控制电机的运动。当电机的转速和方向经过调节后,小车对光引导信号就会有较快的反应速度和较高的调节精度。由于小车在路面粗糙度或负载变化时车轮转速误差变大,因此,采用红外线反射式脉冲编码器对小车的转速进行测量。这种传感器可以将测量信号反馈给Andriod控制器,控制器根据传感器返回的数值,实现对小车速度和位移的监控。闭环控制系统由传感器与直流电机控制系统构成,它能使小车运动稳定精确[5]。
2 系统的硬件设计
2.1 Arduino控制板
Arduino是一块基于开放源代码的接口板,包括12通道数字GPIO、4通道PWM输出和6~8通道的10 bit ADC输入通道。本设计中采用Arduino-duemilanove控制板,它的核心是一片AVRmega168单片机。
2.2 光信号采集和方向运算
光引导信号发出的引导光照射在光电阻传感器上,从而改变了光敏电阻的阻值,进而改变了光敏电阻两端的电压值。光敏电阻的两端电压经过分压电阻和运算放大器进行信号调整后,由Arduino控制板进行A/D转换[6]。3个传感器产生3组数字量,比较后可以得到1个偏差值[7]。运动控制系统根据偏差值调整小车的运动方向。
2.3 直流电机控制
小车采用双直流电机加万向轮的驱动方式,通过控制左右直流电机来控制小车的前进、后退或左右转向。直流电机采用直流电机驱动芯片L298。双路全桥电机驱动芯片L298的最大输出电流为4 A,具有过温保护功能和较高的噪声抑制比。2路输出正好可以满足小车的左右直流电机的驱动要求。L298的主要引脚功能及其主要逻辑功能分别如表1和表2所示。
表1 L298主要引脚功能Tab.1 Functions of the main pins of L298
表2 L298主要逻辑功能Tab.2 Main logical functions of L298
表2 中:L=Low;H=High;X=Don’t care。
本设计使用Arduino控制板上的数字输入输出端控制驱动芯片的 Input1、Input2、Input3、Input4引脚,从而控制直流电机的旋转方向;使用Arduino控制板上的PWM输出引脚控制驱动芯片的EnableA和EnableB引脚,最终实现了2路直流电机控制[8],进而控制了小车的运动方向。
利用红外线遇黑线被吸收、遇白线被反射的原理,在小车2路车轴上分别设计2组红外反射式传感器,将小车的转速和位移以脉冲的方式反馈给Arduino控制器。控制器将脉冲信号在单位时间计数后,就可以得到小车的实际速度。将实际速度和设计输出速度相比较后,可以实时调节小车的速度。系统硬件结构如图3所示。
图3 系统硬件结构图Fig.3 Hardware structure of system
3 系统的软件设计
3.1 Arduino IDE集成开发环境
Arduino具有类似于Java和C语言的IDE集成开发环境,其编程语言类似于C语言,用户可以通过USB接口直接进行编程和通信。
3.2 系统软件流程设计
光引导小车首先需要对自身周围环境进行检测,判断引导光源的方向,然后根据引导光源的强弱,以适当的速度向光源运动。当光源强度达到预定值时,默认已经寻找到了光源,小车即停止运动,进入等待状态;当引导光源发生变化时,退出等待状态,进入光引导状态,直到再次找到光源[9]。程序设计流程图如图4所示。
图4 程序设计流程图Fig.4 Procedure flowchart
程序主要功能是:首先由3路传感器对光引导信号进行A/D采集,然后由1号和3号传感器的检测值分别与2号传感器的检测值作差,由差值的正负来决定小车的行走方向是偏左还是偏右,最终根据差值的绝对值大小来决定需要调整的方向角的大小[10]。主要程序代码如下。
以上程序中,Lleft(1)、Lmiddle(1)和 Lright(1)为光敏传感器检测函数的返回光强值;PID(number)为速度设置函数根据number值返回的最佳调节参数;turn_left(number,n)和 turn_right(number,n)为小车调整角度函数;number为调节转速n的位置标号。
4 试验结果
在实验室条件下,光引导运动小车实现了3种常规运动,即直线运动、曲线运动和折线运动,3种运动路线如图5所示。
图5 3种运动路线Fig.5 Three of the moving routes
当在多光源条件下进行试验时,非主光源的强度超过引导光源强度就会影响小车的引导,小车运动的稳定性就会被破坏,进而丧失光引导功能。因此,本设计提高了对试验环境中的光引导信号的要求。
5 结束语
本文采用Arduino控制板为核心设计光引导小车,简化了软件编程和硬件电路的设计,有效地提高了小车在运输过程中对非固定路线的适应性,在实际应用中可以起到降低成本和减少工人劳动量的作用。若继续提高传感器精度和数量,可以实现更加精确的光引导效果。
[1]梁佳海,黄雪燕.基于光引导的小车自动寻轨技术研究[J].钦州学院学报,2008,23(3):38 -40.
[2]常见生,石要武.检测与转换技术[M].北京:机械工业出版社,2008:187 -188.
[3]姚文山.光敏电阻器原理及检测方法[J].家电检修技术,2007,10(1):61.
[4]胡寿松.自动控制原理[M].北京:科学出版社,2009:21 -24.
[5]赵红飞,陆静平,蒋达.电动汽车用永磁无刷直流电机PID控制器的设计及仿真[J].中国科技信息,2010,20(10):168 -169.
[6]李全利.单片机原理及接口技术[M].北京:高等教育出版社,2009:47 -59.
[7]王宝祥.信号与系统[M].哈尔滨:哈尔滨工业大学出版社,2005:45 -85.
[8]吴镇扬.数字信号处理[M].北京:高等教育出版社,2004:25-40.
[9]田泽.嵌入式系统开发与应用教程[M].北京:北京航空航天大学出版社,2005:40 -42.
[10]戴仙金.51单片机及其C语言程序开发实例[M].北京:清华大学出版社,2008:430 -450.