基于单片机的智能小车设计(红外避障) - 图文

更新时间:2024-05-08 13:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

轮式移动机器人的设计报告

单片机系统课程设计

智能小车(避障及循迹)的设计

学院:

班级: 姓名: 学号:

同组成员: 指导老师: 日期:

轮式移动机器人的设计报告

轮式移动机器人的设计报告

摘要

智能作为现代社会的新生产物,是未来的发展的一个重要方向,它可以按照预定的模式在特定的环境里自动的运作,无需人为管理,便可以完成预期目标。本设计主要体现多功能小车的智能模式,设计中的理论方案、分析方法及特色与创新点等对智能化机器人,智能家用电器等自动半自动机器人的设计与普及有一定的参考意义。

整个智能小车设计主要以单片机为控制核心,通过红外遥控实现小车前后左右的移动,以及对小车功能模式的转换;通过红外传感器,实现小车的避障功能和循迹功能。设计采用对比选择,模块独立,综合处理的研究方法。结合实际情况对比方案优劣选出最优方案进行设计。从红外遥控,红外循迹和避障,都严格按照科学严谨态度完成。通过调试检测各模块,得到正确的信号输出,实现其应有的功能。最后将各个调试成功的模块结合到小车的车体上,结合程序,通过单片机的控制,将各模块有效整合在一起,达到所预期的目标,完成最终设计与制作,能使小车在一定的环境中智能化运转。

关键词:智能小车 避障 循迹 遥控

轮式移动机器人的设计报告

ABSTRACT

Smart as a new product of modern society, it is an important direction of future development, it can be according to the predetermined pattern in a specific environment of automatic operation, without human management, can achieve expected goal. This design mainly reflects the multi-function car intelligent mode, the theory in the design of scheme, analysis method and special features and innovation point of intelligent robot, intelligent home appliances such as the design of automatic semi-automatic robot and popularity have certain reference significance.

The smart car design mainly by the single chip processor as the core, through infrared remote control to realize the car moving around, as well as to the car function mode conversion; Through the infrared sensor, achieve the function of car obstacle avoidance and tracking function. Independent design USES contrast to choose, module, integrated processing methods. Combined with actual situation comparing scheme to design and choose the optimal solution. From the infrared remote control, infrared tracking and obstacle avoidance, are in strict accordance with the scientific rigorous attitude to complete. Through debugging test module, get the correct output signal, realize its function. Finally combine the modules of various debugging success on car body, combined with the program, through the single-chip microcomputer control, to effectively integrate various modules together, achieve the expected goals, complete the final design and production, can make the car intelligent operation in a certain environment.

Keywords: intelligent car avoidance tracking control

轮式移动机器人的设计报告

第一章 绪论 ..................................................................................................................... 1

1.1 设计的背景和意义 ........................................................................................... 1 1.2 智能小车的发展现状 ....................................................................................... 2 1.3 该设计的主要内容和目的 ............................................................................... 4 第二章 系统总体方案设计与论证 ................................................................................. 5

2.1 系统的总体方案设计 ....................................................................................... 5 2.2 主控系统 ........................................................................................................... 6 2.3 电机驱动模块 ................................................................................................... 6 2.4 循迹模块 ........................................................................................................... 6 2.5 显示模块 ........................................................................................................... 6 第三章 系统硬件电路设计 ............................................................................................. 7

3.1 主控模块的电路设计 ....................................................................................... 7 3.1.1 AT89S52单片机的简介 ................................................................................ 7 3.2 红外避障模块的电路设计 ............................................................................... 9

3.2.1 LM393双电压比较器集成电路 ............................................................ 9 3.2.2红外对管工作原理 .............................................................................. 11 3.2.3红外避障电路图及工作原理 .............................................................. 12

3.3红外循迹电路的设计 .............................................................................................. 13 第四章 系统软件设计 ................................................................................................... 15

4.1 主程序 .............................................................................................................. 15 第五章 总结 ................................................................................................................... 24 附录1程序清单 ............................................................................................................. 25 附录2硬件原理图 ......................................................................................................... 34 附录3 实物图 ................................................................................................................ 35

轮式移动机器人的设计报告

第一章 绪论

1.1 设计的背景和意义

