BF-1餐饮服务机器人
实验报告册
[键入文字]
院系名称专业班级学生姓名协 会
[键入文字] [键入文字]
: : : :[键入文字] [键入文字] [键入文字]
目 录
目录„„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 第一章 绪论 „„„„„„„„„„„„„„„„„„„„„„„„„2 1.1机器人在当今的重要性 „„„„„„„„„„„„„„„„„„„2 1.2机器人的发展与现状 „„„„„„„„„„„„„„„„„„„„2 1.3我与机器人 „„„„„„„„„„„„„„„„„„„„„„„„2 第二章 实验报告 „„„„„„„„„„„„„„„„„„„„„„„3 2.1实验名称 „„„„„„„„„„„„„„„„„„„„„„„„„3 2.2实验目的 „„„„„„„„„„„„„„„„„„„„„„„„„3 2.3实验器材 „„„„„„„„„„„„„„„„„„„„„„„„„3 2.4实验原理 „„„„„„„„„„„„„„„„„„„„„„„„„3 2.5实验步骤 „„„„„„„„„„„„„„„„„„„„„„„„„3 2.6数据分析 „„„„„„„„„„„„„„„„„„„„„„„„„4 2.7结论 „„„„„„„„„„„„„„„„„„„„„„„„„„„4 2.8误差讨论 „„„„„„„„„„„„„„„„„„„„„„„„„4 第三章 方案设计与论证„„„„„„„„„„„„„„„„„„„„„5 3.1移动平台 „„„„„„„„„„„„„„„„„„„„„„„„„5 3.2控制模块 „„„„„„„„„„„„„„„„„„„„„„„„„5 3.3驱动模块 „„„„„„„„„„„„„„„„„„„„„„„„„6 3.4循迹模块 „„„„„„„„„„„„„„„„„„„„„„„„„8 3.5稳压模块 „„„„„„„„„„„„„„„„„„„„„„„„„8 第四章 程序与调试 „„„„„„„„„„„„„„„„„„„„„„10 4.1有关C51单片机 „„„„„„„„„„„„„„„„„„„„„„10 4.2开发环境 „„„„„„„„„„„„„„„„„„„„„„„„„10 4.3程序框图 „„„„„„„„„„„„„„„„„„„„„„„„„10 4.4调试过程 „„„„„„„„„„„„„„„„„„„„„„„„„10 第五章 附件 „„„„„„„„„„„„„„„„„„„„„„„„„12 5.1 BF-1机器人实图„„„„„„„„„„„„„„„„„„„„„„12 5.2 BF-1机器人餐厅„„„„„„„„„„„„„„„„„„„„„„12 5.3 BF-1机器人部分硬件图„„„„„„„„„„„„„„„„„„„13 5.4 BF-1机器人电路原理图„„„„„„„„„„„„„„„„„„„14 5.5 BF-1机器人程序框图„„„„„„„„„„„„„„„„„„„„16 5.6 BF-1程序„„„„„„„„„„„„„„„„„„„„„„„„„17 致谢„„„„„„„„„„„„„„„„„„„„„„„„„„„„„24 参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„24
[键入文字] [键入文字] [键入文字]
[键入文字] [键入文字] [键入文字]
第一章 绪论
1.1机器人在当今的重要性
随着社会的发展,工业生产量越来越大,单单靠人来工作是不行的,机器人的出现从一定程度上解决了这一问题。尤其在中国,社会正在进入老龄化,除了生产之外还需要有很大一部分人力来照顾老人,但是如果有机器人来替我们完成部分工作,就可以缓解社会压力。机器人研究涉及的学科涵盖机械、电子、传感器、驱动与控制等多个领域,过去,对机器人行业有过重大贡献的人数不胜数。不过,从简单的时间线已经能够看出,从第一代工业机器人、第二代带有“感觉”的机器人到第三代智能机器人,机器人的体积越来越小,与PC结合得越来越紧密。说不定,个人机器人就快成为现实了。
1.2机器人的发展与现状
1920年捷克斯洛伐克作家卡雷尔·恰佩克在他的科幻小说《罗萨姆的机器人万能公司》中,根据Robota(捷克文,原意为“劳役、苦工”)和Robotnik(波兰文,原意为“工人”),创造出“机器人”这个词。之后机器在短短的几十年间飞速发展,到今天,机器人技术在一些发达国家已经相当成熟。
1954年 美国人乔治·德沃尔制造出世界上第一台可编程的机器人,并注册了专利。这种机械手能按照不同的程序从事不同的工作,因此具有通用性和灵活性。
1968年 美国斯坦福研究所公布他们研发成功的机器人Shakey。它带有视觉传感器,能根据人的指令发现并抓取积木,不过控制它的计算机有一个房间那么大。Shakey可以算是世界第一台智能机器人,拉开了第三代机器人研发的序幕。
1999年日本索尼公司推出犬型机器人爱宝(AIBO),当即销售一空,从此娱乐机器人成为目前机器人迈进普通家庭的途径之一。
2002年丹麦iRobot公司推出了吸尘器机器人Roomba,它能避开障碍,自动设计行进路线,还能在电量不足时,自动驶向充电座。Roomba是目前世界上销量最大、最商业化的家用机器人。
2006年 6月,微软公司推出Microsoft Robotics Studio,机器人模块化、平台统一化的趋势越来越明显,比尔·盖茨预言,家用机器人很快将席卷全球。 在中国近几年机器人研究也有所发展,但是与发达国家的技术还有相当大的差距,机器人知识在民间的普及还不够全面。作为当今大学生,我们应该学着接触科学前沿,努力学习,丰富自己的知识储备,为我国的机器人发展做出自己的贡献。
1.3我与机器人
在很小时候就喜欢看类似于《铁臂阿童木》之类有关机器人的动画片,后来在电视上看到大学生机器人比赛,总幻想有一天自己也可以拥有一个属于自己的机器人。有这个梦想很多年了,大学给我了一个接触机器人的机会,使得我可以在这方面努力。虽然距离正真意义上的机器人还有很长的路要走,但是目前的小制作还是给我在追求梦想多的道路上很大的动力。我会坚持自己的梦想,刻苦钻研,使自己在这方面的道路上可以走的更远。
[键入文字] [键入文字] [键入文字]
[键入文字] [键入文字] [键入文字]
第二章 实验报告
2.1实验名称
BF-1机器人的设计与制作
2.2实验目的
验证BF-1机器人的可实现性,学习相关的电路和编程知识,对机器人有些基本的认识,扩展自己的思维方式,强化自己的动手能力。
2.3实验器材
1.主要元件列表: 序数
元件 规格
号 量 1 单片机 STC89C52 1 2 电机驱动 L298n 1 3 电压比较器 Lm339 1 4 稳压管 L7805CV 1 5 电阻1 220 4 6 电阻2 330 12 7 电阻3 5.1k 8 8 电阻4 10k 2 9 电容1 30pF 2 10 电容2 0.1uF 4 11 电容3 10uF 1 12 电容4 100uF 1 13 电容5 470uF 1 14 电位器 10k 4 15 二极管 IN4007 8 16 晶振 11.0592MHz 17 红外对管 TCRT5000 5 18 自锁开关 1 19 按键开关 5 20 发光二极管 3
备
注 序数
元件 规格 备注
号 量 21 三极管 8050 1 22 蜂鸣器 1 有源 23 数码管 1 八段一位 24 排针 40P 2 宽体 25 杜邦线 10cm 20 26 IC座1 14P 1 27 IC座2 40P 1 28 电池盒 1 六节5号 29 万用板1 5*7cm 1 30 万用板2 7*9cm 2 31 万用板3 9*1cm 1 32 减速电机 2 33 轮子 6cm 2 34 电机固定架 2 配套电机 35 万向轮 1 36 铜柱1 M3*10mm 8 37 铜柱2 M3*30mm 10 38 螺丝 M3*5mm 39 螺母 M3 40 排线 布线用
2.主要工具:电烙铁、锡丝、螺丝刀、剪刀、钳子、电钻。
2.4实验原理
单芯片计算机可以像电脑一样写入程序发出指令。(原理图见第五章_附件_5.4_ BF-1机器人电路原理图。)
2.5实验步骤
1.在网上搜集相关资料,设定整个方案的大致轮廓。学习电路、单片机的基本知识,熟悉相关软件的使用方法。
[键入文字]
[键入文字]
[键入文字]
[键入文字] [键入文字] [键入文字]
2.根据掌握的知识和BF-1要实现的具体功能,绘制出机器人的机械图和原理图。通过仿真软件对各部分电路做出大致的评估。
3.根据制定好的图纸完成机器人的硬件部分,包括机械和电路,对电路进行简单的测试,完善电路。
4.根据BF-1要实现的具体功能,编写程序,反复调试,完成最终程序。
2.6数据分析
BF-1机器人最终可以在特定的环境中(第五章_附件_5.4_ BF-1机器人餐厅)完成规定动作:在厨房放上菜后设定桌号,然后机器人将饭菜送到指定的餐桌,当客人取下饭菜之后,机器人可以自行返回厨房。
2.7结论
实验验证了BF-1餐饮服务性机器人的可行性,对于我来说是一个小小的鼓励。在完成整个实验的过程中,我学到了很多新的知识,其中在微控制原理这一方面有很大的收获,因为以前从没有接触过,现在懂了不少。此外在机器人的制作过程中,除了熟悉Keil C51等单片机开发环境外,我还掌握了AutoCAD、Protel、Proteus等计算机软件的基本操作,这些对以后的电路设计都是很好的基础。
最主要的是在实验中我更加体会到了探索的乐趣,加深了我对机器人的兴趣爱好,坚定了我要继续在这方面学习的信心。并且在探索的过程中我还认识了很多志同道合的同学,大家都有着一样的兴趣,在一起共同学习共同进步,这是一件非常美好的事情。
但是即使对于这种简单的机器人来说,我还有很多东西无法解决,所以以后要努力学习,丰富自己的知识,为自己的梦想奋斗。
2.8误差讨论
机器人在直线处不能总是沿直线行进,偶尔会出现左右摇摆的情况,这可能是循迹程序不完善的因素。在整个电路中,有关电阻和电容的使用并没有经过精致地计算。以上几条以我现在的知识水平暂且无法解决,需要以后相关知识完备后在做完善。BF-1本来装有人体释热传感器,用来防止机器人在送饭过程中撞上道路上的行人,但是在实际中此功能不能实现,后测试发现是传感器损坏,在没有找到新的传感器的情况下,此功能暂时去除。
[键入文字] [键入文字] [键入文字]
[键入文字] [键入文字] [键入文字]
第三章 方案设计与论证
3.1移动平台
对于BF-1机器人来说,只需要进行简单的前后左右移动就可以,无需复杂的机械臂。所以在平台的选择上就简单了很多。 方案一:
用四通道玩具遥控车的底盘。优点:容易找到,不需要太多的改造,且价格便宜。缺点:速度不容易掌控,转向迟钝。 方案二:
在网上购买机器人专用的平台。优点:容易上手,可以直接使用,各个方面相对稳定。缺点:价格较贵,失去了动手制作的意义。 方案三:
使用减速电机,自己制作移动平台。优点:费用少,感受制作过程。缺点:平台的坚固度和稳定性相对较弱。
图3.1 减速电机
综合以上,结合我自身的经济能力和知识水平,我决定采用方案三,从网上购买了两个减速电机,安装在万用板上作为机器人的移动平台。之所以选择用万用板,是因为万用板上容易打洞,便于电机和相关器件的安装。
3.2控制模块
对于BF-1机器人来说,并没有太过复杂的程序,对控制器的CPU、RAM、ROM都没有太高的要求,所以我采用单片机作为机器人的核心。 方案一:
直接用电压比较器作为核心,通过比较不同传感器的变化从而输出高低电平控制电机驱动模块,达到循迹的目的。但是对于BF-1机器人来说要做到循迹行走、停止、键盘输入、显示、运算等工作,所以没有计算机来控制是不能实现的。故此方案不可行。 方案二:
选用一片CPLD(如EPM7128LC84-15)作为系统的核心部件,实现控制与处
[键入文字]
[键入文字]
[键入文字]
[键入文字] [键入文字] [键入文字]
理的功能。CPLD具有速度快、编程容易、资源丰富、开发周期短等优点,可利用VHDL语言进行编写开发。但CPLD在控制上较单片机有较大的劣势。同时,CPLD的处理速度非常快,而小车的行进速度不可能太高,那么对系统处理信息的要求也就不会太高,在这一点上,MCU就已经可以胜任了。若采用该方案,必将在控制上遇到许许多多不必要增加的难题。为此,我们不采用该种方案,进而提出了第三种设想。 方案三:
采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。因此,这种方案是一种较为理想的方案。
针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,而不能用精简I/O口和程序存储器的小体积单片机,D/A、A/D功能也不必选用。根据这些分析,我选定了C51单片机作为本设计的主控装置,51单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是51单片机价格非常低廉。由于51单片机的普遍性,所以在市面很容易买到51单片机的开发板,编写烧录程序都相对方便。
图3.2 C51单片机开发板
在综合考虑了传感器、两部电机的驱动等诸多因素后,我决定采用一片单片机,充分利用STC89C52单片机的资源。
3.3驱动模块 方案一:
采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行
[键入文字] [键入文字] [键入文字]
[键入文字] [键入文字] [键入文字]
调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。 方案二:
采用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的 H型桥式电路(如图3.3.1)。
图3.3.1 H桥式电路
方案三:
使用现市面上有很比较成熟的H桥集成芯片,这些芯片工作稳定,用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高,集成芯片保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的 PWM调速技术。这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。经过反复地比较,我选用了L298n(如图3.3.2)。
图3.3.2 L298n
[键入文字]
[键入文字]
[键入文字]
[键入文字] [键入文字] [键入文字]
3.4 循迹模块 方案一:
采用简易光敏电阻结合外围电路探测,但实际效果并不理想,对行驶过程中的稳定性要求很高,且误测几率较大、易受光线环境和路面介质影响。在使用过程极易出现问题,而且容易因为该部件造成整个系统的不稳定。故最终未采用该方案。 方案二:
采用四只红外对管(如图3.4),分别置于机器人车身前轨道的两侧,根据四只光电开关接受到白线与黑线的情况来控制小车转向来调整车向,测试表明,只要合理安装好,只用中间的两只光电开关就可以很好的实现循迹的功能。
图3.4 红外对管
方案三:
用激光传感器来循迹。外界环境的影响对激光传感器干扰很小,并且通过单片机来分时点亮激光管,可以实现多个激光发射管对一个激光接收管。但是激光管在安装过程中要求较高,一旦遇到静电就容易衰减。并且激光发射管和激光接收管相对与红外对管是非常昂贵的。
综合利弊,我最终选用第二种方案。用LM399作为电压比较器,将采集到模拟信号转换为数字信号,直接供单片机的I/O口。
3.5稳压模块
BF-1机器人的控制板需要5V的电压为单片机供电,但是由于L298N降压严重,所以5V电压对于电机驱动模块是不行的,至少需要7V左右的电压才能保证电机可以接收到5V的工作电压。 方案一:
用6节充电镍氢电池(电压1.2V)串联,前四节引出两根导线(电压4.8V)为控制模块和循迹模块供电,总电池组两端接两根导线(电压7.2V)为电机驱动模块供电。但是在电池的饱和状态和过放状态之间,电池的电压变化较大,对于需要稳定电压来工作的单片机来说,此方案不能达到要求。
[键入文字]
[键入文字]
[键入文字]
[键入文字] [键入文字] [键入文字]
方案二:
用6节充电镍氢电池(电压1.2V)串联成7.2V的电池组,直接为电机驱动模块供电。用三个二极管串联,将电压将至5.1V为控制模块和循迹模块供电。此方案与方案一有着相同的弊端,随着电池电量的改变,加压后的电压波动较大。所以我放弃此方案。 方案三:
用6节充电镍氢电池(电压1.2V)串联成7.2V的电池组,直接为电机驱动模块供电。采用L7805稳压元件将7.2V电压降压到5V为控制模块和循迹模块供电。稳压电路很简单,转换后的电压比较稳定,并且L7805的价格也不算贵,所以我采用此方案。
[键入文字] [键入文字] [键入文字]
[键入文字] [键入文字] [键入文字]
第四章 程序与调试
4.1有关C51单片机
在BF-1机器人中使用的是STC89C52单片机。STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。
图4.1 单片机
4.2开发环境
在程序的编写中有汇编语言和C语言,C语言相对于汇编语言更容易理解,门槛低,容易学习。所以我选择用C语言来编写BF-1的程序。
Keil C51软件是目前功能最强大的单片机C语言集成开发环境(图4.2)。
图4.2 Keil C51界面
[键入文字]
[键入文字]
[键入文字]
[键入文字] [键入文字] [键入文字]
4.3程序框图
因为机器要完成将饭菜送达指定的餐桌,所以在机器人运行之后首先要有先有键盘输入相应的桌号,当BF-1接到接到命令后就会根据指定将饭菜送到指定位置,在送饭的过程中,机器人要做到沿指定路线行进(即循迹),还要通过计算判断是否到达指定餐桌。当到了餐桌后,如果客人将饭菜端下之后,机器人还要在返回厨房,等待下一次命令。(详细程序见第五章_附件_5.5_程序框图。)
4.4调试过程
在机器人的机械调试过程中,本来我是打算将BF-1的底盘制作成思路驱动的,因为在我们的印象中四个轮子的车子比较常见,当然四个个轮子的稳定性也要好些。但是在实际的制作中我发现四轮驱动的底盘并不好控制,尤其是在转弯时,四轮底盘的会显得很迟钝。后来我改用两个驱动轮加一个万向轮作为小车的底盘,(详细视图见第五章_附件_5.3.1_移动平台),靠后面两个轮子的速度差转向。在这样的情况下,移动平台的灵活性增强很多,可以实现原地任意角度转向。 机器人的电路调试中过程中并没有遇到太多问题,因为我事先搜集过大量有关电路,做了一定分析和筛选之后绘制了BF-1的原理图,并且在焊接板子之前做好了PCB图,重要部分也做过Porteus仿真。所以在整个过程中仅仅是遇到了两个问题。第一个问题是我先前在每一个模块的电路的电源处都接了一个整流二极管来防止电源反接对电路造成危害,但是后来发现控制模块和循迹模块的电压都偏低。经过检查才发现,原来经过7805稳压后的电压已经是5V了,在经过二极管时会有0.7V的压降。为此我将各模块的整流二极管除去,将防止反接电路提至稳压管之前,这样就既保证了各模块电路不会受到电源反接的危害,又保证了整个系统电压的稳定。第二个问题就是滤波电容位置,我先前实在控制板的电源排阵附近安装了104电容,但事实上系统在运行中偶尔还会因为高频干扰出错。查了相关资料后,我将104电容接在MCU的VCC管脚附近,有效的解决了这一问题。
由于刚接触嵌入式不久,所在程序调试中遇到不少问题。就键盘检测而言,进入检测的双重循环以后开始设置桌号,但是却不知道如何再跳出这双重循环进行下一步操作。在和学长的共同讨论后,我们决定采用一个For循环定义变量a,在内部循环中一旦a被赋值就用Braek语句跳出,在外部循环中a值改变打破For循环条件,故自然跳出外围循环。还有就是在桌号检测的程序中,为了能使机器人准确地判断桌号,我用了检测后延时再检测来防止误检,但是延时的时间长度就是一个难题了,短了会重复检测同一桌号,长了会丢掉桌号。经过反复地调试,最终确定下来的延时时间能使桌号检测的准确率达到80%,这是因为机器人在行进的过程中速度并不是恒定。后来我将程序改为检测后延时检测,确定检测到桌子之后再延时走过这个桌号,这样的程序就相对稳定很多,基本不会出现桌号判断失误的可能。(详细程序见第五章_附件_5.6_BF-1程序。)
[键入文字] [键入文字] [键入文字]
[键入文字] [键入文字] [键入文字]
第五章 附件
5.1 BF-1机器人实图
5.2 BF-1机器人餐厅
[键入文字]
[键入文字]
[键入文字]
[键入文字] [键入文字] [键入文字]
5.3 BF-1机器人部分硬件图
5.3.1 移动平台
5.3.2电机驱动模块
[键入文字]
[键入文字]
[键入文字]
[键入文字] [键入文字] [键入文字]
5.4 BF-1机器人电路原理图
5.4.1 控制模块
5.4.2 循迹模块
[键入文字] [键入文字] [键入文字]
[键入文字] [键入文字] [键入文字]
5.4.3 驱动模块
[键入文字] [键入文字] [键入文字]
[键入文字] [键入文字] [键入文字]
5.5 BF-1机器人程序框图
开 始 前 进 否 等 待 否 是否设置 是否到达 指定桌子 是 停 止 是 否 桌号加一 桌号减一 否 是否确定 前进 是 否 退出设置 是否 返回厨房 是 饭菜是否 端下 是 前 进 否 是否 检测到黑线 是 左转 右转 左边 右边 [键入文字] [键入文字] [键入文字]
[键入文字] [键入文字] 5.6 BF-1程序
/******BF-1机器人程序******/
/******河南工业大学***电气学院***周伟伟******/
/******头文件******/
#include #define uint unsigned int//宏定义 #define uchar unsigned char//宏定义 #define shumaguan P0//数码管 /******硬件连接定义******/ sbit buzz=P2^0;//蜂鸣器 sbit ma0=P2^2;//电机A控制口 sbit ma1=P2^3;//电机A控制1 sbit ma2=P2^4;//电机A控制2 sbit mb0=P2^5;//电机B控制口 sbit mb1=P2^6;//电机B控制1 sbit mb2=P2^7;//电机B控制2 sbit key1=P1^0;//设置按键 sbit key2=P1^1;//+按键 sbit key3=P1^2;//-按键 sbit key4=P1^3;//确定按键 sbit zhongli=P1^7;//重力传感器 sbit hw1=P3^0;//红外传感1 sbit hw2=P3^1;//红外传感2 sbit hw3=P3^2;//红外传感3 sbit hw4=P3^3;//红外传感4 sbit shire=P3^7;//人体释热传感器 /******全局变量******/ uchar circs,n,t,num,s; /******电机A控制函数******/ void go_ma()//电机A前进 { ma0=1; ma1=1; ma2=0; } void back_ma()//电机A后退 { ma0=1; ma1=1; ma2=0; } [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] void stop_ma()//电机A停止 { ma0=1; ma1=0; ma2=0; } /*****电机B控制函数******/ void go_mb()//电机B前进 { mb0=1; mb1=1; mb2=0; } void back_mb()//电机B后退 { mb0=1; mb1=1; mb2=0; } void stop_mb()//电机B停止 { mb0=1; mb1=0; mb2=0; } /******BF-1机器人运动函数*******/ void advance()//BF-1机器人前进 { go_ma(); go_mb(); } void back()//BF-1机器人后退 { back_ma(); back_mb(); } void left_turn()//BF-1机器人左转 { stop_ma(); go_mb(); } void right_turn()//BF-1机器人右转 { go_ma(); [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] stop_mb(); } void stop()//BF-1机器人停止 { stop_ma(); stop_mb(); } /******BF-1机器人设备服务函数******/ void delayms(uint xms)//延时函数 { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void display(uchar y)//数码管显示 { uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; shumaguan=table[y]; } void alarm()//蜂鸣器报警 { buzz=0; delayms(500); buzz=1; delayms(500); } /******BF-1机器人键盘检测函数******/ void key_scan()//键盘检测 { for(n=100;n==100;)//进入键盘检测循环 { if(key1==0)//设置按键 { delayms(10); if(key1==0) { while(1) { display(num); [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] if(key2==0)//按键+ { delayms(10); if(key2==0) num++; if(num==10) num=0; while(!key2); } if(key3==0)//按键- { delayms(10); if(key3==0) num--; if(num==-1) num=9; while(!key3); } if(key4==0)//确定按键 { delayms(10); if(key4==0) n=num;//赋n值 while(!key4); break;//跳出检测 } } } } } } /******BF-1机器人红外检测函数******/ void hw_scan()//红外检测 { if(hw2==1&&hw3==1)//直线 circs=1; if(hw2==1&&hw3==0)//偏左 circs=2; if(hw2==0&&hw3==1)//偏右 circs=3; if(hw2==0&&hw3==0)//压线 circs=4; if((hw2==0&&hw3==0)&&(hw1==0&&hw4==0))//饭桌[键入文字] [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] { advance(); delayms(40); if((hw2==0&&hw3==0)&&(hw1==0&&hw4==0)) { advance(); n--; t++; if(t==10) t=0; advance(); delayms(60); while((hw2==1&&hw3==1)&&(hw1==1&&hw4==1)); } }//桌号检测分析 } void hw_circs()//检测分析 { switch(circs) { case 1: s=1; break; case 2: s=2; break; case 3: s=3; break; case 4: s=4; break; } } /******BF-1机器人驱动函数******/ void drive() { if(s==1)//前进 { advance(); delayms(15); } if(s==2)//左转 { [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] left_turn(); delayms(15); } if(s==3)//右转 { right_turn(); delayms(15); } if(s==4)//停止 { stop(); delayms(15); } if(s==5)//停止并警报 { stop(); delayms(15); alarm(); } } /******BF-1机器人主函数******/ void main()//主函数 { while(1) { num=0; key_scan(); delayms(1000); while(1) { ma1=1;ma2=1;mb2=1;mb2=1;//检测清零 hw_scan();//传感器检测 hw_circs();//检测分析 drive();//BF_1机器人驱动 display(t);//显示状态 if(n==0) break; } alarm(); alarm(); while(1) { [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] if(key1==0)//返回设置 { delayms(10); if(key1==0) break; } } while(1)//返回厨房 { ma1=1;ma2=1;mb2=1;mb2=1;//检测清零 hw_scan();//传感器检测 hw_circs();//检测分析 drive();//BF_1机器人驱动 display(t);//显示状态 if(t==0) break; } alarm(); } } [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] [键入文字] 致谢 本设计能够顺利完成,还承蒙各位学长的关心。在单片机的学习中,还有在BF-1的程序编写调试过程中,正是得到了几位学长的帮助,才大大的缩短了机器人的制作的时间,这里就不再一一介绍。在制作电路阶段,电子科技协会为我提供了制作BF-1的实验室,我才能有合适的环境去专心完成相关工作。在此,我对电子科技协会表示最真挚的感谢!同时感谢所有帮助过我的同学! 参考文献 [1]网络.百度百科. http://baike.baidu.com/ [2]网络.. http://wenku.baidu.com/ [3]网络.百度知道. http://zhidao.baidu.com/ [4]郭天祥.51单片机C语言教程.电子工业出版社.2009 [5]陈永甫.常用电子元件及其应用.人民邮电出版社.2005 [6]DavidCook[美].机器人制作.2005 [7]韦琳.模拟电路科学出版社.2006 [8]刘勇数.字电路电子工业出版社.1992 [9]刘秋艳.Protel 99se电路设计中国铁道出版社.2005 [10]周润景.等Proteus在MCS-51&ARM7系统中的应用百例.2006 [键入文字] [键入文字] [键入文字] 因篇幅问题不能全部显示,请点此查看更多更全内容