《运水机器人系统(论文+电路图+程序).doc》由会员分享,可在线阅读,更多相关《运水机器人系统(论文+电路图+程序).doc(30页珍藏版)》请在三一办公上搜索。
1、目录1 设计任务分析12 方案设计与论证12.1 三套可行方案选择12.2 最佳方案论证22.2.1 电机选择22.2.2 运水量测量22.2.3 自动给水装置与机器人的通讯32.2.4 路面黑线检测32.2.5 其他方案论证32.3 最终系统方案33 系统电路分析与软件说明43.1 电路分析43.1.1 黑线检测电路43.1.2 分布导线水量测量法43.1.3 机器人与自动装水装置通讯模块53.2 软件说明54 数据测试65 创新总结65.1 系统设计创新点65.2 心得体会7附页8摘要:本运水机器人从实际应用出发,充分融入机电一体化的思想,使机器人具备自动装水、按照设定路线进行运水、并在目
2、的地准确卸水的基本功能。此外,运水量的测量、工作过程的自动计时、运水温度的测量、工作状态的语音适时播报、相关信息液晶屏显示等附加功能的实现,使本机器人具备良好的人机交互界面。控制系统采用主从机的结构框架进行设计。此外根据水的导电特性,创造性的设计出了一套由导线和比较器构成的液位测量系统。关键词:自动运水;水量测量;语音播报1 设计任务分析设计一套运水机器人系统,使此机器人能够将装水区域的水运输到指定区域,并能进行自动卸水。装水区域A与卸水区域C之间由一根宽度不大于20mm的引导黑线相连;引导线所在的区域为运输区B,三个区域由起始边线和返回边线隔离,边线同样为不大于20mm的黑线。如图1所示,运
3、水机器人的运水线路图。图1 机器人运水线路该系统包括A区的自动(或手动)给水装置,装置形状大小及摆放方式自定;往返于A、C区之间的机器人(包含运水容器,其总垂直高度不得超过300mm,储水装置容量不超过600ml,口径不大于100mm),机器人任意部分不得超出其边缘50mm;C区存水装置,口径不得大100mm,高度不得低于250mm,固定底板。起初机器人置于黑色启车线的右侧,巡着黑色引导线运行至返回边线右侧,轮子均不得压线。按照单位时间运水量评价机器人性能;此外机器人还需具备同步显示运行时间,显示两次测量所得运水量及总运水量的功能。反复琢磨任务要求,可得出如下结论:(1)机器人能够沿着引导线进
4、行巡迹,并能通过检测起始边线和返回边线进行准确定位;(2)机器人如果采用自动给水方式,A区给水装置应具有电路控制系统,并能和机器人控制系统进行信息交换;(3)自动给水装置的给水方式和机器人的卸水方式,可以有多种方案予以实现,但应是在保证转移方式可靠的前提下,追求转移速度;(4)运水量不应按机器人上容器的每次运水总量进行测量,而应按由机器人装卸到C区容器中的水量进行测量;(5)完成发挥部分需要显示运行时间以及运水量,显示界面应具备显示多个字符的功能;(6)容器尺寸以及机器人相关尺寸有严格要求,均应满足。2 方案设计与论证随着计算机技术的迅猛发展和广泛应用,机电一体化技术正获得前所未有的发展,而机
5、器人是机电一体化技术的最佳诠释。本运水机器人赛题从实际应用出发,机电一体化思想的充分融入是本赛题的最大特色,而成本低廉、性能可靠、结构合理是进行方案设计的出发点。2.1 三套可行方案选择根据系统设计任务所得出的结论,结合机械电子学、电子技术、微控技术等相关的学科知识,以及电子元器件市场器件的销售情况,现对本运水机器人系统涉及的相关项目进行逐项设计,每个设计项目分别给出三套可行方案,并作出最终选择。如表1所示,三套可行顶层方案的设计与选择。 设计项目方案一方案二方案三最佳方案电机选择直流减速电机混合式步进电机转向舵机加后轮驱动电机方案一运水量测量称重传感器测水重,从而换算出运水量根据容器尺寸和抽
6、水时间计算运水量根据水的导电特性,利用分布导线测出液位换算出运水量方案三自动给水装置与机器人通讯无线发射接受红外编码解码光电式接近开关方案二路面黑线检测主动式红外探测器直流驱动方式红外探测器脉冲调制方式发光二极管与光敏电阻加AD转换方式方案一自动装水方式直流微型隔膜水泵电磁阀舵机连同水龙头加以改装方案一C区卸水方式着重结构设计,采用倾倒方式微型离心水泵抽水合理设计储水容器,改装水龙头方案二显示方式LED数码管显示LCD1602液晶显示LCD12864液晶显示方案二控制中心一片51单片机,加译码器锁存器扩展IO口两片51单片机,主从机控制结构FPGA方案二 表1 三套顶层方案的设计与选择2.2
7、最佳方案论证2.2.1 电机选择 直流电机具有良好的调速特性、较大的启动转矩,以及功率大响应快速等优点,特别是其调速范围广,调速时的能量损耗小,且易于平滑调节。步进电机虽然具有机械振动小、噪声低、易于数字精确控制等一系列的优点,但是其输出力矩随转速升高而下降、在较高转速时会急剧下降,且一般不具有过载能力的特点,使其无法满足本运水机器人对力矩和速度的要求。而采用舵机转向直流电机驱动的方案,无疑曾加了软件控制的复杂程度。直流减速电机其大力矩,平滑调速的特性很好的满足了本运水载重机器人的要求。2.2.2 运水量测量 利用称重传感器测出容器储水总重,减去放水后剩量换算得出运水量。然而称重传感器输出的模
8、拟信号为微弱的毫伏级电压信号,需要经运算放大器放大后送给AD转换芯片进行模数转换,最后再给CPU进行相应处理,这样不但增加了硬件设计成本,而且软件编写较为复杂,不符合运水机器人高性价比的设计初衷。而根据容器尺寸,抽水流量和时间计算得出运水量的设计方案,属于开环测试,很难控制测量的精确度,无法满足5%以内的测量误差。这里利用水液的微弱导电性,采用自创的分布导线法进行液位测量,不但测量稳定精度较高,而且成本低廉。其详细测量方法将在后文进行述说。2.2.3 自动给水装置与机器人的通讯无线发射接受方式信号可传输距离远,但是其自身抗干扰能力差,由于涉及到高频电路的制作与调试,制作较为复杂,而且成本较红外
9、编解码方式高。而采用光电接近开关方案,主要靠检测机器人位置来输出信号,是一种被动式的信号交换形式,可控性能相对较差。2.2.4 路面黑线检测路面黑线检测采用主动式红外探测器直流驱动方式。虽然其较脉冲调制方式检测距离近,易受干扰,但通过合理设计电路元器件参数同样能达到满意效果,鉴于价格考虑这里采用前者。发光二极管与光敏电阻加AD转换组成的巡线方案,适于在环境光线基本不变的情况下使用,适应性较差,而且硬件成本高昂。2.2.5 其他方案论证 自动装水方式采用直流隔膜水泵。电磁阀多数为220V交流供电,而且价格昂贵流速较慢。将自来水龙头改装后,用舵机控制它的拧开和关闭。这种方案简便可靠,颇具创意,考虑
10、到机械加工工作量较大,我们舍弃了此种方案。LCD1602液晶显示器价格便宜,功耗低、显示清晰。而数码管显示字符少,功耗太大。至于LCD12864显示屏幕太大,用于此系统不大协调。2.3 最终系统方案根据上文分析和论述,现将系统方案确定。如图2所示,为最终的系统方案方框图。除了上面谈及的内容外,另外还将水温测量并显示、语音适时播报融入系统作为本机器人发挥部分的特色与创新。水温测量CPU 上位主机控制中心CPU下位从机LCD液晶显示液位测量H桥双路电机驱动直流电机继电器驱动模块车上卸水泵水满检测红外编码发射红外解码接收A区装水CPU继电器驱动模块A区装水泵语音适时播报黑线检测指示电珠图2 系统方案
11、方框图3 系统电路分析与软件说明3.1 电路分析3.1.1 黑线检测电路采用RPR220反射型红外对管采集路面信号。红外发射管发出红外光线,经反射物体反射到接收管上,使接收管的集电极和发射极间电阻变小,输入电位变小,接收管输出端输出高电平,通过PNP三极管放大输入比较器(LM393AD)的反相端。当红外光线照射到黑色条纹时,反射至接收管中的光强变弱,输出低电压经三极管放大,再经比较器处理,输出高电平。由于LM339是开源输出,需在输出端接一个10K的上拉电阻。在比较器的同相输入端接电位器用来调节阀值,以适应不同光线环境的要求;在红外发光管串接一个1K电位器,调节发光强度,以消除红外管的出厂误差
12、。如图3所示,为黑线检测电路原理图。本运水机器人系统,共用到12路此检测电路。前后各六个,其中五个检测引导线,一个检测边线。 图3 路面黑线检测电路3.1.2 分布导线水量测量法纯水是一种极弱的电解质,故而具有微弱的导电特性,自来水较纯净水的导电性强。利用水的这一特性,我们独创了一套运水量测量方法-分布导线水量测量法。如图4所示,为分布导线测水量的示意图。在容器口附近布置1-8号八根导线,导线成梯度等距分布,导线分布越多、之间距离越短测量精度越高。根据设计任务要求,运水量应为从机器人储水容器注入C区容器中的水量;在容器近底面处安放0号放水完毕检测导线。运水量即为液面高度所拥有的水量Vi减去检测
13、导线处所拥有的水量Vo。0号导线高度Ho固定,1-8号导线测出液面高度Hi。运水量的计算公式如下: V=Vi-Vo =A(Hi -Ho) mL A 容器底面积; Vi 液面高度所拥有的水量; V 检测导线处所拥有的水量; Hi 第i号(1-8号)导线所在的液面高度; Ho 放水完毕检测导线所在的液面高度 图4 分布导线测水量示意图 图5 测水量比较器电平处理电路水的导电性能十分微弱,虽然给容器中的水液上拉了12V的电压,但从检测导线输出的信号只有0.4V-0.8V,在TTL中依然为低电平,无法为单片机所采集。这里设计以比较器为中心的电平处理电路,能将0.4V-0.8V的弱电平转换为稳定的TTL
14、电平,如图5所示。R3为输入端的下拉电阻,保证无信号输入时比较器同相输入端为低电平;R4为输出端上拉电阻,以解决比较器开源输出的问题。比较器反相输入端参考电压调节至0.2V。3.1.3 机器人与自动装水装置通讯模块 本模块通讯方式为红外编解码,模块由三态编解芯片MC145026 和MC145027 组成,此组芯片是摩托罗拉公司生产的用于通信配对使用的最新芯片。编码芯片MC145026 可对9 位输入信息(地址位A1A5,数据位D6D9)进行编码,编码后每个数据位用两个脉冲表示:“1”编码为两个宽脉冲;“0”编码为两个窄脉冲;“开路”编码为一宽脉冲和一窄脉冲交叉。对于每9 位数据信息,可以看作是
15、一个数据字,为了提高通信的安全性,编解码芯片对每个数据字发送两次,接收两次。其电路原理如图6所示。图6 红外编解码通讯原理图3.2 软件说明由于篇幅有限,这里只给出主程序的核心流程图,如图7所示。 图7 主程序核心流程图4 数据测试运水机器人制作完成后,对系统性能作出了测试。测试仪器如表2所示,测试数据如表3所示。表2 测试仪器仪器数量秒表1只烧杯2只温度计1只 表3 测试数据项目次数显示时间单位:S秒表时间单位:S测量水量单位:mL实际水量单位:mL测量水温单位:实际水温单位:测试时间133.433.61100107625.425.6Am 9:10235.134.81110109026.62
16、6.7Am10:08332.232.71100108127.427.6Am10:50436.837.01100107228.027.8Pm14:35533.033.31090101328.228.2Pm15:00634.634.01090109827.227.5Pm17:00根据测试记录数据可知:考虑人为按下秒表的因素,系统时间显示准确无误;水量测量误差均控制在3%以内;18B20单总线温度传感器的水温测量亦是无可挑剔。整套系统经过一个星期的反复试验和测试,可靠稳定、达到方案设计的预期指标。5 创新总结5.1 系统设计创新点(1)采用自创的分布导线液位测量法进行运水量测量,并将测量误差控制在3
17、%以内;(2)机器人每次动作的进行都配套有适时的语音播报,加上LCD液晶显示使其具备更佳的人机交换界面;(3)对每次所运的水进行水温测量,并液晶显示,使其在相关应用领域具备一定的实用价值;(4)电路焊接工艺良好,机械结构设计简便合理,机器人运行平稳无噪声,而且不乏创新元素的融入,外形亦是具备很强的观赏性。5.2 心得体会“三人行,必有我师焉”,这恐怕是我们此次省赛体会最为深刻的一句话。我们三个人共同点是从大一开始便开始热衷于各种课外创新活动,尤其在电子创新方面有所侧重;不同之处是三人专业不尽相同机械、能源、通信工程。三个人都有自己的特长和优势,大家在一起交流学习、取长补短、并肩作战并乐在其中这
18、个暑假繁忙而充实!附页: 附表1 元器件清单 名称型号数量名称型号数量单片机STC89C523直流隔膜水泵12V 20W1单片机SPCE061A1微型水泵12V 8W2比较器LM3396直流减速电机12V 120r/Min2功率放大器L298N1晶振12 MHz3继电器SRD-S-1052晶振32.768kHz1继电器JRC-21F1或非门74Ls021红外编码芯片MC1450261与非门CD40111红外解码芯片MC1450271音频功放SPY00301红外对管RPR22012电位器10212液晶显示器LCD16021电位器1032温度传感器DS18B201电位器1045三极管901212集
19、成稳压芯片L78053三极管90133集成稳压芯片L78062上位机/=奥运第四天省赛程序完整版=/_ _ _ _ _ _ _ _ _ _ _ /-全部功能很好实现-/-/=洞庭飞=洞庭飞=洞庭飞=洞庭飞=/-/=/ #include #includeintrins.h /_nop_();延时函数用#includemath.h#define uchar unsigned char#define uint unsigned int#define ulint unsigned longbit k1=0,k2=0; /K=0正转K=1反转sbit shuiman=P32; /一根线在A区检测水满,则
20、使A区水泵停止sbit fangshui=P33;/通过红外发射控制A区泵的转动和停止高有效sbit kaibeng=P34;/车在C区开泵向C容器中放水sbit shuidao=P35;/车向C容器中放水,检测B容器中水已抽完sbit start=P36;/上位51机控制下位机定时器0开,也作为小车运行停止的联络信号sbit jianshui=P37;/上位机控制下位开始检测水位uchar bianh,bianl; /k控制转动方向uchar sud1=0,sud2=0; /速度调节码值uchar jishi1=0,jishi2=0; /定时器0中断计数uchar yuyin;/=/应用时先
21、开中断TR0=1,设sud1,sud2大小控制速度,/k1 K2值控制方向,sud范围为0-255,对应停止-全速 /k=0电机正向转动,k1=1电机反向转动/-timer0() interrupt 1 using 1 /使用定时器0 uchar zuoq,zuot,youq,yout; TH0=bianh; /每次中断定时0.1MS TL0=bianl; jishi1+; jishi2+; /*左直流电机* if(sud1!=0) if(k1=0) /k1=0,左电机正转 if(jishi1=sud1) zuoq=0x01;zuot=0x00; else if(sud1jishi1100)
22、jishi1=0;zuoq=0;zuot=0; else /k1!=0,左电机反转 if(jishi1=sud1) zuoq=0x00;zuot=0x01; else if(sud1jishi1=100) zuoq=0x00;zuot=0x00; else jishi1=0;zuoq=0;zuot=0; else /sud1=0,左电机停转 zuoq=0;zuot=0; /*右直流电机* if(sud2!=0) if(k2=0) /k2=0,右电机正转 if(jishi2=sud2) youq=0x01;yout=0x00; else if(sud2jishi2=100) youq=0x00;
23、yout=0x00; else jishi2=0;youq=0;yout=0; else /k2!=0,右电机反转 if(jishi2=sud2) youq=0x00;yout=0x01; else if(sud2jishi2=100) youq=0x00;yout=0x00; else jishi2=0;youq=0;yout=0; else /sud2=0,右电机停转 youq=0x00;yout=0x00; /*两电机驱动码中和* yout=yout3;youq=youq2;zuot=zuot1; P2=(yout|youq|zuot|zuoq|yuyin); / P2口低四位输出驱动码
24、 /P2.0 P2.1控制左电机,P2.2 P2.3控制右电机/以及控制凌阳61的语音,P2.4 P2.5 P2.6控制/-/*前进巡线,即由A区运行至C区*void xunqian() uchar hong5=0; /存红外状态 k1=0;k2=0; /左右电机都正转 hong5=P0;_nop_(); hong5=hong5&0x7f; if(hong5&0x08)!=0) /3#查中 sud1=255; sud2=255; else if(hong5&0x02)!=0) /1#车体右大偏,将车左大偏调节 sud1=0; sud2=255; /左电机减速,右电机大全速 else if(ho
25、ng5&0x20)!=0) /5#车体左大偏,将车右大偏调节 sud1=255;sud2=0; /右电机大减速,左电机全速 else if(hong5&0x04)!=0) /2#车体右小偏,左小偏调节 sud1=170;sud2=255;/右电机全速左电机小减速 else if(hong5&0x10)!=0) /4#车体左小偏,右小偏调节 sud1=255;sud2=170; /右电机大减速,左电机全速 /-/*倒车巡线,即由C区运行至A区,前端*void xunhou() uchar hong5=0; /存红外状态 k1=1;k2=1; /左右电机都反转 hong5=P1;_nop_();
26、hong5=hong5&0x1f; if(hong5&0x04)!=0) /3#查中 sud1=255; sud2=255; else if(hong5&0x01)!=0) /1#车体右大偏,将车左大偏调节 sud1=255; sud2=0; /左电机减速,右电机大全速 else if(hong5&0x10)!=0) /5#车体左大偏,将车右大偏调节 sud1=0;sud2=255; /右电机大减速,左电机全速 else if(hong5&0x02)!=0) /2#车体右小偏,左小偏调节 sud1=255;sud2=170;/右电机全速左电机小减速 else if(hong5&0x08)!=0
27、) /4#车体左小偏,右小偏调节 sud1=170;sud2=255; /右电机大减速,左电机全速 /=void xunhou1() uchar hong5=0; /存红外状态 k1=1;k2=1; /左右电机都反转 hong5=P0;_nop_(); hong5=hong5&0x7f; if(hong5&0x08)!=0) /3#查中 sud1=255; sud2=255; else if(hong5&0x02)!=0) /1#车体左大偏,将车右大偏调节 sud1=120; sud2=255; /右电机减速,左电机大全速 else if(hong5&0x20)!=0) /5#车体右大偏,将车
28、左大偏调节 sud1=255;sud2=120; /左电机大减速,右电机全速 else if(hong5&0x04)!=0) /2#车体左小偏,右小偏调节 sud1=200;sud2=255;/左电机全速右电机小减速 else if(hong5&0x10)!=0) /4#车体右小偏,左小偏调节 sud1=255;sud2=200; /左电机大减速,右电机全速 /-延时程序,一个单位代表约1ms-void delay(uint k) uint i,j; for(i=0;i=k;i+) for(j=0;j=200;j+) ;/-/不管小车是前进还是倒车都是sud1控制左边的,/速度2控制右边的/当
29、然都是人站在车后面向行驶的方向看去/=/=/sbit start=P30;/上位51机控制下位机定时器0开,使之开始计时/sbit jianshui=P31;/上位机控制下位开始检测水位/sbit shuiman=P32;/下位机检测水满后反馈给上位机一个信号/sbit fangshui=P33;/上位机通过红外发射控制A区泵的转动和停止,/ 低有效/sbit kaibeng=P34;/车在C区开泵向C容器中放水,低有效/sbit shuidao=P35;/车向C容器中放水,检测B容器中水已抽完/*主函数*/=void main() ulint kk=0; /-初始化- uchar biao1
30、=0,heng2=0,heng1=0,biao2=0,biao3=0,biao4=0; TMOD=0x01; /初始化,定时器0用方式1定时 bianh=0xff; /定时us bianl=0xc0; TH0=bianh; TL0=bianl; EA=1;ET0=1;TR0=0; sud1=0;k1=0; sud2=0;k2=0; yuyin=0; start=0; jianshui=0; fangshui=0; kaibeng=1; TR0=1; /开定时器0 start=1; /开下位机定时器0开始计时间 delay(40); /安全延时约6秒钟 /-/小车第一次在A区进行装水程序段,小车
31、还未开始计时 fangshui=1; /开泵放水 delay(80); jianshui=1; delay(10); /延时0.2秒由下位机检水 while(!shuiman); /下位机检测水未满,在此等待 fangshui=0; /关泵 jianshui=0; /关下位机检水程序 delay(30); /% yuyin=0x30; /% delay(120);/- sud1=220;sud2=220; /-小车装水完毕第一次由A区运行至C区- biao1=1; delay(30); yuyin=0x40; delay(50); while(biao1=1) /% yuyin=0x10; /
32、% xunqian(); heng2=P0; /检测第二条横线 heng2=heng2&0x01;/用前红外管0号管检测 if(heng2!=0) biao1=0;sud1=0;sud2=0;yuyin=0x00;/检测到横线后停车 delay(40);/-小车停在C区向容器中抽水- while(shuidao) kaibeng=0; kaibeng=1; /水到shuidao为0后,关B容器中泵停止抽水 yuyin=0x50;/-为倒车即车由C区运行至A区作准备- biao2=1; delay(50); sud1=255;k1=1; sud2=255;k2=1; delay(65); yuy
33、in=0x20;/-小车由C区运行至A区- while(biao2=1) xunhou(); heng1=P1; /检测第二条横线 heng1=heng1&0x20; /用前红外管0号管检测 if(heng1!=0) biao2=0; biao3=1; yuyin=0x60; while(biao3=1) xunhou1(); heng1=P0; /检测第二条横线 heng1=heng1&0x41; /用前红外管0号管检测 if(heng1!=0) biao3=0;sud1=0;sud2=0;yuyin=0x00; /车到达A区停稳 /-由A区容器向车中容器放水- delay(10); /#
34、start=0; /小车第2次在A区进行装水程序段 fangshui=1; /开泵放水 delay(10); jianshui=1; /延时0.2秒由下位机检水 while(!shuiman); /下位机检测水未满,在此等待 fangshui=0; /关泵 jianshui=0; /关下位机检水程序 delay(90); /-/-为小车第二次由A区运行至C区做好准备- sud1=220;k1=0; sud2=220;k2=0;/-小车装水完毕第二次由A区运行至C区- biao4=1; delay(55); /% yuyin=0x30; /% start=1; while(biao4=1) /% kk=0; kk+; if(100000kk100100) yuyin=0x40; else yuyin=0x10; /%