随着电子技术、计算机技术和制造技术的飞速发展,数码相机、DVD、洗衣机、 汽车等消费类产品越来越呈现光机电一体化、智能化、小型化等趋势。各种智能化 小车在市场玩具中也占一个很大的比例。根据美国玩具协会的调查统计,近年来全 球玩具销量增幅与全球平均GDP增幅大致相当。而全球玩具市场的内在结构比重却 发生了重大改变:传统玩具的市场比重正在逐步缩水,高科技含量的电子玩具则蒸 蒸日上。美国玩具市场的高科技电子玩具的年销售额2004年交2003年增长52%, 而传统玩具的年销售额仅增长3%。英国玩具零售商协会选出的2001圣诞节最受欢 迎的十大玩具中,有7款玩具配有电子元件。从这些数字可以看出,高科技含量的 电子互动式玩具已经成为玩家行业发展的主流。如今知识工程、计算机科学、机电一体化和工业一体化等许多领域都在讨论智能系统,人们要求系统变得越来越智能化。显然传统的控制观念是无法满足人们的 需求,而智能控制与这些传统的控制有机的结合起来取长补短,提高整体的优势更 好的满足人们的需求。随着人工智能技术、计算机技术、自动控制技术的迅速发展, 智能控制必将迎来它的发展新时代。计算机控制与电子技术融合为电子设备智能化 开辟了广阔前景。因此,遥控加智能的技术研究、应用都是非常有意义而且有很高市场价值的。

1

轮式移动机器人的设计报告

1.2 智能小车的发展现状

随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。可见其研究意义很大。智能小车是一个集环境感知、规划决策、自动驾驶等功能于一体的综合系统。它集中的运用了计算机、传感器、信息。通信、导航、人工智能及自动控制等技术,是典型的高新技术综合体。 一.国外智能车设计竞赛 (1)美国的智能车大赛

美国国防部与院校、企业和发明家联合开展,全球领先的智能汽车竞赛。 2007年11月,美国第三届智能汽车大赛在加州维克托维尔举行。本届智能汽车比赛的目标是对未来科学家的激励。大学、企业和发明家们期望制造出通过洛杉矶和拉斯维加斯间荒地、行程160km的自主控制汽车。

参赛汽车的车顶上有旋转的激光器,两边有转动的照相机,完全由电脑控制,利用卫星导航、摄像、雷达和激光,人工智能系统可判断出汽车的位置和去向,随后将指令传输到负责驾驶车辆的系统,丝毫不受人的干涉,用传感器策划和选择路线。参赛的无人驾驶智能汽车沿着附近公路飞奔。 (2)韩国大学生智能车大赛

韩国汉阳大学汽车控制实验室在飞思卡尔半导体公司资助下举办,以HCS12单片机为核心的大学生智能模型汽车竞赛。

组委会提供一个标准的汽车模型、直流电机和可充电式电池,参赛队伍要制作一个能够自主识别路线的智能车,在专门设计的跑道上自动识别道路行驶,谁最快跑完全程而没有冲出跑道并且技术报告评分较高,谁就是获胜者。 二.国内智能车辆竞赛现状研究 (1)竞赛的起源

2005年11月,中国教育部高等学校自动化专业指导分委员会与飞思卡尔半导体公

2

轮式移动机器人的设计报告

司签署了双方长期合作协议书。协议书规定从2006年起,飞思卡尔将至少连续5年协办“飞思卡尔”杯全国大学生智能汽车邀请赛,提供参赛队的标准硬、软件技术平台和竞赛优胜者奖金,并为主办单位提供一定的竞赛组织经费,我国智能车竞赛由此开始. (2)智能车竞赛的地位

教育部:与老牌的数学建模、电子设计、机械设计、结构设计等四大竞赛并列,被认定为国家教育部正式承认的五大大学生竞赛项目.

各高校:清华、交大、科大等名校均参加,最投入为北京科大,每年均举行校内赛(09年规模为79支队伍).

校内:综合类竞赛(A类)仅3种,分别为智能汽车、机器人、挑战杯。 (3)竞赛历史——第一届邀请赛

2006年8月20日至21日在清华大学进行,共有来自全国57所高校的112支参赛队参加。赛道中只有直道和弯道,没有上下坡。从赛车寻迹技术方案来看,赛道检测方式也大体分

为红外发射/接受管检测方式和CCD/CMOS摄像头检测方式两类。摄像头方案的成绩普遍好于红外传感器方案。 (4)竞赛历史——第二届,赛区+总决赛

