资源描述
学学 士士 学学 位位 论论 文文 系系 别:别: 计算机科学与技术计算机科学与技术 学科专业:学科专业: 计算机科学与技术计算机科学与技术 姓姓 名:名: 2011 年年 06 月月 智能小车引导控制系统智能小车引导控制系统 的设计与实现的设计与实现 系系 别:别: 计算机科学与技术计算机科学与技术 学科专业:学科专业: 计算机科学与技术计算机科学与技术 指导老师:指导老师: 姓姓 名:名: 2011 年年 06 月月 智能小车引导控制系统的设计与实现智能小车引导控制系统的设计与实现 摘 要:面对诸多恶劣的工作环境(如灭火、救援等),为了有效的避免人员伤 亡,就需要采用智能小车去现场来完成相应的任务。因此研究和开发智能小车 引导控制系统具有十分重要的意义。本系统采用STC89C51单片机作为核心控制 芯片,设计制作了一款通过红外光电传感器检测路径信息、红外火焰传感器检 测火源的智能寻迹灭火小车。本系统由单片机控制模块、寻迹传感器模块、驱 动电机模块、火源传感器模块、风扇模块、电源模块等组成。实际应用表明, 该小车可以在专门设计的场地上实现自主发现火源,自主识别路线,自主行进 接近火源并灭火,最终完成灭火的任务。 关键词:单片机 小车 引导控制 传感器 Smart cars guide control system design and implementation Abstract: Confronted with so many bad working environment (such as fire fighting, rescue etc), in order to effectively avoid casualties, need to use intelligent go by car scene to complete relevant tasks. Therefore, the research and development of intelligent car guide control system has the extremely vital significance. This system uses STC89C51 as the core control chip, design and make a new electric sensor detection by infrared sensor information, infrared flame path of intelligent tracing test fire extinguishing car. The system is composed of single-chip microcomputer control module, tracing sensor module, drive motor module, ignition sensor module, fan module, power supply module. The practical application indicates that the car can be in a specially designed field on fire, to realize the independent found autonomous recognition route, independent sources and marching close to the fire extinguishing, finally complete task. Keywords: Microcontroller Car Control system Sensors 第 1 页 目目 录录 引 言.1 第 1 章 方案设计与论证.2 1.1 任务要求.2 1.1.1 设计任务.2 1.1.2 设计要求.2 1.1.3 创新设计.3 1.2 总体设计方案.3 1.3 小车的方案设计与论证.3 1.4 驱动电机模块的选定.4 1.5 寻迹传感器模块的选定.4 1.6 单片机控制模块的选定.5 1.7 火源传感器模块的选定.5 1.8 风扇模块的选定.5 1.9 电源模块的选定.6 1.10 最终方案.6 第 2 章 硬 件 设 计7 2.1 系统工作原理及功能简介.7 2.2 电 源7 2.3 红外寻迹传感器.8 2.4 采用 PWM 调速的直流电机.9 2.4.1 PWM 的简介9 2.4.2 H 型电机驱动9 2.4.3 小车原理图.10 2.5 红外火焰传感器.10 2.6 风扇模块.11 2.7 智能小车整体设计.12 2.7.1 CPU 引脚的设定12 2.7.2 整体设计.13 第 3 章 软 件 设 计15 3.1 智能灭火小车系统总体流程.15 3.2 程序流程图.16 3.3 部分功能代码.17 第 4 章 测 试 结 果21 结 束 语22 第 2 页 致 谢23 参 考 文 献24 附 录25 智能小车引导控制系统的设计与实现 第 1 页 共 30 页 引引 言言 现在,随着科技的快速发展,国内外对小型智能系统的应用越来越广泛, 种类也越来越多。本题目就是结合有关科研项目而确定的设计类课题,所设计 的智能寻迹灭火小车应能够实现自动发现火源、自动寻迹、自动前进接近火源 并完成灭火任务的功能。 根据题目的要求,智能寻迹灭火小车控制系统采用一片STC89C51单片机作 为本控制系统的主控芯片,硬件包括以下几个模块:驱动电机模块、寻迹传感 器模块、单片机控制模块、火源传感器模块、风扇模块、电源模块。本设计采 用了STC89C51单片机为智能小车核心控制部分,通过查询方式实现对小车的智 能控制。小车由主控制板、传感系统、风扇系统和车身四部分组成。主控制系 统由主控CPU电路、传感器接口电路、直流电机驱动电路等组成;传感系统采 用红外传感器检测黑白线,火源传感器检测火源;行进直流电机驱动采用PWM 调制技术,可灵活方便地对车速、行进方向进行控制。 本设计通过采用STC89C51单片机为控制核心,实现对小车的智能控制。该 控制系统不仅在智能小车中有很强的实用价值,在汽车应用、智能机器人等方 面都有很强的实用价值,尤其是在机器人研究方面具有很好的发展前景。所以 本设计与实际相联系,具有重要的现实意义。 运城学院计算机科学与技术系毕业论文 第 2 页 共 30 页 第第 1 章章 方案设计与论证方案设计与论证 1.11.1 任务要求任务要求 1.1.1 设计任务 设计制作一个智能灭火小车模型,能到指定区域进行抢险灭火工作。以蜡 烛模拟火源,随机分布在场地中,模拟灭火比赛场地如图1.1所示。 图 1.1 模拟灭火比赛场地示意图 1.1.2 设计要求 1. 智能灭火小车手动启动后,自动寻找到火源的位置。 2. 智能灭火小车必须按照固定的路线行进(黑白线)。 3. 扑灭火源后自动检测周围环境是否还有其他火源。 4. 若有则继续灭火,若无则停止工作。 智能小车引导控制系统的设计与实现 第 3 页 共 30 页 1.1.3 创新设计 1. 小车车体结构好,完全自主设计,小车采用两层结构,分放不同模块 的元件,调试过程和修改过程相对简单。 2根据小车需要和实际情况,自行设计传感器,不仅花费较少,而且使 用效果好。 3自制灭火风扇,并采用三极管放大电路供电,最大限度的加大电机转 速。 4使用以7805芯片为核心的稳压设计,以L298为核心的电机驱动设计, 保证系统的稳定性。 5原地检测软件设计思路:先原地旋转360,找出光敏电阻电路输出电 压的最小值并保存数据,然后再旋转360找出最小最小值的位置,然后停下。 1.21.2 总体设计方案总体设计方案 总体方案为:整个电路分为驱动电机模块、寻迹传感器模块、单片机控制 模块、火源传感器模块、风扇模块、电源模块六个模块。 首先利用红外对路面信号进行探测,利用火源传感器检测火源信号,两种 信号经过处理之后,送给单片机控制模块进行实时运算,输出相应的信号给驱 动电机模块驱动电机转动,从而控制整个小车的运动。系统方案框图如图1.2 所示。 图 1.2 系统设计方案框图 1.31.3 小车的方案设计与论证小车的方案设计与论证 方案1:自己制作电动车 自己制作车体,组装合适的电机及电机驱动板, 自制探测器,并利用开发板做控制驱动小车。但自己制作的小车,车体会比较 粗糙,车身重量、平衡,小车的电路设计,这些都比较难良好地实现。 方案2:购买专用电动车 购买专用电动车具有组装完整的车架车轮,甚 运城学院计算机科学与技术系毕业论文 第 4 页 共 30 页 至有完整的电机装配和电机驱动板。用自制探测器或购买完整探测模块,并用 开发板控制小车运动。这种专用电动车装配紧凑,各种所需电路的安装十分方 便,看起来也比较美观。而且,用专用电动车具有完整的电机装配和电机驱动, 这用就省去了对电机传动和电机驱动的设计和实现。 综合考虑,我们选定了方案2作为我们的初步方案。 1.41.4 驱动电机模块的选定驱动电机模块的选定 方案1:采用步进电机作为该系统的驱动电机 利用步进电机的准确定长 步进性能方便的实现调速和方向的偏转,且能准确的测量速度、路程以及时间, 简化编程和硬件连接的工作量。但步进电机的输出力矩较低,随转速的升高而 下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度 的系统。 方案2:采用直流电机作为该系统的驱动电机 直流电机的控制方法比较 简单,只需给电机的两根控制线加上适当的电压即可使电机转动起来,电压越 高则电机转速越高。而且改变正负极可方便的改变电机转动的方向,方便改变 小车的行进状态。对于直流电机的速度调高,可以采用改变电压的方法,也可 采用PWM调速方法。PWM调速就是使加在直流电机两端的电压为方波形式,通过 改变方波的占空比实现对电机转速的调节。 与其它调速系统相比,PWM调速系统有下列优点: 1. PWM从处理器到被控系统信号都是数字形式的,无需进行数模转换。 2. 对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点 3由于电力电子器件只工作在开关状态,主电路损耗较小,装置效率较 高。 4主电路简单,所用功率元件少。 5低速性能好,稳定精度高,调速范围宽。 综合考虑,本设计采用了方案2。 1.51.5 寻迹传感器模块的选定寻迹传感器模块的选定 方案1:采用发光二极管+光敏电阻,该方案缺点明显:易受冻外界光源的 干扰,有时甚至检测不到黑线,主要是因为可见光的反射效果跟地表的平坦程 度,地表材料的反射情况对检测效果产生直接影响。而且外界的可见光对设备 的影响很大,而且不容易克服外界可见光的干扰。 方案2:采用红外光电对管,由于只需分辨黑白,红外光电对管有一个管 发射红外线一个用于接收红外线,当红外线照射到黑线上时不会发射回来,当 红外线照射到白色的地方就会返回,光电对管发射的同时也能接收红外信号, 整个检测设备简单,稳定性高,速度快。缺点是检测距离短,优点是成本低, 易于操作。 智能小车引导控制系统的设计与实现 第 5 页 共 30 页 根据以上分析我们采用方案2。 运城学院计算机科学与技术系毕业论文 第 6 页 共 30 页 1.61.6 单片机控制模块的选定单片机控制模块的选定 考虑到整个系统的简单、方便性,控制模块采用STC89C51作为主控制芯片, 该芯片有足够的存储空间,可以方便的在线ISP下载程序,能够满足该系统软 件的需要,该芯片提供了两个计数器中断,对于本作品系统已经足够,采用该 芯片可以比较灵活的选择各个模块控制芯片,能够准确的计算出时间,有很好 的实时性。而且STC89C51有很强的扩展性,使用简单,灵活性高且价廉。所有 我们直接采用STC89C51作为主控芯片。 1.71.7 火源传感器模块的选定火源传感器模块的选定 方案1:采用两个热敏电阻作为核心的传感器,实验中发现在一定距离范 围内,空气温度变化非常小,热敏电阻几乎不发生任何变化。 方案2:采用两个光敏电阻作为核心的传感器,利用光敏电阻对不同距离 及不同强度的光照均有较好的光敏特性来将外界光信号转换成电信号,提供给 单片机进行相关判断操作。实验中我们发现这种方案有很大的缺点,抗干扰能 力极差,而且误差偏大,不能准确测定火源位置。 方案3:采用红外接收二极管,红外接收二极管将外界红外光的变化转化 为电流的变化,通过 A/D转换器将模拟信号反映为 01023 范围内的数字信号。 外界红外光越强,数值越小,根据数值的变化能判断红外光线的强弱,从而能 大致判别出火源的远近。红外火焰传感器可以用来探测火源或其它一些波长在 760纳米1100纳米范围内的热源,探测角度达60度,其中红外光波长在940纳 米附近时,其灵敏度达到最大。实验中发现如果环境中红外干扰比较少的时候 本方案能比较准确的检测到火源。 鉴于以上3种方案的比较,我们选择方案3。 1.81.8 风扇模块的选定风扇模块的选定 利用一个不减速的直流小电机带动一个小扇叶进行简单的灭火。这种方案 有两个子方案。 方案1:芯片控制 灭火风扇电机的转速和转向都不需要控制,只要在一 定范围内转的越开越好。因此采用这种方案有点麻烦,而且还会浪费时间和精 力。 方案2:三极管放大电路 直接利用三极管驱动。将电机放在三极管的射 极,然后在基极加上一个限流电阻即可驱动电机正常工作,这种方案不仅电路 简单、易实现,会减少很多电路上不必要的麻烦,而且驱动效率也大大提高, 不仅如此其维修性也很强,出现故障能及时快速维修。同时为了保证电路稳定 智能小车引导控制系统的设计与实现 第 7 页 共 30 页 性,我们可以采用多个三极管并联供电的方式。 综合考虑,本设计采用了方案2。 1.91.9 电源模块的选定电源模块的选定 在本系统中,需要用到的电源有单片机的5V,L298N芯片的电源5V和电机 的电源7-25V。所以需要对电源的提供必须正确和稳定可靠。 方案1:采用UT-3W提供的电源方案为电机供电,采用UT-3W提供的电源接 口为单片机提供电源。优点:简单方便。 方案2:用六节干电池为整个系统供电,再转换为电机和单片机需要的电 压。 基于系统的稳定性考虑,我选择了方案2。 1.101.10 最终方案最终方案 经过反复论证,我们最终确定了如下方案: 1车体是购买专用电动车。 2采用STC89C51单片机作为控制核心。 3采用六节干电池供电。 4用红外探测传感器作为寻迹传感器。 5采用红外接收管制作红外火源传感器。 6采用三极管放大电路驱动风扇模块。 系统的结构框图如图1.3所示。 图 1.3 系统结构框图 运城学院计算机科学与技术系毕业论文 第 8 页 共 30 页 第第 2 章章 硬硬 件件 设设 计计 2.12.1 系统工作原理及功能简介系统工作原理及功能简介 本系统利用单片机STC89C51单片机作为本系统的主控模块,我们采用反射 式红外传感器识别黑线轨迹,用远红外火焰传感器检测火源,由单片机对传感 器识别到的信号加以分析和判断,并通过对直流电机的控制来实现自动寻迹并 灭火,系统工作原理框图如图2.1所示。 图2.1 系统工作原理框图 2.22.2 电电 源源 用六节干电池为整个系统供电。再用三端稳压管转换为电机和单片机需要 的电压。单片机需要5V的电压,所以使用7805为其供电,电动机使用9V的电压, 6个干电池串联直接为其供电。 单片机和电动机能否正常工作,电源供电情况是一个重要方面。为了防止 电源掉电而影响电路调试和程序调试,故采用六节充电电池为整个系统供电。 智能小车引导控制系统的设计与实现 第 9 页 共 30 页 2.32.3 红外寻迹传感器红外寻迹传感器 该智能灭火小车在画有黑线的路面上行驶,由于黑线和路面对光线的反射 系数不同,可根据接收到反射红外线的强弱来判断“道路”黑线。在该模 块中利用了简单、应用也比较普遍的检测方法红外探测法。 红外探测法:利用红外线在不同颜色的物理表面具有不同的反射性质的特 点,在小车行驶过程中不断地向地面发射红外光,如果红外光遇到地面时则发 生漫发射,反射光被装在小车上的红外接收管接收;如果遇到黑线则红外光被 吸收,小车上的红外接收管接收不到红外信号。 传感器的选择:市场上用于红外探测法的器件较多,可以利用反射式传感 器外接简单电路自制探头,也可以使用结构简单、工作性能可靠的集成式红外 探头。RPR220是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发 光二极管,接收器是一个高灵敏度硅平面光电三极管。RPR220价格便宜、体积 小、使用方便、性能可靠、用途广泛,所以该系统中最终选择了RPR220红外反 射传感器作为红外光的发射和接收器件。 经过多次测试、比较,发现把RPR220传感器安装在距离检测物表面68毫 米时,检测效果最好,因为5毫米以下是它的检测盲区,而大于10毫米则很容 易受另外的光电管的干扰。红外寻迹传感器原理图如图2.2所示。 图2.2 红外寻迹传感器原理图 图中可调电阻R3可以调节比较器的门限电压,可方便的调节传感器的灵敏 度。用此电路作为传感器检测与调理电路。 路径识别方案:小车脱离轨道时,根据红外感应器的状态,做出相应的转 向的调整,直到中间的红外感应器重新检测到黑线再恢复正向行驶。现场实测 表明,虽然小车在寻迹过程中有一定的左右摇摆,但只要控制好行驶的速度就 可保证车身基本上接近于沿轨道行驶。 运城学院计算机科学与技术系毕业论文 第 10 页 共 30 页 2.42.4 采用采用 PWMPWM 调速的直流电机调速的直流电机 2.4.1 PWM 的简介 脉宽调制的全称为:Pulse WidthModulator,简称PWM,由于它的特殊性 能,常被用于直流负载回路中、灯具调光或直流电动机调速。 脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过 高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平 进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供 电要么完全有(1),要么完全无(0)。电压或电流源是以一种通(1)或断(0)的重 复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时 候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用 PWM进行编码。 脉宽调制(PWM),控制方式就是采用脉冲宽度调制技术,其工作原理是: 通过改变“接通脉冲”的宽度,使直流电机电枢上的电压的“占空比”改变, 从而改变电枢电压的平均值,控制电机的转速。因此,我们可以通过单片机, 生成固定频率的脉冲信号,通过改变脉冲信号中的“占空比”来控制电机的转 速。 PWM控制可分为单极性调制和双极性调制两种方式,为了实现直流伺服系 统的H型单极模式同频PWM可逆控制,一般需要产生四路驱动信号来实现电机的 正反转切换控制。当PWM控制电路工作时,其中H桥一侧的两路驱动信号的占空 比相同但相位相反,同时随控制信号改变并具有互锁功能;而另一侧上臂为低 电平,下臂为高电平。 2.4.2 H 型电机驱动 直流电机的驱动电路采用H型PWM电路,用单片机控制驱动电路,使之工作 在占空比可调的开关状态,精确调整电动机转速。H型电路可以实现转速和方 向的控制,采用PWM进行直流电机调速,其实就是把波形作用于电机驱动电路 的使用端,因此下面对电机驱动电路进行介绍。驱动电路如图2.3所示。 图2.3 电机驱动电路 智能小车引导控制系统的设计与实现 第 11 页 共 30 页 图2.3所示的是一个简单的直流电机控制电路。电路中,H桥式电机驱动电 路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对场效 应管。根据不同场效应管对的导通情况,电流可能会从左至右或从右至左流过 电机,从而控制电机的转向。 如图2.3所示,当P1.7口为低电平,P1.6口为高电平,此时Q1、Q4导通, Q2、Q3截止,电动机正常工作。改变P1.6口高电平周期,即改变PWM调制脉冲 占空比,可以实现精确调速。 2.4.3 小车原理图 小车原理图如图2.4所示,电机通过L293F芯片控制转动的方向与速度。其 中,SPEED1和SPEED2两个端口通过PWM调节控制两个电机的转速,IN1和IN2控 制左侧电机转动的方向,IN3和IN4控制右侧电机转动的方向。通过对这6个端 口的控制,使小车能够按照预定的轨迹行进。 图2.4 小车原理图 2.52.5 红外火焰传感器红外火焰传感器 远红外火焰传感器能够探测到波长在700纳米1000纳米范围内的红外光, 探测角度为60,其中红外光波长在880纳米附近时,其灵敏度达到最大。远红 外火焰探头将外界红外光的强弱变化转化为电流的变化,通过A/D转换器反映 运城学院计算机科学与技术系毕业论文 第 12 页 共 30 页 为0255范围内数值的变化。外界红外光越强,数值越小;红外光越弱,数值 越大。红外火焰传感器原理图如图2.5所示。 图2.5 红外火焰电路原理图 下面为火焰传感器实测数据,一根蜡烛为火源,室内正常日光灯环境实测 结果如表2.1所示。 表2.1 火焰传感器实测结果 无火源时,对着日光灯0.35V-0.12V 10cm4.98V 20cm4.88V 30cm4.72V 40cm3.77V 50cm2.89V 60cm2.34V 70cm1.92V 80cm1.45V 90cm1.15V 100cm0.96V 红外火焰探头将外界红外光的变化转化为电流的变化,通过A/D转换器反 映为 01023 范围内的数值。外界红外光越强,数值越小。因此越靠近热源, 机器人显示读数越小。根据函数返回值的变化能判断红外光线的强弱,从而能 大致判别出火源的远近。此外,远红外火焰探头探测角度为60。 2.62.6 风扇模块风扇模块 灭火风扇的驱动电压为+5V,为了增强驱动能力,我们用三极管8550做驱 动电路以加大驱动电流。灭火风扇驱动电路如图2.6所示。 智能小车引导控制系统的设计与实现 第 13 页 共 30 页 图2.6 灭火风扇电路原理图 在Uin处接单片机的IO口,通过IO口输出高低电平来控制灭火风扇的启动 和停止。 2.72.7 智能小车整体设计智能小车整体设计 2.7.1 CPU 引脚的设定 如图所示,CPU的P1.0、P1.1控制小车的左侧电机,P1.4、P1.5控制小车 的右侧电机;P3.1输出PWM信号,控制小车电机的转速;P2.4P2.7为火焰传 感器输入信号,分别为前、后、左、右侧的火焰传感器的信号,P2.0P2.2为 循迹传感器输入信号。下面是各引脚在含义: 1. 循迹传感器:左P2.2中P2.1右P2.0 2. 火焰传感器:前P2.4后P2.6左P2.5右P2.7 3. 电机控制: 左P1.0/P1.1右P1.4/P1.5 4. 风扇控制: P3.4 引脚设定图如图2.7所示。 图2.7 引脚设定图 运城学院计算机科学与技术系毕业论文 第 14 页 共 30 页 电机转动由电机控制端口P1控制,其中,P1.0/P1.1控制左侧电机转动, P1.4/P1.5控制右侧电机转动,电机转动表如表2.2所示。 表2.2 电机转动表 左电机右电机 P0.1P0.0 含义 HEXP0.5P0.4 含义 HEX 000000 01 前转 101 前转 1 10 后转 210 后转 2 11 停止 311 停止 3 2.7.2整体设计 小车左右两轮为驱动轮,后万向轮为支撑轮。即左右轮分别用两个转速和 力矩基本完全相同的直流减速电机进行驱动,车体后部装一个万向轮。小车的 整体设计图如图2.8所示。 图2.8 小车整体设计图 智能小车引导控制系统的设计与实现 第 15 页 共 30 页 小车由三个寻迹传感器组成寻迹模块,用于检测黑白线,当中间的寻迹传 感器压线时表示小车没有偏航,左右轮转速相同向前行进;当左边的寻迹传感 器压线时表示小车向右偏航,这时要调节左轮的转速,使小车向左转;当右边 的寻迹传感器压线时表示小车向左偏航,这时要调节右轮的转速,使小车向右 转。 火焰传感器有4个,分别检测前后左右方向上的火源,如果左边的传感器 检测到火源,则小车向左转向前进;如果右边的传感器检测到火源,则小车向 右转向前进,如果前边的传感器检测到火源,则小车向前行进;如果后边的传 感器检测到火源,则小车向后转动180。 通过检测两套传感器的信号,单片机根据程序输出相应的反应信号,控制 两个电动机的转动,以使小车相互协调工作,完成灭火的任务。 运城学院计算机科学与技术系毕业论文 第 16 页 共 30 页 第第 3 章章 软软 件件 设设 计计 在进行微机控制系统设计时,我们根据单片机的具体情况使用Keil C51软 件,采用主流设计语言C语言对单片机进行编程实现各项功能。C语言功能丰富, 表达能力强,目标程序效率高,可移植性好,既具有高级语言的优点,又具有 低级语言的许多特点,应用十分广泛。 3.13.1 智能灭火小车系统总体流程智能灭火小车系统总体流程 此部分是小车运行的核心部分,起着控制小车所有运行状态的作用,具有 导向和决策的功能。程序控制流程图如图3.1所示。 图3.1 控制流程图 系统总体流程是:小车进入驱动后,即先判断是否有火源存在,一旦检测 到有火源,着从出发点沿着黑白线前进接近火源。程序不停的判断火源位置和 行进的线路,把相应的信号发送给电动机从而纠正小车的状态,使小车按照规 定的线路寻找到火源,并将火灭掉。 智能小车引导控制系统的设计与实现 第 17 页 共 30 页 3.23.2 程序流程图程序流程图 1. 小车灭火的主程序软件流程图 如图3.2所示,首先加点后对小车进行初始化,在这个阶段让小车检测火 源,确定自己的位置,同时寻找线路。接着单片机判断是否有火源,如果有火 源存在,启动小车循迹模块程序,让小车前进,当小车找到火源时,停止前进, 这时开启灭火风扇,进行灭火的操作,这时再判断是否将火灭掉,如果火已经 熄灭,则小车继续寻找下一个火源,如果没有熄灭则风扇继续开启。主程序流 程图如图3.2所示。 图3.2 程序流程图 2. 小车循迹模块、火源模块程序软件流程图 寻迹模块程序首先采集寻迹传感器传回的信号,判断当前小车所在的位置, 如果小车正好在线上,则小车继续前进;如果小车左侧压线,说明小车偏左, 则小车右拐前进;如果小车右侧压线,说明小车偏右,则小车左拐前进;如果 运城学院计算机科学与技术系毕业论文 第 18 页 共 30 页 小车没有检测到黑线,说明前面没有路,则小车后转180度,返回;如果小车 三个传感器都检测到黑线,说明小车走到十字路口,则再判断火焰传感器的信 号。 如果火焰传感器的信号显示火焰在小车的前方,则小车继续前进;如果检 测到火焰在小车的左方,则小车左转90度,沿黑白线继续前进;如果小车检测 到火焰在小车的右方,则小车右转90度,沿黑白线继续前进;如果小车检测到 火焰在小车的后方,则小车后转180度,沿黑白线继续前进。 寻迹模块程序流程图如图3.3所示,火焰传感器模块程序流程图如图3.4所 示。 图3.3 寻迹模块图3.4 判断火源位置模块 3.33.3 部分功能代码部分功能代码 1小车转向代码 void run() /电机启动 智能小车引导控制系统的设计与实现 第 19 页 共 30 页 P1=0 x11; void left()/左转 P1=0 x13; void right()/右转 P1=0 x31; void big_right()/右大转 P1=0 x21; void big_left()/左大转 P1=0 x12; void stop()/停止 P1=0 x33; void back()/后退 P1=0 x22; 2小车寻迹代码 void track() unsigned char Num; timer_init(); PWM_ON = 4; /高电平时间档,共10个档位 while(1) Num = P2; Num = Num P0 = Num | 0 xf8; /指示灯 switch(Num) case 0 x02:/前进 run(); STATE_LAST = Num; 运城学院计算机科学与技术系毕业论文 第 20 页 共 30 页 case 0 x04: /左转 left(); STATE_LAST = Num; case 0 x06: /左大转 big_left(); STATE_LAST = Num; case 0 x01: /右转 right(); STATE_LAST = Num; case 0 x03: /右大转 big_right(); STATE_LAST = Num; case 0 x07: /停止 stop(); case 0 x00: /检测不到黑线时查看上一个状态,并做出判断 if(STATE_LAST = 0 x04 | STATE_LAST = 0 x06) /左轮后退 P1 = 0 x02; else if(STATE_LAST = 0 x01 | STATE_LAST = 0 x03) /右轮 后退 P1 = 0 x20; else if(STATE_LAST = 0 x00) left();/左转寻线 else stop(); default: left(); 智能小车引导控制系统的设计与实现 第 21 页 共 30 页 3PWM调速代码 void tim(void) interrupt 1 static unsigned char count; TH0 = (65536 - 100) / 256; TL0 = (65536 - 100) % 256; /定时0.1mS if (count = PWM_ON) PWM = 1; /高电平 count+; if(count = 10)/分为10个档 count = 0; if(PWM_ON != 0) PWM = 0; /低电平 运城学院计算机科学与技术系毕业论文 第 22 页 共 30 页 第第 4 4 章章 测测 试试 结结 果果 1测试仪器 贴有黑色引导线轨迹模拟灭火场地,点燃的蜡烛。 2测试方法 将小车放着场地上,打开小车的电源,让小车自主发现火源(蜡烛),并让 小车自动将火灭掉。 3测试数据及测试结果分析 测试显示,在小车的直线运行过程中,小车会出现左右摇摆的现象,如下 所示。 (1)小车是初始角度的测试显示,小车的初始角度偏移越小,小车在运 行中就越稳定。 (2)通过用PWM调速,结果显示,小车的车速减小时,小车的稳定性提高。 (3)在小车检测到偏移时有两种方案调节小车的角度:方案1,偏离侧车 轮停止,偏移侧车轮前进;方案2,偏离侧车轮后退,偏移侧车轮前进。 智能小车引导控制系统的设计与实现 第 23 页 共 30 页 结结 束束 语语 历经几个月的毕业设计,从最初的资料查找、方案设计,经过最基本的电 路设计、调试过程,再到软件设计、测试,我学习了单片机系统设计的整个过 程。从传感器信号的处理,到单片机接收并处理信号,再到输出信号至外部系 统,通过该作品的设计制作,使我更好的了解了各类传感器,掌握了光电三极 管的使用,并熟悉了单片机的中断和定时器的控制,掌握了大功率驱动芯片 LM339的使用,程序中对各种任务的合理安排,使整体系统能够更好的协同工 作,增强了自己的动手能力,更好的熟悉的了解了一个单片机系统的开发过程。 测试结果表明,本系统实现了设计任务要求,小车采集红外寻迹传感器信 号探测线路,采集火源传感器信号探测火源,并根据单片机控制模块的分析结 果决策和控制下一步的运动形式。该控制系统运用了单片机、红外寻迹传感器, 直流电机,PWM调速,远红外火焰传感器等技术,基本实现了智能灭火小车的 要求。 但是本系统中还存在着不足:小车的直线行进的稳定性未得到很好的解决, 通过测试小车在直线行走时与小车的初始角度、小车的速度、小车的转弯,我 认为小车的稳定性可能还与红外探测器之间的间距、黑带宽度的比值、小车的 惯性等有关。 学习的过程中虽然遇到很多困难,但经过努力克服了困难解决了问题,最 终完成了设计。 通过这次课程设计,使我深刻地认识到学好专业知识的重要性,也理解了 理论联系实际的含义,同时也是对大学四年的学习成果的一个综合检验。这几 个月的设计是对过去所学知识的系统提高和扩充的过程,为今后的发展打下了 良好的基础。 运城学院计算机科学与技术系毕业论文 第 24 页 共 30 页 致致 谢谢 历时三个月的毕业设计已经告一段落。经过自己不断的努力以及赵老师的 耐心指导和热情帮助,本设计已经基本完成。在这段时间里,赵老师严谨的治 学态度和热忱的工作作风令我十分钦佩,他的指导使我对整个毕业设计的思路 有了总体的把握,并耐心的帮我解决了许多实际问题,使我有了很大收获,本 论文也是在赵老师的指导下修改完成的。在此,我要对他表示由衷的感谢,同 时也感谢在整个毕业设计中所有帮助过我的人。 通过这次毕业设计,我深刻地认识到了学好专业知识的重要性,也理解了 理论联系实际的含义,并且检验了大学四年的学习成果。这三个月的设计是对 过去所学知识的系统提高和扩充过程,为今后的发展打下了良好的基础。虽然 在这次设计中对于知识的运用和衔接还不够熟练,但是我将在以后的工作和学 习中继续努力、不断完善。 由于自身水平有限,设计中一定存在很多不足之处,敬请各位老师批评指 正。 智能小车引导控制系统的设计与实现 第 25 页 共 30 页 参参 考考 文文 献献 1胡健主编.单片机原理及接口技术实践教程M.北京:机械工业出版社, 2004 2吴建平.殷战国.曹思榕.李坤垣 红外反射式传感器在自主式寻迹小车 导航中的应用 J 中国测试技术2004(6) 3童诗白,华成英 主编.模拟电子技术基础(第4版) 高等教育出版社 4万永伦,丁杰雄.一种机器人寻线控制系统.电子科技大学学报,2003 5周坚 等编著. 单片机应用与接口技术 机械工业出版社 6杨明.基于光电管寻迹的智能车舵机控制 J 光电技术应用2007(1) 7范立南,谢子殿主编.单片机原理及应用教程M.北京:北京大学出版社, 2006 8黄惠媛,李润国主编.单片机原理与接口技术M.北京:海洋出版社, 2006 9邓岳,周辉,谈英姿.基于MC9S12DG128单片机智能车设计与实现 J - 实验室研究与探索2008(1) 10肖海荣.张吉卫.基于89C52单片机的智能电动车电控系统设计 J - 山东交通学院学报2004(1) 11B.D. Theelen a,*, A.C. Verschueren b, V.V. Reyes Su_arez c, M.P.J. Stevens a, A. Nunez. A scalable single-chip multi-processor architecture with on-chip RTOS kernel. J. 2003: 22-30 12Jayanta Mukherjee a,*, Manfred K. Lang b, S.K. Mitra. Demosaicing of images obtained from single-chip imaging sensors in YUV color space. J. 2005:13-18 运城学院计算机科学与技术系毕业论文 第 26 页 共 30 页 附附 录录 以下是小车的完整源代码 /*- 名称:循迹小车 作者:宋世杰 日期:2011.05 晶振:12m 内容:光电二极管检测黑线,远红外火焰传感器检测火源,通过STC89C51单片机控 制电机的转速改变方向,并控制风扇灭火。 说明:光电检测元件:5通道灰度检测传感器 单片机:STC89C51 小车:UT-CAR-3W-01 电机驱动元件:L293D P1口控制电机转动 P2口检测路线、火源 P3.1口 PWM调速 P3.3口 风扇开关 -*/ #include unsigned char PWM_ON ;/定义高电平时间 unsigned char STATE_LAST; /最后的状态 unsigned char FIRE; /火源的位置 1,2,3,4 分别代表前,左,后,右 sbit PWM = P3 1; /定义调速端口 sbit sign_outfire = P3 3; /定义风扇开关,1为关,0为开 /*void delay_1ms(unsigned int n) /软延时1ms函数 1ms*n unsigned int i; while(n-) for(i=0;i 500) big_left(); find_line(); return 0; /break; if (Fire_P2 = 0 x10 | 0 x20 | 0 x40 | 0 x80) stop(); return 1; /break; Count + ; /灭火函数 outfire(unsigned char Fire_sign) stop(); if (Fire_sign = 0 x20 ) /如果火源在车的左侧,小车左转,直到前部检测到火 焰 big_left(); while(1) if (P2 4 = 1)/如果前部检测到火焰小车停止转动,并开启风扇 stop(); sign_outfire = 0; /给出灭火信号 break; else if(Fire_sign=0 x80)/如果火源在车的右侧小车右转,直到前部检测到火焰 big_right(); while(1) if (P2 4 = 1)/如果前部检测到火焰小车停止转动,并开启风扇 stop(); 运城学院计算机科学与技术系毕业论文 第 30 页 共 30 页 sign_outfire = 0; /给出灭火信号 break; /* 检测完火源方位后前进的函数,边前进,边检测左右是否有火源 /*/ void go_line() unsigned char Line_P2, Fire_P2, Temp; while(1) Temp = P2; Line_P2 = Temp Fire_P2 = Temp P0 = Temp | 0 xf8; /指示灯 if (Fire_P2 = 0 x20 | 0 x80) /如果左和右侧检测到火焰则停止 stop(); outfire(Fire_P2); break; else go_forward(Line_P2); /定时器初始化函数 void timer_init() TMOD |= 0 x01; /定时器设置 0.1ms in 12M crystal TH0 = (65536 - 100) / 256; TL0 = (65536 - 100) % 256; /定时0.1mS IE = 0 x82; /打开中断 TR0 = 1; /主函数 void main() timer_init(); /定时器初始化 PWM_ON = 4; /高电平时间档,共10个档位 智能小车引导控制系统的设计与实现 第 31 页 共 30 页 while(1) if (find_fire() != 1)/先寻找火源,如发现火源则沿线前进灭火,否则停 止 stop(); else go_line(); /*/ /* 定时器中断函数 */ /*/ void tim(void) interrupt 1 static unsigned char count; TH0 = (65536 - 100) / 256; TL0 = (65536 - 100) % 256; /定时0.1mS if (count = PWM_ON) PWM = 1; /高电平 count+; if(count = 10) count = 0; if(PWM_ON != 0) PWM = 0; /低电平
展开阅读全文