智能循迹小车
- 格式:doc
- 大小:448.00 KB
- 文档页数:22
智能循迹小车___设计报告设计报告:智能循迹小车一、设计背景智能循迹小车是一种能够通过感知地面上的线条进行导航的小型机器人。
循迹小车可以应用于许多领域,如仓库管理、物流配送、家庭服务等。
本设计旨在开发一款功能强大、性能稳定的智能循迹小车,以满足不同领域的需求。
二、设计目标1.实现循迹功能:小车能够准确地识别地面上的线条,并按照线条进行导航。
2.提供远程控制功能:用户可以通过无线遥控器对小车进行控制,包括前进、后退、转向等操作。
3.具备避障功能:小车能够识别和避开遇到的障碍物,确保行驶安全。
4.具备环境感知功能:小车能够感知周围环境,包括温度、湿度、光照等参数,并将数据传输给用户端。
5.高稳定性和可靠性:设计小车的硬件和软件应具备较高的稳定性和可靠性,以保证长时间的工作和使用。
三、设计方案1.硬件设计:(1) 采用Arduino控制器作为主控制单元,与传感器、驱动器等硬件模块进行连接和交互。
(2)使用红外传感器作为循迹传感器,通过检测地面上的线条来实现循迹功能。
(3)使用超声波传感器来检测小车前方的障碍物,以实现避障功能。
(4)添加温湿度传感器和光照传感器,以提供环境感知功能。
(5)将无线模块与控制器连接,以实现远程控制功能。
2.软件设计:(1) 使用Arduino编程语言进行程序设计,编写循迹、避障和远程控制的算法。
(2)设计用户界面,通过无线模块将控制信号发送给小车,实现远程控制。
(3)编写数据传输和处理的程序,将环境感知数据发送到用户端进行显示和分析。
四、实施计划1.硬件搭建:按照设计方案中的硬件模块需求,选购所需元件并进行搭建。
2.软件开发:根据设计方案中的软件设计需求,编写相应的程序并进行测试。
3.功能调试:对小车的循迹、避障、远程控制和环境感知功能进行调试和优化。
4.性能测试:使用不同场景和材料的线条进行测试,验证小车的循迹性能。
5.用户界面开发:设计用户端的界面,并完成与小车的远程控制功能的对接。
智能循迹小车的引言概述智能循迹小车是近年来兴起的一种智能机器人,它能够通过内置的传感器和程序,自动识别和跟踪预定的路径。
这种小车使用了先进的计算机视觉技术和控制算法,能够在各种环境中准确地进行循迹。
智能循迹小车在许多领域中都得到了广泛的应用,包括工业自动化、物流运输、仓储管理等。
本文将对智能循迹小车的原理、技术和应用进行详细阐述。
智能循迹小车的原理和技术1. 传感器技术a. 摄像头传感器:通过摄像头传感器,智能循迹小车可以捕捉环境中的图像,并进行图像处理和识别。
b. 距离传感器:距离传感器可以帮助智能循迹小车感知周围环境中的障碍物,并避免碰撞。
c. 地盘传感器:地盘传感器用于检测小车在路径上的位置和姿态,以便进行准确的定位和导航。
2. 计算机视觉技术a. 特征提取:通过计算机视觉技术,智能循迹小车可以从摄像头捕捉的图像中提取关键特征,例如路径轮廓、颜色等。
b. 物体识别:利用深度学习算法,智能循迹小车可以识别环境中的物体,例如道路标志和交通信号灯,以便做出相应的反应。
c. 路径规划:根据图像处理和物体识别的结果,智能循迹小车可以计算出最优的路径规划,以达到快速而安全地循迹的目的。
3. 控制算法a. PID控制算法:智能循迹小车使用PID控制算法来实现精确的速度和方向控制,以便按照预定的路径进行循迹。
b. 路径校正算法:当智能循迹小车发现偏离路径时,会通过路径校正算法对速度和方向进行调整,以便重新回到预定的路径上。
智能循迹小车的应用1. 工业自动化a. 生产线物料运输:智能循迹小车可以自动将物料从一个地点运输到另一个地点,减少人力成本和提高生产效率。
b. 仓储管理:智能循迹小车可以在仓库中自动识别货物并进行搬运和分拣,提升仓储管理的效率和精确度。
2. 物流运输a. 快递配送:智能循迹小车可以在城市道路上按照预定的路径进行循迹,实现快递的自动配送和准时派送。
b. 高速公路货物运输:智能循迹小车可以在高速公路上准确无误地进行循迹,减少人为驾驶过程中的车祸风险。
智能循迹小车设计目录•项目背景与意义•系统总体设计•循迹算法研究•控制系统设计•调试与测试•项目成果展示•总结与展望01项目背景与意义智能循迹小车概述定义智能循迹小车是一种基于微控制器、传感器和执行器等技术的自主导航小车,能够按照预定路径进行自动循迹。
工作原理通过红外、超声波等传感器感知周围环境信息,将感知数据传输给微控制器进行处理,微控制器根据预设算法控制执行器调整小车行驶状态,实现循迹功能。
随着工业自动化的发展,智能循迹小车在生产线、仓库等场景中的应用需求不断增加。
自动化需求教育领域需求娱乐领域需求智能循迹小车作为教学实验平台,在高等教育、职业教育等领域具有广泛应用前景。
智能循迹小车可以作为玩具或模型车进行娱乐竞技活动,满足消费者休闲娱乐需求。
030201市场需求分析通过本项目的研究与实践,掌握智能循迹小车的核心技术,包括传感器技术、微控制器技术、控制算法等。
技术目标将智能循迹小车应用于实际场景中,提高生产效率、降低成本、提升产品品质等方面的效益。
应用目标通过智能循迹小车的研发与教学应用,培养学生动手实践能力、创新精神和团队协作能力。
教育意义推动智能循迹小车相关产业的发展,促进就业和经济增长,提升国家科技竞争力。
社会意义项目目标与意义02系统总体设计主控制器传感器模块电机驱动模块电源管理模块总体架构设计01020304负责接收和处理传感器数据,控制小车运动。
包括红外传感器、超声波传感器等,用于感知环境和障碍物。
驱动小车前进、后退、转弯等动作。
为整个系统提供稳定可靠的电源。
硬件选型及配置选用高性能、低功耗的微控制器,如STM32系列。
选用高灵敏度、低误差的传感器,如红外反射式传感器、超声波测距传感器等。
选用高效、稳定的电机驱动器,如L298N电机驱动板。
选用合适的电池和电源管理芯片,确保系统长时间稳定运行。
主控制器传感器模块电机驱动模块电源管理模块初始化模块传感器数据处理模块运动控制模块调试与测试模块软件功能划分负责系统启动时的初始化工作,包括硬件初始化、参数设置等。
引言概述:智能循迹小车作为一种集机械、电器、计算机技术于一体的智能装置,能够通过识别地面线路的特征自主导航。
在近年来得到广泛关注的智能交通领域中,智能循迹小车作为一种智能交通工具备受瞩目。
本文通过对智能循迹小车的答辩问题的详细阐述,对其原理、应用及未来发展进行全面分析。
正文内容:一、智能循迹小车的原理1.1传感器技术在智能循迹小车中的应用1.2如何实现循迹导航功能1.3智能循迹小车的导航算法及流程1.4智能循迹小车的基本工作原理1.5循迹小车中常用的传感器类型及其工作原理二、智能循迹小车的应用2.1智能循迹小车在工业自动化中的应用2.2智能循迹小车在仓储物流中的应用2.3智能循迹小车在城市交通中的应用2.4智能循迹小车在智能家居中的应用2.5智能循迹小车在医疗保健中的应用三、智能循迹小车的优势及挑战3.1智能循迹小车的优势分析3.1.1提高工作效率和准确性3.1.2减少人力成本和劳动强度3.1.3可以应对复杂环境和不确定性3.2智能循迹小车的挑战分析3.2.1对传感器精度要求较高3.2.2对环境适应能力的要求3.2.3需要解决的安全与隐私问题四、智能循迹小车的未来发展4.1智能循迹小车的技术演进趋势4.2智能循迹小车的市场前景与发展方向4.3智能循迹小车与其他智能交通系统的结合4.4智能循迹小车在领域的应用五、智能循迹小车的发展趋势与挑战5.1智能循迹小车的发展趋势分析5.1.1多模态传感器融合技术的应用5.1.2智能循迹小车与无线通信技术的结合5.1.3人机交互技术在智能循迹小车中的应用5.2智能循迹小车的发展挑战与解决方案5.2.1传感器故障和数据处理问题5.2.2安全性和隐私保护的挑战5.2.3法律法规和道德伦理问题总结:智能循迹小车作为一种集机械、电器、计算机技术于一体的智能装置,具有广阔的应用前景。
本文从智能循迹小车的原理、应用、优势与挑战以及发展趋势与挑战等方面进行了全面的阐述。
未来,智能循迹小车将继续发展,不断提高自身的性能,为各个领域带来更多的便利与效益。
循迹避障智能小车设计一、硬件设计1、车体结构智能小车的车体结构通常采用四轮驱动或两轮驱动的方式。
四轮驱动能够提供更好的稳定性和动力,但结构相对复杂;两轮驱动则较为简单,但在稳定性方面可能稍逊一筹。
在选择车体结构时,需要根据实际应用场景和需求进行权衡。
为了保证小车的灵活性和适应性,车架材料一般选择轻质且坚固的铝合金或塑料。
同时,合理设计车轮的布局和尺寸,以确保小车能够在不同的地形上顺利行驶。
2、传感器模块(1)循迹传感器循迹传感器是实现小车循迹功能的关键部件。
常见的循迹传感器有光电传感器和红外传感器。
光电传感器通过检测反射光的强度来判断黑线的位置;红外传感器则利用红外线的反射特性来实现循迹。
在实际应用中,可以根据小车的运行速度和精度要求选择合适的传感器。
为了提高循迹的准确性,通常会在小车的底部安装多个传感器,形成传感器阵列。
通过对传感器信号的综合处理,可以更加精确地判断小车的位置和行驶方向。
(2)避障传感器避障传感器主要用于检测小车前方的障碍物。
常用的避障传感器有超声波传感器、激光传感器和红外测距传感器。
超声波传感器通过发射和接收超声波来测量距离;激光传感器则利用激光的反射来计算距离;红外测距传感器则是根据红外线的传播时间来确定距离。
在选择避障传感器时,需要考虑其测量范围、精度、响应速度等因素。
一般来说,超声波传感器测量范围较大,但精度相对较低;激光传感器精度高,但成本较高;红外测距传感器则介于两者之间。
3、控制模块控制模块是智能小车的核心部分,负责处理传感器数据、控制电机驱动和实现各种逻辑功能。
常见的控制模块有单片机(如 Arduino、STM32 等)和微控制器(如 PIC、AVR 等)。
单片机具有开发简单、资源丰富等优点,适合初学者使用;微控制器则在性能和稳定性方面表现更优,适用于对系统要求较高的场合。
在实际设计中,可以根据需求和个人技术水平选择合适的控制模块。
4、电机驱动模块电机驱动模块用于控制小车的电机运转,实现前进、后退、转弯等动作。
基于单片机的智能循迹小车设计智能循迹小车是一种基于单片机控制的小型车辆,通过传感器检测路面信息,结合预设路线实时调整行驶方向,实现自动循迹行驶。
智能循迹小车在无人驾驶、智能物流、探险救援等领域具有广泛的应用前景。
智能循迹小车的硬件主要包括单片机、传感器、电机和电源。
其中,单片机作为整个系统的控制中心,负责接收传感器信号、处理数据并输出控制指令;传感器用于检测路面信息,一般选用红外线传感器或激光雷达;电机选用直流电机或步进电机,为小车提供动力;电源为整个系统提供电能。
智能循迹小车的软件设计主要实现传感器数据采集、数据处理、控制指令输出等功能。
具体来说,软件通过定时器控制单片机不断采集路面信息,结合预设路线信息进行数据分析和处理,并根据分析结果输出控制指令,实现小车的自动循迹。
为提高智能循迹小车的稳定性和精度,需要对算法进行优化。
常用的算法包括PID控制、模糊控制等。
通过对算法的优化,可以实现对路面信息的精确检测,提高小车的循迹精度和稳定性。
为验证智能循迹小车的实际效果,需要进行相关测试。
可以在平坦的路面上进行空载测试,检验小车的稳定性和循迹精度;可以通过加载重量、改变路面条件等方式进行负载测试,以检验小车在不同条件下的性能表现;可以结合实际应用场景进行综合测试,以验证智能循迹小车在实际应用中的效果。
测试环境的选择要具有代表性,能够覆盖实际应用中可能遇到的各种情况。
测试过程中要保持稳定的行驶速度,以获得准确的测试数据。
对于测试过程中出现的问题,要及时记录并分析原因,以便对系统进行改进。
测试完成后,要对测试数据进行整理和分析,评估系统的性能表现,提出改进意见。
通过以上测试,我们发现基于单片机的智能循迹小车在循迹精度、稳定性等方面表现良好,能够满足实际应用中的需求。
同时,通过对算法的优化和硬件的改进,可以进一步提高小车的性能表现。
本文介绍了基于单片机的智能循迹小车的设计和实现过程。
通过合理选择硬件和优化软件算法,实现了小车的自动循迹功能。
智能循迹避障小车设计智能循迹避障小车的核心功能在于能够沿着特定的轨迹行驶,同时能够避开行驶过程中遇到的障碍物。
要实现这两个功能,需要在硬件和软件两个方面进行精心设计。
在硬件方面,首先是小车的车体结构。
通常选用坚固且轻便的材料,以保证小车的稳定性和灵活性。
车轮的选择也很重要,需要具备良好的抓地力和转动性能。
传感器是实现智能循迹避障功能的关键部件。
对于循迹功能,常用的是光电传感器或摄像头。
光电传感器通过检测地面上的反射光来判断轨迹,而摄像头则可以通过图像识别技术获取更精确的轨迹信息。
在避障方面,超声波传感器或红外传感器是常见的选择。
超声波传感器通过发射超声波并接收反射波来测量与障碍物的距离,红外传感器则通过检测障碍物反射的红外线来实现避障功能。
控制模块是小车的大脑,负责处理传感器采集到的数据,并控制电机的运转。
常用的控制芯片有单片机,如 Arduino 或 STM32 等。
电机驱动模块则用于将控制模块输出的信号转换为电机所需的驱动电流,以实现小车的前进、后退、转弯等动作。
电源模块为整个小车系统提供稳定的电力供应。
一般选择可充电的锂电池,其具有较高的能量密度和较长的续航能力。
在软件方面,编写高效可靠的程序是实现智能循迹避障功能的关键。
首先是传感器数据的采集和处理程序。
对于光电传感器或摄像头采集到的轨迹信息,需要进行滤波、放大等处理,以提高数据的准确性和可靠性。
对于超声波传感器或红外传感器采集到的避障数据,需要进行距离计算和障碍物判断。
控制算法是软件的核心部分。
对于循迹功能,常用的算法有 PID 控制算法。
通过不断调整电机的转速和转向,使小车能够准确地沿着轨迹行驶。
对于避障功能,通常采用基于距离的控制策略。
当检测到障碍物距离较近时,及时控制小车转向或停止,以避免碰撞。
电机控制程序负责根据控制算法的输出结果,精确控制电机的运转。
这需要对电机的特性有深入的了解,以实现平稳、快速的运动控制。
为了提高小车的性能和稳定性,还需要进行系统的调试和优化。
智能循迹小车实验报告一、实验目的本次实验旨在设计并实现一款能够自主循迹的智能小车,通过传感器检测路径信息,控制小车的运动方向,使其能够沿着预定的轨迹行驶。
通过本次实验,深入了解自动控制、传感器技术和单片机编程等方面的知识,提高实际动手能力和问题解决能力。
二、实验原理1、传感器检测本实验采用红外传感器来检测小车下方的黑线轨迹。
红外传感器由红外发射管和接收管组成,当发射管发出的红外线照射到黑色轨迹时,反射光较弱,接收管接收到的信号较弱;当照射到白色区域时,反射光较强,接收管接收到的信号较强。
通过比较接收管的信号强度,即可判断小车是否偏离轨迹。
2、控制算法根据传感器检测到的轨迹信息,采用 PID 控制算法(比例积分微分控制算法)来计算小车的转向控制量。
PID 算法通过对误差(即小车偏离轨迹的程度)进行比例、积分和微分运算,得到一个合适的控制输出,使小车能够快速、准确地回到轨迹上。
3、电机驱动小车的动力由直流电机提供,通过电机驱动芯片(如 L298N)来控制电机的正反转和转速。
根据控制算法计算出的转向控制量,调整左右电机的转速,实现小车的转向和前进。
三、实验器材1、硬件部分单片机开发板(如 STM32 系列)红外传感器模块直流电机及驱动模块电源模块小车底盘及车轮杜邦线、面包板等2、软件部分Keil 等单片机编程软件串口调试助手四、实验步骤1、硬件搭建将红外传感器模块安装在小车底盘下方,使其能够检测到黑线轨迹。
将直流电机与驱动模块连接,并安装在小车底盘上。
将单片机开发板、传感器模块、驱动模块和电源模块通过杜邦线连接起来,搭建好实验电路。
2、软件编程使用单片机编程软件,编写传感器检测程序、控制算法程序和电机驱动程序。
通过串口调试助手,将编写好的程序下载到单片机开发板中。
3、调试与优化启动小车,观察其在轨迹上的行驶情况。
根据小车的实际行驶情况,调整 PID 控制算法的参数,优化小车的循迹性能。
不断测试和改进,直到小车能够稳定、准确地沿着轨迹行驶。
智能循迹小车随着科技的飞速发展,无人驾驶技术逐渐成为现代交通领域的重要组成部分。
其中,智能循迹小车作为一种先进的无人驾驶车辆,具有广泛的应用前景。
本文将介绍智能循迹小车的基本原理、系统构成、设计方法以及应用场景。
智能循迹小车通过传感器感知周围环境,包括道路标志、其他车辆、行人等信息,再通过控制系统对感知到的信息进行处理和分析,制定出相应的行驶策略,最终控制车辆的行驶。
其中,循迹小车通过特定的传感器识别道路标志,并沿着标志所指示的路径行驶,实现自动循迹。
传感器系统:用于感知周围环境,包括道路标志、其他车辆、行人等信息。
常见的传感器包括激光雷达、摄像头、超声波等。
控制系统:对传感器感知到的信息进行处理和分析,制定出相应的行驶策略,并控制车辆的行驶。
常用的控制系统包括基于规则的控制、模糊控制、神经网络等。
执行机构:根据控制系统的指令,控制车辆的行驶速度、方向等。
常见的执行机构包括电机、舵机等。
电源系统:提供电力支持,保证小车的正常运行。
常用的电源包括锂电池、超级电容器等。
硬件设计:根据需求选择合适的传感器、控制系统、执行机构和电源等硬件设备,并对其进行集成设计,保证各个设备之间的兼容性和稳定性。
软件设计:编写控制系统的程序,实现对车辆的控制。
常用的编程语言包括C++、Python等。
在软件设计中需要考虑如何处理传感器感知到的信息,如何制定行驶策略,以及如何控制执行机构等方面的问题。
调试与优化:通过实验测试小车的性能,发现问题并进行优化。
常见的调试和优化方法包括调整控制系统的参数、更换硬件设备等。
智能循迹小车具有广泛的应用前景,主要包括以下几个方面:交通管理:用于交通巡逻、交通管制等,提高交通管理效率。
应急救援:在灾难现场进行物资运输、人员疏散等任务,提高应急救援效率。
自动驾驶:作为无人驾驶车辆的样机进行研究和发展,推动自动驾驶技术的进步。
教育科研:用于高校和研究机构的科研项目,以及学生的实践和创新项目。
摘要进入二十一世纪,随着计算机技术和科学技术的不断进步,机器人技术较以往已经有了突飞猛进的提高,智能循迹小车即带有视觉和触觉的小车就是其中的典型代表。
本文论述了基于单片机的智能循迹小车的控制过程。
智能循迹是基于自动引导机器人系统,用以实现小车自动识别路线,以及选择正确的路线。
智能循迹小车是一个运用传感器、单片机、电机驱动及自动控制等技术来实现按照预先设定的模式下,不受人为管理时能够自动实现循迹导航的高新科技。
该技术已经应用于无人驾驶机动车,无人工厂,仓库,服务机器人等多种领域。
本设计采用AT89C51单片机作为小车的控制核心;用红外探测传感器作为小车的循迹模块来识别白色路面中央的黑色引导线,采集信号并将信号转换为能被单片机识别的数字信号;采用驱动芯片L298构成双控制直流电机,其中软件系统采用C程序,本设计的电路结构简单,容易实现,可靠性高。
关键词:单片机;智能;自动循迹。
目录1 绪论 (1)2 设计要求 ................................................................................................ 错误!未定义书签。
3 系统设计分析 ........................................................................................ 错误!未定义书签。
4 系统基本组成 ........................................................................................ 错误!未定义书签。
5 设计步骤及流程图 ................................................................................ 错误!未定义书签。
6系统所需元器件 (3)7主要模块介绍 (3)7.1 L298驱动模块简介 (3)7.2 LM016L显示模块 (4)8小车运动逻辑 (6)9系统原理图 (6)10系统程序设计 (7)11系统仿真 (17)12结果分析 (17)13感想与收获 (19)1 绪论智能循迹小车又被称为Automated Guided Vehicle,简称AGV,是二十世纪五十年代研发出来的新型智能搬运机器人。
智能循迹小车是指装备如电磁,光学或其他自动导引装置,可以沿设定的引导路径行驶,安全的运输车。
工业应用中采用充电蓄电池为主要的动力来源,可通过电脑程序来控制其选择运动轨迹以及其它动作,也可把电磁轨道黏贴在地板上来确定其行进路线,无人搬运车通过电磁轨道所带来的讯息进行移动与动作,无需驾驶员操作,将货物或物料自动从起始点运送到目的地。
AGV的另一个特点是高度自动化和高智能化,可以根据仓储货位要求、生产工艺流程等改变而灵活改变行驶路径,而且改变运行路径的费用与传统的输送带和传送线相比非常低廉。
AGV小车一般配有装卸机构,可与其它物流设备自动接口,实现货物装卸与搬运的全自动化过程。
此外,AGV小车依靠蓄电池提供动力,还有清洁生产、运行过程中无噪音、无污染的特点,可用在工作环境清洁的地方。
随着社会的不断发展,科学技术水平的不断提高,人们希望创造出一种来代替人来做一些非常危险,或者要求精度很高等其他事情的工具,于是就诞生了机器人这门学科。
世界上诞生第一台机器人诞生于1959年,至今已有50多年的历史,机器人技术也取得了飞速的发展和进步,现已发展成一门包含:机械、电子、计算机、自动控制、信号处理,传感器等多学科为一体的性尖端技术。
循迹小车共历了三代技术创新变革:第一代循迹小车是可编程的示教再现型,不装载任何传感器,只是采用简单的开关控制,通过编程来设置循迹小车的路径与运动参数,在工作过程中,不能根据环境的变化而改变自身的运动轨迹。
支持离线编程的第二代循迹小车具有一定感知和适应环境的能力,这类循迹小车装有简单的传感器,可以感觉到自身的的运动位置,速度等其他物理量,电路是一个闭环反馈的控制系统,能适应一定的外部环境变化。
第三代循迹小车是智能的,目前在研究和发展阶段,以多种外部传感器构成感官系统,通过采集外部的环境信息,精确地描述外部环境的变化。
智能循迹小车,能独立完成任务,有其自身的知识基础,多信息处理系统,在结构化或半结构化的工作环境中,根据环境变化作出决策,有一定的适应能力,自我学习能力和自我组织的能力。
为了让循迹小车能独立工作,一方面应具有较高的智慧和更广泛的应用,研究各种新机传感器,另一方面,也掌握多个多类传感器信息融合的技术,这样循迹小车可以更准确,更全面的获得所处环境的信息2 设计要求设计一个智能循迹小车,要求小车通过红外探测器自动探测路面轨迹标示,将数据传送给单片机进而控制电动机的转速,做到自动转向,自动行驶。
同时通过显示屏实时显示循迹小车的运动状态,直行、左转、右转、停止。
3系统设计分析根据设计要求,将系统分为控制模块、检测模块、电机驱动模块。
其中信号检测部分通过红外探测器检测并将信号传回单片机进行处理。
控制部分的作用是接收并处理传感器检测到的信号,通过判断信号的类别控制小车的动作同时控制显示屏的显示状态。
本系统采用AT89C51单片机,其特点是小型、快速、低功耗、I/O口资源丰富等,能够满足本小车的设计要求。
采用两个直流电机驱动,电路简单,成本不高。
电机的驱动芯片采用L298,该芯片有四路输出,可以驱动一个四相步进电机或两个直流电机,四路总电流可达4A,输出电压最高可达46V,可以直接用单片机I/O口的输出信号来控制。
检测模块采用红外探测器。
红外探测模块主要由红外感光管、电压比较器、敏感调节器组成。
最左边是红外感光管,中间的黑色芯片是电压比较器,绿色的是敏感调节器。
4系统基本组成5设计步骤及流程图1)根据设计要求,确定控制方案。
2)画出程序流程图,使用C语言进行编程,运用Keil C进行模拟调试。
3)利用Proteus设计合理的硬件原理图。
4)进行仿真调试以实现控制功能。
6系统所需元器件单片机AT89C51、瓷片电容CAP30pf、晶振CRYSTAL12MHZ、电解电容CAP-ELEC、按钮BUTTON、电阻RES、L298、COMPIM、MOTOR-ENCODER、RESPACK-8、SWITCH。
7主要模块介绍7.1 L298驱动模块简介L298驱动模块:采用L298作为电机驱动芯片。
L298具有高电压、大电流、响应频率高的全桥驱动芯片,一片L298可以分别控制两个直流电机,并且带有控制使能端。
该电机驱动芯片驱动能力强、操作方便,稳定性好,性能优良。
L298的使能端可以外接电平控制,也可以利用单片机进行软件控制,满足各种复杂电路的需要。
另外,L298的驱动功率较大,能够根据输入电压的大小输出不同的电压和功率,解决了负载能力不够的问题表7.1 L298引脚标号与功能引脚编号名称功能1 电流传感器A 在该引脚和地之间接小阻值电阻可用来检测电流2 输出引脚1 内置驱动器A的输出端1,接至电机A3 输出引脚2 内置驱动器A的输出端2,接至电机A4 电机电源端电机供电输入端,电压可达46V5 输入引脚1 内置驱动器A的逻辑控制输入端16 使能端A 内置驱动器A的使能端7 输入引脚2 内置驱动器A的逻辑控制输入端28 逻辑地逻辑地9 逻辑电源端逻辑控制电路的电源输入端为5V10 输入引脚3 内置驱动器B的逻辑控制输入端111 使能端B 内置驱动器B的使能端12 输入引脚4 内置驱动器B的逻辑控制输入端213 输出引脚3 内置驱动器B的输出端1,接至电机B14 输出引脚4 内置驱动器B的输出端2,接至电机B15 电流传感器B 在该引脚和地之间接小阻值电阻可用来检测电流7.2 LM016L显示模块1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。
引脚符号功能说明1 VSS 一般接地2 VDD 接电源(+5V)3 V0 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生"鬼影",使用时可以通过一个10K的电位器调整对比度)。
4 RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5 RW RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
6 E E(或EN)端为使能(enable)端,写操作时,下降沿使能。
读操作时,E高电平有效7 DB0 低4位三态、双向数据总线0位(最低位)8 DB1 低4位三态、双向数据总线1位9 DB2 低4位三态、双向数据总线2位10 DB3 低4位三态、双向数据总线3位11 DB4 高4位三态、双向数据总线4位12 DB5 高4位三态、双向数据总线5位13 DB6 高4位三态、双向数据总线6位14 DB7 高4位三态、双向数据总线7位(最高位)(也是busy flag)15 BLA 背光电源正极16 BLK 背光电源负极8小车运动逻辑表8.1 小车运动逻辑HZ HY 左电机右电机小车1 1 低速低速直行0 1 高速低速右转1 0 低速高速左转0 0 0 0 停止9系统原理图10系统程序设计#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define LCD_IO P0 //定义P0口与LCD1602的数据口相接/***********************LCD1602接线引脚定义**************************/ #define LCD_IO P0 //定义P2口与LCD1602的数据口相接sbit LCD_RS = P2^6; //数据、命令选择端1为数据sbit LCD_RW = P2^5; //读、写选择端1为读sbit LCD_EN = P2^7; //使能控制sbit LCD_BUSY=LCD_IO^7; //忙碌标志位/**********************另外相关的定*********************************/#define HIGH 1#define LOW 0#define TURE 1#define FALSE 0#define uchar unsigned char#define uint unsigned int/**********************输入方式设置**************************** */#define LCD_AC_AUTO_INCREMENT 0x06 //数据读、写操作后,AC自动增一#define LCD_AC_AUTO_DECREASE 0x04 //数据读、写操作后,AC自动减一#define LCD_MOVE_ENABLE 0x05 //数据读、写操作,画面平移#define LCD_MOVE_DISENABLE 0x04 //数据读、写操作,画面不动#define LCD_GO_HOME 0x02 //AC=0,光标、画面回HOME位#define LCD_DISPLAY_ON 0x0C //显示开#define LCD_DISPLAY_OFF 0x08 //显示关#define LCD_CURSOR_ON 0x0A //光标显示#define LCD_CURSOR_OFF 0x08 //光标不显示#define LCD_CURSOR_BLINK_ON 0x09 //光标闪烁#define LCD_CURSOR_BLINK_OFF 0x08 //光标不闪烁#define LCD_LEFT_MOVE 0x18 //LCD显示左移一位#define LCD_RIGHT_MOVE 0x1C //LCD显示右移一位#define LCD_CURSOR_LEFT_MOVE 0x10 //光标左移一位#define LCD_CURSOR_RIGHT_MOVE 0x14 //光标右移一位#define LCD_DISPLAY_DOUBLE_LINE 0x38 //两行显示,8位数据端口#define LCD_DISPLAY_SINGLE_LINE 0x30 //单行显示#define LCD_CLEAR_SCREEN 0X01 //清屏/***********************LCD1602地址相关******************************/ #define LINE1_HEAD 0x80 //第一行DDRAM起始地址#define LINE2_HEAD 0xc0 //第二行DDRAM起始地址#define LINE1 0 //第一行#define LINE2 1 //第二行#define LINE_LENGTH 16 //每行的最大字符长度/*************************以下是函数的申明部*************************/ void LCD_Init(void); //LCD1602初始化void LCD_Write_Command(uchar); // 写命令void LCD_Write_Data(uchar); //写数据void LCD_Flash(uchar); //LCD 画面闪烁void LCD_Char(uchar, uchar, uchar); //在第几行第几列显示一个字符void LCD_Str(uchar, uchar, char *); //从第几行第几列开始显示一个字符串void DelayMs(uchar); //延迟毫秒void DelayUs(uchar); //延迟微秒void LCD_Check_Busy(void); //LCD 忙碌检测uchar high_time1; //定义变量uint zkb1,zkb2;uchar count1;uchar high_time1;uchar count2;uchar high_time2;sbit Output1=P1^0;sbit Output2=P1^1;sbit HZ = P3^6;sbit HY = P3^7;sbit Z1 = P1^2;sbit Z2 = P1^3;sbit Y1 = P1^4;sbit Y2 = P1^5;void Timer0Init(void);//函数的声明void Timer1Init(void);void Pwm_set1(uint zkb);void Pwm_set2(uint zkb);void xunji(unsigned char vx);void LCD_Check_Busy(void);/************延迟函数*******************************/ void DelayUs(uchar us)//delay us{unsigned char uscnt;uscnt=us>>1; /* Crystal frequency in 12MHz*/while(--uscnt);}void DelayMs(uchar ms)//delay Ms{while(--ms){DelayUs(250);DelayUs(250);DelayUs(250);DelayUs(250);}}void LCD_Init(){DelayMs(15); //延迟15ms,等待LCD电源稳定,使其进入工作状态LCD_IO = 0x00;LCD_Write_Command(LCD_DISPLAY_DOUBLE_LINE);DelayMs(5);LCD_Write_Command(LCD_DISPLAY_DOUBLE_LINE);DelayMs(5);LCD_Write_Command(LCD_DISPLAY_DOUBLE_LINE); //显示模式设置为两行显示,8位数据接口,5*8点阵DelayMs(5);LCD_Write_Command(LCD_AC_AUTO_INCREMENT | LCD_MOVE_DISENABLE); //数据读、写操作后,AC自动增一,画面不动DelayMs(5);LCD_Write_Command(LCD_DISPLAY_ON | LCD_CURSOR_OFF); //显示开,光标不显示DelayMs(5);LCD_Write_Command(LCD_CLEAR_SCREEN); //清除LCD显示内容}/************LCD1602写指令*******************************/void LCD_Write_Command(uchar com){LCD_Check_Busy();LCD_RS = LOW;LCD_RW = LOW;_nop_(); //一个_nop_();是一个机器周期,是1usLCD_EN = HIGH;LCD_IO = com;LCD_EN = LOW;}/*****************LCD1602写数据**************************/void LCD_Write_Data(uchar dat){LCD_Check_Busy();LCD_RS = HIGH;LCD_RW = LOW;_nop_();LCD_EN=HIGH;LCD_IO=dat;LCD_EN=LOW;}/**********************显示一个字节**************************/void LCD_Char(uchar x, uchar line, uchar dat) //从第x开始写一个字节{unsigned char address;if (line == LINE1) // line=0,为第一行address = LINE1_HEAD + x;else // 否则为第二行address = LINE2_HEAD + x;LCD_Write_Command(address);LCD_Write_Data(dat);}/******************LCD1602显示字符串*********************/void LCD_Str(uchar x,uchar line,uchar *Str) //从第line行的第x位置开始显示字符串{uchar i = x;if (line == LINE1){while( *Str != '\0')LCD_Char(i++, 0, *Str++);}else{while( *Str != '\0')LCD_Char(i++, 1, *Str++);}}/***************************LCD忙碌状态*******************************/ void LCD_Check_Busy(void) //检测LCD状态,看它是不是还在忙呢{do{LCD_EN=0;LCD_RS=0;LCD_RW=1;LCD_IO=0xff;LCD_EN=1;}while (LCD_BUSY==1);LCD_EN=0;}/*****************屏幕闪烁********************/void LCD_Flash(uchar time) //控制停留时间{LCD_Write_Command(LCD_DISPLAY_OFF); //关闭显示DelayMs(time); //延时LCD_Write_Command(LCD_DISPLAY_ON); //开显示DelayMs(time);LCD_Write_Command(LCD_DISPLAY_OFF); //关闭显示DelayMs(time); //延时LCD_Write_Command(LCD_DISPLAY_ON); //开显示DelayMs(time);}void Pwm_set1(uint zkb){high_time1=zkb;}void Pwm_set2(uint zkb){high_time2=zkb;}void Timer0Init(void) // AUXR &= 0x7F; //定时器时钟12T模式{TMOD &= 0xF0; //设置定时器模式TMOD |= 0x01; //设置定时器模式TL0 = 0x66; //设置定时初值TH0 = 0xFC; //设置定时初值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时EA=1;//开总中断ET0=1;//开定时器0中断}void Timer1Init(void) // AUXR &= 0x7F; //定时器时钟12T模式{TMOD &= 0x0F; //设置定时器模式TMOD |= 0x10; //设置定时器模式TL1 = 0x66; //设置定时初值TH1 = 0xFC; //设置定时初值TF1 = 0; //清除TF0标志TR1 = 1; //定时器0开始计时EA=1;//开总中断ET1=1;//开定时器1中断}void serve_T0() interrupt 1 using 1{TL0 = 0x66; //设置定时初值TH0 = 0xFC; //设置定时初值if(++count1<=(high_time1)){Output1=1;}else if(count1<=100){Output1=0;}else count1=0;}void serve_T1() interrupt 3{TL1 = 0x66; //设置定时初值TH1 = 0xFC; //设置定时初值if(++count2<=(high_time2)){Output2=1;}else if(count2<=100){Output2=0;}else count2=0;}void go (uchar S){Pwm_set1(S);Pwm_set2(S);Z1=1;Z2=0;Y1=1;Y2=0;LCD_Str(5,1,"GO ! "); }void right(void){Pwm_set1(80);Pwm_set2(30);Z1=1;Z2=0;Y1=1;Y2=0;LCD_Str(5,1,"TURN R"); }void left(void){Pwm_set1(30);Pwm_set2(80);Z1=1;Z2=0;Y1=1;Y2=0;LCD_Str(5,1,"TURN L"); }void stop(void){Pwm_set1(0);Pwm_set2(0);Z1=1;Z2=1;Y1=1;Y2=1;LCD_Str(5,1,"stop ");LCD_Str(0,0,"***smart car***"); }void xunji(uchar vx){if( (HZ==1)&&(HY==1) ){go(vx);}else if ( (HZ==1)&&(HY==0) ){left( );}else if ( (HZ==0)&&(HY==1) ){right();}else if ( (HZ==0)&&(HY==0) ){stop();}}void main (void){Timer0Init();Timer1Init();LCD_Init();LCD_Str(5, 0, "1421h");LCD_Str(0,0,"***smart car***");LCD_Str(0,1,"*DANG HONG MIN*");while(POWER) LCD_Flash(500);;DelayMs(50);LCD_Write_Command(0x01);LCD_Str(0,0,"***smart car***");while(1){xunji(800);}}11系统仿真1.在Keil中调试与仿真:创建“智能循迹小车”项目,选择单片机型号为AT89C51,输入C语言,保存为“智能循迹小车.C”。