扩大到全国具有以自动化专业为主的理工类高等本科学校约300余所。采取赛区和全国总决赛结合的形式。全国分为5个赛区,总决赛在上海交大举行。总决赛中出现上下坡的限制,比赛变得复杂了。小车的平均速度较比上年有了显著的提高,采用摄像头方案的成绩更加明显(决赛前十名的队伍全为摄像头队伍)。同比韩国的智能车大赛,我们的竞赛成绩已经超过了韩国。 (5)竞赛历史——第三届,赛区+总决赛

第三届智能车大赛在东北大学举行,有551支代表队伍参加了分区赛,104支队伍参加了总决赛。第三届比赛保留了前两届的要求,同时又增加了跑完全部路程起跑线在3米内停车的限制,对起跑线的识别又提出了严格的要求。与前两届摄像头与光电同条件参加比赛不同,本次竞赛分为光电与摄像头两个赛题组。 (6)竞赛历史——第四届,赛区+总决赛

3

轮式移动机器人的设计报告

第四届智能车总决赛在北京科技大学举行,有780支代表队伍参加了分区赛,120支队伍参加了总决赛。第四届比赛保留了前三届的要求,同时又增加了窄道、更复杂的背景、三角形标识识别等更具有难度的内容。增加了创意组,共有10个队经过初选进入复赛。

(7)竞赛的发展—第五届,更具难度

增加电磁组,扩大创意组规模;赛道变窄,提高小车控制难度;措施更严密。 1.3 该设计的主要内容和目的

智能小车主要由由四大组成部分:红外避障部分、红外循迹部分、执行部分、CPU。智能小车要实现循迹识别路线,避障后退并选择其他前进路线。该设计主要通过对系统硬件电路的设计,软件设计和程序的编写,然后通过后期软硬件调试达到设计目的,使其具有上述功能。

4

轮式移动机器人的设计报告

第二章 系统总体方案设计与论证

2.1 系统的总体方案设计

该系统以AT89S52单片机为核心的控制电路,采用模块化的设计方案,利用红外遥控器代替开关按键控制小的启动和停止,能够轻松自如的实现小车的启动停止、左转、右转和前进后退等功能,假如我们希望小车运行到黑线上来检测是否有循迹功能,就可以用遥控器控制小车行驶到有黑线的地方,当小车遇到有黑线时,会自动启动循迹功能模块,让小车沿黑线跑,遇到障碍物时会后退并选择其他路线躲避障碍物。每个模块都是相互独立又相互协调配合,实现了小车的智能控制。系统控制框图如图2.1所示:

红外遥控模块 AT89S52 红外避障模块 电机驱动模块 红外接收模块 循迹模块 显示模块 图2.1 系统控制框图

5

轮式移动机器人的设计报告

2.2 主控系统

我们采用单片机作为整个系统的核心,通过其控制行进中的小车,以实现其既定的性能指标。充分分析我们的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。所以,我们选定了AT89S52 单片机作为本设计的主控装置。 2.3 电机驱动模块

采用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,加速能力强,采用由达林顿管组成的H型桥式电路。用单片机控制达林顿管使之工作在占空比可调的开关状态下,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一因此选用L9110。

这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。 2.4 循迹模块

采用两只红外对管,分别置于小车车身左右两侧,根据两只对管接受到白线与黑线的情况来控制小车转向来调整车向。 2.5 显示模块

常用的数码显示器件主要有LED数码显管和LCD液晶显示器。考虑实用性最终选择了5611BS:0.56英寸一位共阳红色数码管,实用性强且价格低廉。

6

轮式移动机器人的设计报告

第三章 系统硬件电路设计

3.1 主控模块的电路设计

3.1.1 AT89S52单片机的简介

AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。

AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。引脚图如图3.1

7

轮式移动机器人的设计报告

图3.1 AT89S52引脚图

AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端。P0~P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(32~39 脚)被定义为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

8

轮式移动机器人的设计报告

3.2 红外避障模块的电路设计

3.2.1 LM393双电压比较器集成电路

图3.2.1-1 LM393

LM393是高增益,宽频带器件,像大多数比较器一样,如果输出端到输入端有寄生电容而产生耦合,则很容易产生振荡。这种现象仅仅出现在当比较器改变状态时,输出电压过渡的间隙,电源加旁路滤波并不能解决这个问题,标准PC板的设计对减小输入-输出寄生电容耦合是有助的。减小输入电阻至小于10K将减小反馈信号,而且增加甚至很小的正反馈量(滞回1.0~10mV)能导致快速转换,使得不可能产生由于寄生电容引起的振荡,除非利用滞后,否则直接插入IC(集成电路板integrated circuit,缩写:IC) 并在引脚上加上电阻将引起输入-输出在很短的转换周期内振荡,如果输入信号是脉冲波形,并且上升和下降时间相当快,则滞回将不需要。

图3.2.1-2

9

轮式移动机器人的设计报告

特点:

工作温度范围:0°C -- +70°C

SVHC(高度关注物质):No SVHC (18-Jun-2010) 器件标号:393

工作电源电压范围宽,单电源、双电源均可工作,单电源: 2~ 36V, 双电 源:±1~±18V; 消耗电流小, ICC=0.8mA; 输入失调电压小, VIO=±2mV;

共模输入电压范围宽, VIC=0~VCC-1.5V; 输出与TTL,DTL,MOS,CMOS 等兼容; 输出可以用开路集电极连接“或”门; 表面安装器件:表面安装 功能:

输出负载电阻能衔接在可允许电源电压范围内的任何电源电压上,不受 Vcc端电压值的限制,输出部分的陷电流被可能得到的驱动和器件的β值所限制.当达到极限电流(16mA)时,输出晶体管将退出而且输出电压将很快上升。输出饱和电压被输出晶体管大约60ohm 的γSAT限制。当负载电流很小时,输出晶体管的低失调电压(约1.0mV)允许 输出箝位在零电平。

10

轮式移动机器人的设计报告

3.2.2红外对管工作原理

图3.2.2-1 图3.2.2-2

上图中,红外光电管有两种,一种是无色透明的LED,此为发射管,它通电后能够产生人眼不可见红外光,另一部分为黑色的接收部分,它内部的电阻会随着接收到红外光的多少而变化。

无论是一体式还是分离式,其检测原理都相同,由于黑色吸光,当红外发射管照射在黑色物体上时反射回来的光就较少,接收管接收到的红外光就较少,表现为电阻大,通过外接电路就可以读出检测的状态;同理,当照射在白色表面时发射的红外线就比较多,表现为接收管的电阻较小,此时通过外接电路就可以读出另外一种状态,如用电平的高低来描述上面两种现象就会出现高低电平之分,也就是会出现所谓的0和1两种状态,此时再将此送到单片机的I/O口,单片机就可以判断是黑白路面,进而完成相应的功能,如循迹、避障等。

11

轮式移动机器人的设计报告

3.2.3红外避障电路图及工作原理

图3.2.3-1

图3.2.3-2

12

轮式移动机器人的设计报告

特点:

该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,停止一段时间并后退,有效距离范围2~4cm,工作电压为3.3V-5V。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点。

1、当模块检测到前方障碍物信号时,前方侧位红色指示灯点亮电平,同时OUT端口持续输出低电平信号,该模块检测距离2~4cm。

2、传感器主动红外线反射探测,因此目标的反射率和形状是探测距离的关键。其中黑色探测距离最小,白色最大;小面积物体距离小,大面积距离大。

3、传感器模块输出端口OUT可直接与单片机IO口连接即可,也可以直接驱动一个5V继电器;连接方式:VCC-VCC;GND-GND;OUT-IO 4、比较器采用LM393,工作稳定; 5、可采用3-5V直流电源对模块进行供电。 3.3红外循迹电路的设计

图3.3-1 图3.3-2

图3.3-3

13

轮式移动机器人的设计报告

原理与避障基本一致,LM393为内部集成了四路比较器的集成电路。因为内部的四个比较电路完全相同,这里仅以一路比较电路进行举例。如图4所示为单路比较器组成的红外检测电路图,比较器有两个输入端和一个输出端,两个输入端一个称为同输入端,用“+”号表示,另一个称为反相输入端,用“-”表示。用作比较两个电路时,任意一个输入端加一个固定电压作参考电压(也叫门限电压),另一端则直接接需要比较的信号电压。当“+”端电压高于“-”端电压时,输出正电源电压,当“-”端电压高于“+”端电压时,输出负电源电压(注意,此处所说的正电源电压和负电源电压是指接比较正负极的电压。

14

轮式移动机器人的设计报告

第四章 系统软件设计

4.1 主程序

避障系统主程序

#include //包含51单片机相关的头文件

sbit LeftLed=P2^0; //定义前方左侧指示灯端口 sbit RightLed=P0^7; //定义前方右侧指示灯端口 sbit FontLled=P1^7;

sbit LeftIR=P3^5; //定义前方左侧红外探头端口 sbit RightIR=P3^6; //定义前方右侧红外探头端口 sbit FontIR=P3^7; //定义前方正前方红外探头端口

sbit M1A=P0^0; //定义左侧电机驱动A端 sbit M1B=P0^1; //定义左侧电机驱动B端

sbit M2A=P0^2; //定义右侧电机驱动A端 sbit M2B=P0^3; //定义右侧电机驱动B端

sbit B1=P0^4; //定义语音识识别传感器端口 sbit SB1=P0^6; //定义蜂鸣器端口

void tingzhi() {

M1A=0; //将M1电机A端初始化为0 M1B=0; //将M1电机B端初始化为0 M2A=0; //将M2电机A端初始化为0 M2B=0; }

15

轮式移动机器人的设计报告

void qianjin() {

M1A=1; M1B=0; M2A=1; M2B=0; }

void houtui() {

M1A=0; M1B=1; M2A=0; M2B=1; }

void zuozhuan() {

M1A=1; M1B=0; M2A=0; M2B=1; }

void youzhuan() {

M1A=0; M1B=1; M2A=1; M2B=0; }

16 轮式移动机器人的设计报告

void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us { i=i/10; while(--i); }

void delay_nms(unsigned int n) //延时n ms { n=n+1; while(--n)

delay_nus(900); //延时 1ms,同时进行补偿 }

void ControlCar(unsigned char ConType) //定义电机控制子程序 {

tingzhi();

switch(ConType) //判断用户设定电机形式 {

case 1: //前进 //判断用户是否选择形式1 {

qianjin(); break; }

case 2: //后退 //判断用户是否选择形式2 {

houtui(); //M2电机反转 break; }

case 3: //左转 //判断用户是否选择形式3 {

zuozhuan(); //M2电机正转 }

17

break;

轮式移动机器人的设计报告

case 4: //右转 //判断用户是否选择形式4 {

youzhuan(); //M1电机正转 //M2电机反转 }

case 8: //停止 //判断用户是否选择形式8 break;

{

tingzhi(); break; // } } }

void main() //{

bit RunFlag=0; // //RunShow=0; //

ControlCar(8); // while(1) // { Start:

LeftLed=LeftIR; // RightLed=RightIR; // FontLled= FontIR; SB1=FontIR;

if(FontIR == 0) // {

ControlCar(8); // delay_nms (300); ControlCar(2); delay_nms (1000); ControlCar(3);

退出当前选择 主程序入口 定义小车运行标志位 初始化显示状态 初始化小车运行状态 程序主循环 前方左侧指示灯指示出前方左侧红外探头状态 前方右侧指示灯指示出前方右侧红外探头状态 如果前面避障传感器检测到障碍物 停止 //停止300MS 防止电机反相电压冲击 导致系统复位 //后退

//后退1500MS

//

18

轮式移动机器人的设计报告

delay_nms (1800); goto NextRun;

}

if(FontIR == 1 ) {

ControlCar(1); //右侧没有信号时,开始向左转一定的角度 delay_nms (10);

goto NextRun;

}

goto Start; NextRun: ControlCar(1); } 循迹程序

#include //包含51单片机相关的头文件

sbit LeftLed=P2^0; //定义前方左侧指示灯端口 sbit RightLed=P0^7; //定义前方右侧指示灯端口 sbit FontLled=P1^0;

sbit LeftIR=P3^5; //定义前方左侧红外探头端口 sbit RightIR=P3^6; //定义前方右侧红外探头端口 sbit FontIR=P3^7; //定义前方正前方红外探头端口

sbit M1A=P0^0; //定义左侧电机驱动A端 sbit M1B=P0^1; //定义左侧电机驱动B端

sbit M2A=P0^2; //定义右侧电机驱动A端 sbit M2B=P0^3; //定义右侧电机驱动B端

sbit B1=P0^4; //定义语音识识别传感器端口

19

轮式移动机器人的设计报告

sbit SB1=P0^6; //定义蜂鸣器端口

void tingzhi() {

M1A=0; //将M1电机A端初始化为0 M1B=0; //将M1电机B端初始化为0 M2A=0; // M2B=0; }

void qianjin() {

M1A=1; M1B=0; M2A=1; M2B=0; }

void houtui() {

M1A=0; M1B=1; M2A=0; M2B=1; }

void zuozhuan() {

M1A=0; M1B=1; M2A=1; M2B=0; }

将M2电机A端初始化为0 20

轮式移动机器人的设计报告

void youzhuan() {

M1A=1; M1B=0; M2A=0; M2B=1; }

void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us { i=i/10; while(--i); }

void delay_nms(unsigned int n) //延时n ms { n=n+1; while(--n)

delay_nus(900); //延时 1ms,同时进行补偿 }

void ControlCar(unsigned char ConType) //定义电机控制子程序 {

tingzhi();

switch(ConType) //判断用户设定电机形式 {

case 1: //前进 //判断用户是否选择形式1 {

qianjin(); break; }

case 2: //后退 //判断用户是否选择形式2

21

轮式移动机器人的设计报告

{

houtui(); //M2电机反转 break; }

case 3: //左转 //判断用户是否选择形式3 {

zuozhuan(); //M2电机正转 break;

}

case 4: //右转 // {

youzhuan(); //M1 //M2 break; }

case 8: //停止 // {

tingzhi(); break; // } } }

void main() //{

bit RunFlag=0; // //RunShow=0; //

ControlCar(8); // while(1) // { Start:

LeftLed=LeftIR; // RightLed=RightIR; // FontLled= FontIR;

判断用户是否选择形式4 电机正转 电机反转 判断用户是否选择形式8 退出当前选择 主程序入口 定义小车运行标志位 初始化显示状态 初始化小车运行状态 程序主循环 前方左侧指示灯指示出前方左侧红外探头状态 前方右侧指示灯指示出前方右侧红外探头状态 22

轮式移动机器人的设计报告

SB1=LeftIR;

if(LeftIR == 0 && RightIR == 0) //三个红外检测到黑线,就前进 {

ControlCar(1); //左侧没有信号时,开始向右转一定的角度 delay_nms (10);

goto NextRun;

}

if(LeftIR == 0 && RightIR == 1) {

ControlCar(3); // delay_nms (10);

goto NextRun;

}

if(LeftIR == 1 && RightIR == 0) {

ControlCar(4); // delay_nms (10);

goto NextRun;

}

goto Start; NextRun: ControlCar(8); } }

右侧没有信号时,开始向左转一定的角度 右侧没有信号时,开始向左转一定的角度 23

轮式移动机器人的设计报告

第五章 总结

通过此次课程设计,使我更加扎实的掌握了有关智能小车设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在单片机这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵,而是通过自己的双手去实践。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获龋最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可。

参考文献

[1] 杨永辉.《现代电子技术》[J] .智能小车的多传感器数据融合.2005

[2] 何立民.《单片机与嵌入式系统应用》[J].基于HCS12的小车智能控制系统设计.2007 [3] 谭浩强.《C程序设计》.北京:清华大学出版社,2005,7 [4] 张立.《电子世界》[J].电动小车的循迹.2004

[5] 武庆生,仇梅.单片机原理与应用(M).电子科技大学出版,1998,12 [6] 徐科军.传感器与检测技术[M].电子工业出版社,2007 [7] 刘瑞新.单片机原理及应用教程 .机械工业出版社,2003,7 [8] 刘湘涛,江世明.单片机原理与应用[M].电子工业出版社,2006 [9] 何立民.单片机初级教程[M].北京航空航天大学出版社,1999 [10] 熊建云. Protel99 SE.北京:机械工业出版社,2007

[11] 郑郁正.单片机原理及应用.四川大学出版杜,2003 [12] 卢静,陈非凡,张高飞等.基于单片机的无刷直流电动机控制系统设计.北京机械工业学院学报,2002,10 [13] 张燕,曾光宇.光电式传感器的应用与发展[J].科技情报开发与经济,2007

24

轮式移动机器人的设计报告

附录1程序清单

#include //包含51单片机相关的头文件 #include

sbit LeftLed=P2^0; //定义前方左侧指示灯端口 sbit RightLed=P0^7; //定义前方右侧指示灯端口 sbit FontLled=P1^7;

sbit LeftIR=P3^5; //定义前方左侧红外探头端口 sbit RightIR=P3^6; //定义前方右侧红外探头端口 sbit FontIR=P3^7; //定义前方正前方红外探头端口

sbit M1A=P0^0; //定义左侧电机驱动A端 sbit M1B=P0^1; //定义左侧电机驱动B端

sbit M2A=P0^2; //定义右侧电机驱动A端 sbit M2B=P0^3; //定义右侧电机驱动B端

sbit B1=P0^4; //定义语音识识别传感器端口 sbit SB1=P0^6; //定义蜂鸣器端口

sbit IRIN=P3^3; //定义红外接收端口

unsigned char code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, //定义数码管显示数据 0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9 unsigned char code RecvData[]={0x19,0x46,0x15,0x43,0x44,0x40,0x0D,0x0E,0x00,0x0F}; unsigned char IRCOM[7];

static unsigned int LedFlash; //定义闪动频率计数变量 bit EnableLight=0; //定义指示灯使能位 #define ShowPort P2 //定义数码管显示端口 unsigned char temp = 1; void tingzhi() {

M1A=0; //将M1电机A端初始化为0 M1B=0; //将M1电机B端初始化为0 M2A=0; //将M2电机A端初始化为0 M2B=0; }

void qianjin() {

M1A=1;

25

轮式移动机器人的设计报告

M1B=0; M2A=1; M2B=0; }

void houtui() {

M1A=0; M1B=1; M2A=0; M2B=1; }

void zuozhuan() {

M1A=0; M1B=1; M2A=1; M2B=0; }

void youzhuan() {

M1A=1; M1B=0; M2A=0; M2B=1; }

void Delay1ms(unsigned int i) {

unsigned char j,k; do{ j = 10; do{ k = 50; do{ _nop_(); }while(--k); }while(--j); }while(--i); }

void delay_nus(unsigned int i) //

延时:i>=12 ,i的最小延时单12 us 26

轮式移动机器人的设计报告

{ i=i/10; while(--i); }

void delay_nms(unsigned int n) //延时n ms { n=n+1; while(--n)

delay_nus(900); //延时 1ms,同时进行补偿 }

void delayms(unsigned char x) //0.14mS{

unsigned char i; // while(x--) // {

for (i = 0; i<13; i++) {} //14mS } }

void Delay() //{

unsigned int DelayTime=30000; // while(DelayTime--); // return; //}

void ControlCar(unsigned char ConType) //{

tingzhi();

switch(ConType) // {

case 1: //前进 // {

//tingzhi();

击主板 导致系统复位 //Delay1ms(50); LeftLed = 0 ; qianjin();

break;

}

case 2: //后退 // {

// tingzhi();

延时程序 定义临时变量 延时时间循环 延时 定义延时子程序 定义延时时间变量 开始进行延时循环 子程序返回 定义电机控制子程序 判断用户设定电机形式 判断用户是否选择形式1 //进入前进之前 先停止一段时间 防止电机反向电压冲

判断用户是否选择形式2

//进入后退之前 先停止一段时间 防止电机反向 27

轮式移动机器人的设计报告

电压冲击主板 导致系统复位 // Delay1ms(50); LeftLed = 1 ; }

case 3: //左转 //判断用户是否选择形式3 {

//tingzhi(); }

case 4: //右转 //判断用户是否选择形式4 {

// tingzhi(); // Delay1ms(50); }

case 8: //停止 //判断用户是否选择形式8 {

tingzhi(); } } }

void ControlCar_yaokong(unsigned char ConType) //定义电机控制子程序 switch case 语句 ) {

tingzhi();

switch(ConType) //判断用户设定电机形式 {

case 1: //前进 //判断用户是否选择形式1 {

tingzhi();

//进入前进之前 先停止一段时间 防止电机反向电压冲

击主板 导致系统复位

Delay1ms(150); LeftLed = 0 ; qianjin();

28

(红外遥控单独设置一个

break; //退出当前选择 youzhuan(); //M1电机正转 break;

//M2电机反转

//进入右转之前 先停止一段时间 防止电机反向

电压冲击主板 导致系统复位

// Delay1ms(50);

zuozhuan(); //M2电机正转 break;

//进入左转之前 先停止一段时间 防止电机反向

电压冲击主板 导致系统复位

houtui(); //M2电机反转 break;

轮式移动机器人的设计报告

break; }

case 2: //后退 //判断用户是否选择形式2 {

tingzhi();

//进入后退之前 先停止一段时间 防止电机反向

电压冲击主板 导致系统复位 Delay1ms(150); LeftLed = 1 ; houtui(); //M2电机反转 break;

}

case 3: //左转 // {

tingzhi();

电压冲击主板 导致系统复位

Delay1ms(150);

zuozhuan(); //M2 break;

}

case 4: //右转 // {

tingzhi();

电压冲击主板 导致系统复位

Delay1ms(150); youzhuan(); //M1 break;

}

case 8: //停止 // {

tingzhi(); break; // } } }

void Robot_Avoidance() //{

LeftLed=LeftIR; // RightLed=RightIR; // FontLled= FontIR; SB1=FontIR;

if(FontIR == 0) // {

ControlCar(8); //

判断用户是否选择形式3

//进入左转之前 先停止一段时间 防止电机反向

电机正转 判断用户是否选择形式4

//进入右转之前 先停止一段时间 防止电机反向

电机正转 //M2电机反转

判断用户是否选择形式8 退出当前选择

机器人避障子程序 前方左侧指示灯指示出前方左侧红外探头状态 前方右侧指示灯指示出前方右侧红外探头状态 如果前面避障传感器检测到障碍物 停止 29

轮式移动机器人的设计报告

delay_nms (300); } else {

ControlCar(1); //右侧没有信号时,开始向左转一定的角度 delay_nms (10); }

ControlCar(1); }

//机器人循迹子程序

void Robot_Traction() //机器人循迹子程序 {

LeftLed=LeftIR; //前方左侧指示灯指示出前方左侧红外探头状态 RightLed=RightIR; //前方右侧指示灯指示出前方右侧红外探头状态 FontLled= FontIR; SB1=LeftIR;

if(LeftIR == 0 && RightIR == 0) //三个红外检测到黑线,就前进 {

ControlCar(1); //左侧没有信号时,开始向右转一定的角度 delay_nms (10); }

else if(LeftIR == 0 && RightIR == 1) {

ControlCar(3); //右侧没有信号时,开始向左转一定的角度 delay_nms (10); }

else if(LeftIR == 1 && RightIR == 0) {

ControlCar(4); //右侧没有信号时,开始向左转一定的角度 delay_nms (10); }

ControlCar(8); }

void main() //主程序入口 {

bit RunFlag=0; //定义小车运行标志位

LedFlash=3000; //对闪灯数据进行初始化

30

ControlCar(2); delay_nms (1000); ControlCar(3); delay_nms (1800);

//停止300MS 防止电机反相电压冲击 导致系统复位 //后退

//后退1500MS //

轮式移动机器人的设计报告

//EX1=1; //同意开启外部中断1

IT1=1; //设定外部中断1为低边缘触发类型 EA=1; //总中断开启 ControlCar(8); //初始化小车运行状态 while(1) //程序主循环 {

if(P3_2 == 0) } }

//----------红外遥控------------------------------------------------------------- void IR_IN() interrupt 2 using 0 //定义INT2外部中断函数 {

unsigned char j,k,N=0; //定义临时接收变量

EX1 = 0; //关闭外部中断,防止再有信号到达 delayms(15); //延时时间,进行红外消抖 if (IRIN==1) //判断红外信号是否消失 {

EX1 =1; //外部中断开

return; //返回 }

while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。 {

delayms(1); //延时等待 }

31

{

delay_nms(10); if(P3_2 == 0) {

temp++; }

if(temp > 3) { temp = 1; }

switch(temp) {

case 1: ShowPort = LedShowData[1];Robot_Traction();EX1 = 0;break; }

case 2: ShowPort = LedShowData[2];Robot_Avoidance();EX1 = 0;break; case 3: ShowPort = LedShowData[3];EX1 = 1;break; while(!P3_2); }

轮式移动机器人的设计报告

for (j=0;j<4;j++) //采集红外遥控器数据 {

for (k=0;k<8;k++) //分次采集8位数据 {

while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。 {

delayms(1); //延时等待 }

while (!IRIN) //等 IR 变为高电平 {

delayms(1); //延时等待 }

while (IRIN) //计算IR高电平时长 {

delayms(1); //延时等待 N++; //计数器加加 if (N>=30) //判断计数器累加值 {

EX1=1; //打开外部中断功能

return; //返回

} }

IRCOM[j]=IRCOM[j] >> 1; //自动补零

if (N>=8) //判断数据长度 {

IRCOM[j] = IRCOM[j] | 0x80; //数据最高位补1 }

N=0; //清零位数计录器 } } if

(IRCOM[2]!=~IRCOM[3]) //判断地址码是否相同 {

EX1=1; //打开外部中断 return; //返回 }

for(j=0;j<10;j++) //循环进行键码解析 {if(IRCOM[2]==RecvData[j]) //进行键位对应 {

// ControlCar(j);

32

进行数据位移操作并 轮式移动机器人的设计报告

ControlCar_yaokong(j); //数码管显示相应数码}

}

EX1 = 1; //外部中断开 }

//-------------------------------------------------------------------------------------------------------

33

轮式移动机器人的设计报告

附录2硬件原理图

34

轮式移动机器人的设计报告

附录3 实物图

35

本文来源:https://www.bwwdw.com/article/htwg.html

Top