循迹小车课程设计报告
智能循迹小车___设计报告

智能循迹小车___设计报告设计报告:智能循迹小车一、设计背景智能循迹小车是一种能够通过感知地面上的线条进行导航的小型机器人。
循迹小车可以应用于许多领域,如仓库管理、物流配送、家庭服务等。
本设计旨在开发一款功能强大、性能稳定的智能循迹小车,以满足不同领域的需求。
二、设计目标1.实现循迹功能:小车能够准确地识别地面上的线条,并按照线条进行导航。
2.提供远程控制功能:用户可以通过无线遥控器对小车进行控制,包括前进、后退、转向等操作。
3.具备避障功能:小车能够识别和避开遇到的障碍物,确保行驶安全。
4.具备环境感知功能:小车能够感知周围环境,包括温度、湿度、光照等参数,并将数据传输给用户端。
5.高稳定性和可靠性:设计小车的硬件和软件应具备较高的稳定性和可靠性,以保证长时间的工作和使用。
三、设计方案1.硬件设计:(1) 采用Arduino控制器作为主控制单元,与传感器、驱动器等硬件模块进行连接和交互。
(2)使用红外传感器作为循迹传感器,通过检测地面上的线条来实现循迹功能。
(3)使用超声波传感器来检测小车前方的障碍物,以实现避障功能。
(4)添加温湿度传感器和光照传感器,以提供环境感知功能。
(5)将无线模块与控制器连接,以实现远程控制功能。
2.软件设计:(1) 使用Arduino编程语言进行程序设计,编写循迹、避障和远程控制的算法。
(2)设计用户界面,通过无线模块将控制信号发送给小车,实现远程控制。
(3)编写数据传输和处理的程序,将环境感知数据发送到用户端进行显示和分析。
四、实施计划1.硬件搭建:按照设计方案中的硬件模块需求,选购所需元件并进行搭建。
2.软件开发:根据设计方案中的软件设计需求,编写相应的程序并进行测试。
3.功能调试:对小车的循迹、避障、远程控制和环境感知功能进行调试和优化。
4.性能测试:使用不同场景和材料的线条进行测试,验证小车的循迹性能。
5.用户界面开发:设计用户端的界面,并完成与小车的远程控制功能的对接。
智能循迹小车课程设计报告

智能循迹小车课程设计报告一、课程设计目标:本次智能循迹小车课程设计的目标是让学生了解智能硬件的基础知识,掌握基本电子元器件的原理及使用方法,学习控制系统的组成和运行原理,并通过实践操作设计出一款功能齐全的智能循迹小车。
二、课程设计内容及步骤:1. 调研与分析——首先要对市面上现有的智能循迹小车进行调研与分析,了解各种类型的循迹小车的特点和优缺点,为后续的设计提供参考。
2. 硬件选型——根据课程设计目标和实际需要,选择合适的主控芯片、电子元器件和传感器等硬件。
3. 原理图设计——根据硬件选型,设计出对应的原理图,并在硬件上进行布局与焊接。
4. 程序设计——先在电路板上测试硬件是否正常,随后进行程序设计,根据传感器的反馈控制小车的运动,让小车能够沿着黑线自动循迹行驶,同时加入避障功能和自动寻迹功能。
5. 调试与优化——完成程序设计后,要对小车进行全面验收测试,发现问题及时解决并优化相关程序。
三、设计思路:本次课程设计基于树莓派电路板,利用循迹模块实现小车的自动循迹和自动寻迹。
同时将超声波模块结合避障算法实现小车的自动避障。
小车的外壳采用3D打印技术制作,操作简单实用。
四、课程设计效果:通过本课程设计,学生们从理论到实践,了解了智能硬件的基础知识,掌握了基本电子元器件的原理及使用方法,学习了控制系统的组成和运行原理。
同时,实践操作过程中,学生们培养了动手能力和实际操作的技能。
通过制作一台智能循迹小车,学生们对智能硬件的认识更加深入,并获得了较高的设计满足感。
五、课程设计展望:智能循迹小车是智能硬件应用领域的一项重要发明,具有广泛的应用前景。
未来,可以将循迹小车应用于快递、物流等行业,实现自动化送货、配送。
同时可以将遥控技术与循迹技术相结合,设计出更加高效、实用的智能循迹小车,推动智能化生产和工作环境。
寻迹小车实验报告

自动寻迹小车设计报告一、系统设计1、设计要求(1)自动寻迹小车从安全区域启动。
(2)小车按检测路线运行,自动区分直线轨道和弯路轨道,在弯路处拐弯,实现灵活前进、转弯、等功能2.小车寻迹的原理这里的寻迹是指小车在白色地板上寻黑线行走,通常采取的方法是红外探测法。
红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。
单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。
红外探测器探测距离有限,一般最大不应超15cm。
对于发射和接收红外线的红外探头,可以自己制作或直接采用集成式红外探头。
3、模块方案根据设计要求,本系统主要由控制器模块、寻迹传感器模块、直流电机及其驱动模块等构成。
控制器模块:控制器模块由AT89C51单片机控制小车的行走。
寻迹传感器模块:寻迹传感器用光电传感器ST188检测线路并反馈给单片机执行。
ST188采用高发射功率红外光电二极管和高灵敏度双光电晶体管组成。
检测距离:4--13mm直流电机及其驱动模块:直流电机用L298来驱动。
L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。
用该芯片作为电机驱动,操作方便,稳定性好,性能优良。
4.系统结构框图:二、硬件实现及单元电路设计1、微控制器模块的设计在本次设计中我们采用了AT89C51位主控制器。
它具有智能化,可编程,小型便携等优点。
2.光电传感器:本次试验我们采用了ST188光电传感器,ST188采用高发射功率红外光电二极管和高灵敏度双光电晶体管组成。
检测距离:4--13mm。
其连接电路图如下:3.直流电机及其驱动模块在直流电机驱动问题上,我们采用一片L298来驱动直流电机。
智能循迹小车实验报告

智能循迹小车实验报告第一篇:智能循迹小车实验报告摘要本设计主要有单片机模块、传感器模块、电机驱动模块以及电源模块组成,小车具有自主寻迹的功能。
本次设计采用STC公司的89C52单片机作为控制芯片,传感器模块采用红外光电对管和比较器实现,能够轻松识别黑白两色路面,同时具有抗环境干扰能力,电机模块由L298N芯片和两个直流电机构成,组成了智能车的动力系统,电源采用7.2V的直流电池,经过系统组装,从而实现了小车的自动循迹的功能。
关键词智能小车单片机红外光对管 STC89C52 L298N 1 绪论随着科学技术的发展,机器人的设计越来越精细,功能越来越复杂,智能小车作为其的一个分支,也在不断发展。
在近几年的电子设计大赛中,关于小车的智能化功能的实现也多种多样,因此本次我们也打算设计一智能小车,使其能自动识别预制道路,按照设计的道路自行寻迹。
设计任务与要求采用MCS-51单片机为控制芯片(也可采用其他的芯片),红外对管为识别器件、步进电机为行进部件,设计出一个能够识别以白底为道路色,宽度10mm左右的黑色胶带制作的不规则的封闭曲线为引导轨迹并能沿该轨迹行进的智能寻迹机器小车。
方案设计与方案选择3.1 硬件部分可分为四个模块:单片机模块、传感器模块、电机驱动模块以及电源模块。
3.1.1 单片机模块为小车运行的核心部件,起控制小车的所有运行状态的作用。
由于以前自己开发板使用的是ATMEL公司的STC89C52,所以让然选择这个芯片作为控制核心部件。
STC89C52是一种低损耗、高性能、CMOS八位微处理器,片内有4k字节的在线可重复编程、快速擦除快速写入程序的存储器,能重复写入/擦除1000次,数据保存时间为十年。
其程序和数据存储是分开的。
3.1.2 传感器模块方案一:使用光敏电阻组成光敏探测器采集路面信息。
阻值经过比较器输出高低电平进行分析,但是光照影响很大,不能稳定工作。
方案二:使用光电传感器来采集路面信息。
循迹小车课程设计报告

循迹小车课程设计报告一、课程设计目标。
本课程设计旨在通过循迹小车的设计与制作,培养学生的动手能力、创新意识和团队合作精神,同时提高学生对于电子技术和机械原理的理解与应用能力。
二、课程设计内容。
1. 理论学习,学生将学习循迹小车的基本原理、电子元件的使用方法、以及相关的机械知识。
2. 实践操作,学生将动手制作循迹小车,并学习如何进行程序编写和电路连接。
3. 创新设计,学生将有机会对循迹小车进行改进和创新设计,提高其性能和功能。
三、课程设计步骤。
1. 理论学习阶段。
在这个阶段,学生将学习循迹小车的原理,包括红外线传感器的工作原理、电机驱动原理等。
同时,学生还将学习相关的电子知识,包括电阻、电容、电感等元件的使用方法。
2. 实践操作阶段。
学生将根据所学理论知识,动手制作循迹小车的电路连接,并编写相应的程序。
在这个阶段,学生将学会如何使用焊接工具、编程软件等工具,培养他们的动手能力和实际操作能力。
3. 创新设计阶段。
在完成基本的循迹小车制作后,学生将有机会对其进行改进和创新设计。
他们可以尝试使用不同的传感器、改进电路连接方式,甚至加入遥控功能等。
通过这一阶段的设计,学生将培养他们的创新意识和解决问题的能力。
四、课程设计评价。
1. 学生的实际操作能力,通过学生对循迹小车的制作和程序编写,可以评价学生的动手能力和实际操作能力。
2. 学生的创新能力,通过学生对循迹小车的改进和创新设计,可以评价学生的创新意识和解决问题的能力。
3. 学生的团队合作能力,在课程设计过程中,学生需要分工合作,可以评价学生的团队合作能力。
五、课程设计实施建议。
1. 提供足够的实践操作时间,保证学生有充分的时间动手制作循迹小车。
2. 强调创新设计的重要性,鼓励学生尝试不同的设计方案,培养其创新意识。
3. 加强团队合作意识的培养,让学生在课程设计过程中学会分工合作、协调沟通。
六、课程设计总结。
通过本课程设计,学生将不仅仅是学习了循迹小车的制作和原理,更重要的是培养了他们的动手能力、创新意识和团队合作精神。
自动循迹小车设计课程设计报告

计算机科学与技术学院课程设计报告(2014— 2015学年第2学期)课程名称:自动循迹小车设计班级:电子1202 学号姓名: 0318指导教师:完成时间: 2015年7月7日当今世界,随着计算机技术、控制技术、信息技术的快速发展,工业的生产和管理也都向着自动化、信息化、智能化方向发展。
随着人们生活水平的提高,人们越来越希望全智能化的生活,智能化的东西可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,为工业生产或日常生活提供很大的便利。
在自动化生产线,智能仓库管理及物流配送等领域,当生产现场环境十分恶劣或者许多人工无法完成的搬运或者装卸时,机器人却能够适应这样恶劣的环境,这时候就需要智能循迹小车这样的机器来完成此类任务,基于现场和生活的实际需要,研究智能循迹小车的意义不言而喻。
自动循迹小车就是最简单的智能化产品,通过单片机的控制,能够让其沿着固定的轨道自动行驶,通过对其的扩展,可以充分的应用在工厂自动化、军事领域、仓库管理、自动停车系统、智能玩具或民用服务等诸多领域,例如在自动仓库、码头、搬运、涂装等物流作业部门工作的物流小车就是在此基础上设计出来的。
而且通过对这个课题的学习,通过理论与实践的结合,能够让自己对单片机的了解和应用进一步加深,另外,通过这次的设计,能够大大提高自己的动手能力,也更大的激发自己的兴趣。
国内外的研究概况:国外智能车辆的始于上世纪50年代,它的发展历程大致可以分为以下三个阶段:第一阶段:1954年美国Barrett Electronic公司研究开发出了世界上第一台自主引导车系统,该系统只是一个运行在固定路线上的拖车式运货平台,但它却具有了智能车辆最基本的特征无人驾驶。
第二阶段:从80年代中后期,在欧洲,普罗米修斯项目于1986年开始了在这个领域的探索,在美洲,美国于1995年成立了国家自动高速公路系统联盟,其目标之一就是研究发展智能车辆的可行性,并促进智能车辆技术进入实用化,在亚洲,日本与1996年成立了高速公路先进巡航/辅助驾驶演剧协会,主要目的是研制自动车辆导航的方法,促进日本智能车辆的整体进步。
课程设计循迹小车

课程设计循迹小车一、教学目标本课程旨在让学生了解和掌握循迹小车的基本原理和制作方法,培养学生的动手能力和创新能力。
知识目标包括:了解循迹小车的工作原理、熟悉常见的电子元件及其功能、掌握基本的电路连接和编程技巧。
技能目标包括:能够独立完成循迹小车的组装、调试和编程,培养学生的动手能力和解决问题的能力。
情感态度价值观目标包括:培养学生对科学的兴趣和好奇心,增强学生的团队合作意识和环保意识。
二、教学内容本课程的教学内容主要包括循迹小车的原理、组成和制作方法。
首先,介绍循迹小车的工作原理,让学生了解其运行机制。
其次,讲解循迹小车的组成,包括电子元件、电路连接和编程等方面。
最后,教授学生如何动手制作循迹小车,培养学生的实际操作能力。
三、教学方法为了提高教学效果,本课程采用多种教学方法相结合的方式。
首先,运用讲授法,向学生讲解循迹小车的基本原理和制作方法。
其次,通过讨论法,引导学生进行思考和交流,提高学生的理解能力。
再次,运用案例分析法,分析实际案例,使学生更好地掌握知识。
最后,利用实验法,让学生亲自动手操作,培养学生的实践能力。
四、教学资源为了支持教学内容的实施,我们将选择和准备以下教学资源。
教材:《循迹小车制作教程》,为学生提供基本的学习资料。
参考书:《电子制作入门》、《编程技巧与应用》等,为学生提供更多的学习参考。
多媒体资料:制作PPT和视频教程,为学生提供直观的学习资源。
实验设备:准备循迹小车制作所需的电子元件、工具和设备,为学生提供实践操作的机会。
五、教学评估为了全面、客观地评估学生的学习成果,我们将采用多种评估方式。
平时表现方面,将根据学生在课堂上的参与度、提问和回答问题的积极性等给予评分。
作业方面,将根据学生完成作业的质量、创新性和准确性等进行评分。
考试方面,将设置选择题、填空题、简答题和综合分析题等多种题型,全面测试学生对知识的掌握和应用能力。
此外,还将设置实验操作考核,评估学生的动手能力和实验技能。
单片机循迹小车课程设计

单片机循迹小车课程设计一、课程目标知识目标:1. 理解单片机的基本原理,掌握其编程方法。
2. 学习并掌握循迹小车的工作原理,包括传感器、驱动电路及控制算法。
3. 了解机器人技术中的自动导航与路径跟踪技术。
技能目标:1. 能够运用单片机进行程序编写,实现对循迹小车的控制。
2. 能够独立完成循迹小车的组装和调试,提高动手实践能力。
3. 能够通过小组合作,解决实际问题,培养团队协作能力。
情感态度价值观目标:1. 培养学生对电子技术和编程的兴趣,激发创新意识。
2. 培养学生面对问题时的耐心和毅力,形成积极向上的学习态度。
3. 增强学生的环保意识,认识到科技发展对环境保护的重要性。
课程性质:本课程为实践性较强的课程,注重理论知识与实际操作相结合。
学生特点:学生处于好奇心强、动手能力逐渐提高的阶段,对新鲜事物有较高的兴趣。
教学要求:结合学生特点,采用任务驱动法,引导学生自主探究,培养实际操作能力。
在教学过程中,注重理论与实践相结合,确保学生能够学以致用。
通过课程学习,使学生达到预定的学习成果,为后续相关课程打下坚实基础。
二、教学内容- 单片机原理与编程基础:介绍单片机的组成、工作原理,基础编程语法及逻辑控制。
- 传感器原理:讲解循迹传感器的工作原理及其在循迹小车中的应用。
- 驱动电路:阐述电机驱动电路的原理与设计方法。
2. 实践操作:- 循迹小车组装:指导学生按照原理图进行电路连接,完成小车组装。
- 程序编写:教授学生编写单片机程序,实现对循迹小车的控制。
- 调试优化:教授学生如何调试程序,对小车进行性能优化。
3. 教学大纲:- 第一阶段(2课时):介绍单片机原理与编程基础,使学生了解单片机的基本使用方法。
- 第二阶段(2课时):讲解传感器原理与驱动电路,让学生明白循迹小车的工作原理。
- 第三阶段(3课时):指导学生进行循迹小车的组装、编程和调试。
4. 教材关联:- 教科书第四章:单片机原理与应用。
- 教科书第五章:传感器与自动控制系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能循迹小车设计与制作课程设计报告系别:专业:班级:成员:指导老师:时间:二〇一一年6月30日一、设计目的:1、学会智能电子产品的功能设计与任务分析,能进行小型电子产品方案设计;2、掌握基于51单片机、FPGA模数混合硬件系统设计和程序设计;3、熟悉电子信息类企业项目完整的运作过程及管理规范,培养团队协作能力、沟通能力、创新能力和组织能力。
二、智能循迹小车任务分析这是一种基于STC89C51单片机的小车寻迹系统。
该系统采用两组高灵敏度的光电对管,对路面黑色(白色)轨迹进行检测,并利用单片机产生PWM波,控制小车速度。
测试结果表明,该系统能够平稳跟踪给定的路径。
整个系统基于普通玩具小车的机械结构,并利用了小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行三、智能循迹小车循迹原理该智能小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。
利用了简单、应用比较普遍的检测方法—发光二极管+光敏电阻。
发光二极管+光敏电阻,即利用光线在不同颜色的物理表面具有不同的反射性质的特点。
在小车行驶过程中不断地向地面发射白光,当白光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。
四、智能循迹小车总体方案整个电路系统分为检测、控制、显示、驱动四个模块。
首先利用光电对管对路面信号进行检测,经过比较器处理之后,送给软件控制模块进行实时控制,然后显示小车的运行状态,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。
系统方案方框图如图1所示。
图1 智能小车寻迹系统框图五、智能循迹小车各模块方案1、循迹模块设计方案1:用红外发射管:接收管自己制作光电对管循迹传感器。
红外发射管发出红外线,当发出的红外线照射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射出的光线则测出黑线继而输出高电平。
这样自己制作组装的寻迹传感器基本能够满足要求,但是工作不够稳定,且容易受外界光线的影响,因此我们放弃了这个方案。
方案2:发光二极管+光敏电阻组成光敏探测器,光敏电阻的阻值可以根跟随周围环境光线的变化而变化。
当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。
因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。
将阻值的变化值经过比较器就可以输出高低电平。
该方案虽然有明显的光线的车前但灵敏度好。
因此我们采用这种方案。
如理图如下:R61限制发射二极管的电流,发射管的电流和发射功率成正比,但受其极限输入正向电流50mA的影响,用R1=150的电阻作为限流电阻,Vcc=5V 作为电源电压,测试发现发射功率完全能满足检测需要;可变电阻RP61可限制接收电路的电流,一方面保护接收红外管;另一方面可调节检测电路的灵敏度。
因为传感器输出端得到的是模拟电压信号,所以在输出端增加了比较器,先将LM339输出电压与2.5V进行比较,再送给单片机处理和控制。
传感器的安装正确选择检测方法和传感器件是决定循迹效果的重要因素,而且正确的器件安装方法也是循迹电路好坏的一个重要因素。
从简单、方便、可靠等角度出发,同时在底盘装设5个光敏二极管,进行两级方向纠正控制,将大大提高其循迹的可靠性,具体位置分布如图3所示。
图3 光敏电阻的分布图图中循迹传感器全部在一条直线上。
其中X1与Y1为第一级方向控制传感器,X2与Y2为第二级方向控制传感器,并且黑线同一边的两个传感器之间的宽度不得大于黑线的宽度。
小车前进时,始终保持(如图3中所示的行走轨迹黑线)在X1和Y1这两个第一级传感器之间,当小车偏离黑线时,第一级传感器就能检测到黑线,把检测的信号送给小车的处理、控制系统,控制系统发出信号对小车轨迹予以纠正。
第二级方向探测器实际是第一级的后备保护,它的存在是考虑到小车由于惯性过大会依旧偏离轨道,再次对小车的运动进行纠正,从而提高了小车循迹的可靠性。
2、控制模块设计此部分是整个小车运行的核心部件,起着控制小车所有的运行状态作用。
控制方法很多,大部分都采用单片机控制。
这里选择了ATMEL公司的AT89C52作为控制芯片,在芯片体积小、集成度高、可靠性好、容量足够、驱动能力强、运用方便、经济廉价。
3、电机驱动模块从单片机输出信号功率很弱,即使在没有其它外在负载是也无法带动电机,所以在实际电路中我们加入了电机驱动芯片提高输入电机信号的功率,从而能够根据需要控制电机转动。
根据驱动功率大小以及连接电路的简单化要求选择L298为直流电机驱动芯片。
电路图如下:4、FPGA系统软件设计原理图:4.1寻迹模块寻迹板送过来的4路检测信号送到FPGA板,FPGA将此4路信号送出至4个LED灯显示状态(检测至黑线亮,否则灭);同时将此4路信号送到单片机。
显示模块及要求(采用1602)小车启动:小车启动时,显示“Start”。
小车左拐:小车左拐时,显示“Left”。
小车右拐:小车右拐时,显示“Right”。
小车前进:小车前进时,显示“Running”。
小车后退:小车后退时,显示“Back”。
停车:小车停车时,显示“Stop”。
4.2提示音模块(1)小车启动小车启动前发出3声“嘟、嘟、嘟”的声音,提示音结束后,FPGA发出一个启动信号给单片机,从而启动小车。
(2)停车小车停车时,FPGA播放一首音乐,音乐播放结束即表示小车完成了任务。
4.3 FPGA设计总原理图如下:5、单片机控制模块5.1 启动小车小车在接收到FPGA送过来的启动指令后,读取寻迹信号,根据寻迹信号确定小车的运行状态,将小车的运行状态送至FPGA,同时根据相应算法,驱动小车的左右电机前进。
由于其实跑道与正常跑道有一段路程不好处理,所以需要冲一段路程才能使跑到正常轨道。
5.2 正常前进当寻迹板中间两个传感器检测到黑线,小车都正常前进。
5.3 左拐弯当最左端的两个传感器同时检测到黑线,或只有一个检测到黑线时,右端其它传感器检测到白色时,小车应左拐弯。
但是根据跑道要求,当循迹板第一次检测到全黑时,小车应左转。
5.4 右拐弯当最右端的两个传感器检同时测到黑线,或只有一个检测到黑线时,左端其它传感器检测到白色时,小车应右拐弯。
5.5 后退当4个传感器都检测到白色,小车后退。
5.6 停车当4个传感器同时第六次检测到黑线,小车停车。
小车停车后,发出一个停车标志信号送给FPGA,使FPGA播放音乐。
5.7中断模块5.8 电机控制模块5.9 小车速度的PWM调制PWM基本原理PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。
六、心得体会这次循迹小车课程设计不得不说是个大工程,让我们从中学会了许多东西,特别是分工与合作。
从最开始的买元器件,到焊接、调试循迹板,再到FGPA的VHDL程序和C语言程序的编写,都不简单。
我们的循迹板在第一次焊接完毕,经过调试后,能正常工作。
但是,当我们把它装在小车上让它去跑时,问题就来了,有个灯就不亮了。
后来经过检测后,终于又弄好了。
然后在写C 语言时,主要就是调节小车的速度和转弯时的角度。
而最难的是FPGA程序的编写,特别是音乐的编程,真的很复杂,花了我们很多时间才把它写好。
而1602液晶的编写,用到了我们没有学过的状态机,经过查找资料后,才弄清楚状态机到底是什么回事。
由于这次课程设计的工作量很大,所以我们组这次的分工非常明确。
一个人写C语言程序,一个人写VHDL程序,一个人负责循迹板的焊接与调试,还有一个负责资料的收集和报告的书写。
最后,经过我们组的分工协作,终于把循迹小车的制作完成了。
这次课程设计,收获最大的,还是告诉了我们要主动去学习新的知识。
附录一:循迹板原理图附录二:单片机C 语言程序#include<reg52.h>/*********************第一部分 ***************************************/ //以下是点击驱动芯片 L298 管脚位声明sbit PWM1=P1^0; //电机使能端sbit PWM2=P1^1;sbit IN1=P1^2; //电机控制端sbit IN2=P1^3;sbit IN3=P1^4;sbit IN4=P1^5;sbit start=P0^0; //小车启动信号sbit stop=P0^1; //小车停止信号sbit RP1=P2^3; //此处是传感器管脚位声明sbit RP2=P2^2;sbit RP3=P2^1;sbit RP4=P2^0;int count1,count2; //用于中断计数//延时函数,延时z秒void delay(int z){int x,y;for(x=z;x>0;x--)for(y=124;y>0;y--);}/*********************第二部分电机控制子函数****************************/void forward1()//电机 1 前进{IN1=0;IN2=1;}void forward2()//电机 2 前进{IN3=0;IN4=1;}void back1()//电机 1 后退{IN1=1;IN2=0;}void back2()//电机 2 后退{IN3=1;IN4=0;}/***************电机的速度控制用PWM调速************************/ void speed(int cnt1,int sd1,int cnt2,int sd2){if(cnt1<sd1) //电机1 PWM调速PWM1=1;elsePWM1=0;if(cnt2<sd2) //电机2 PWM调速PWM2=1;elsePWM2=0;}/***************电机的前进、左转、右转控制************************/ void turn(int cnt1,int sd1,int cnt2,int sd2){forward1();forward2();speed(cnt1,sd1,cnt2,sd2);}/***************电机的后退控制************************/void back(int cnt1,int sd1,int cnt2,int sd2){back1();back2();speed(cnt1,sd1,cnt2,sd2);}/*********************第三部分主函数****************************/void main(){int num=0;stop=0;TMOD=0x01; //中断模式设置EA=1;TH0=(65536-1000)/256; //定时1msTL0=(65536-1000)%256;ET0=1;TR0=1;start=1; //给FPGA发送START信号delay(3000); //等待FPGA发送循迹信号delay(3000);等待FPGA发送循迹信号start=0;turn(count1,250,count2,250); //使小车冲上黑色轨道delay(350); //延时等待小车冲上黑色轨道while(1){if(RP1==1&&RP2==1&&RP3==1&&RP4==1)back(count1,50,count2,50); // 1111 当四个LED检测到黑线时,小车后退if(RP1==1&&RP2==0&&RP3==0&&RP4==1)turn(count1,200,count2,200); //1001 当第二三格LED检测到黑线时,小车前进if(RP1==0&&RP2==1&&RP3==1&&RP4==0)turn(count1,150,count2,150); // 0110 当第一、三个LED检测到黑线时,小车减速前进/**********************小车左转*****************************/if(RP1==0&&RP2==1&&RP3==1&&RP4==1)turn(count1,0,count2,150); // 0111 当最右边的LED检测到黑线时,小车左转if(RP1==1&&RP2==0&&RP3==1&&RP4==1)turn(count1,80,count2,150); // 1011 当第二个LED检测到黑线时,小车偏左转if(RP1==0&&RP2==0&&RP3==1&&RP4==1)turn(count1,0,count2,100); // 0011 当第一、二个LED检测到黑线时,小车左转if(RP1==0&&RP2==0&&RP3==0&&RP4==1)turn(count1,0,count2,200); // 0001 当第一、二、三个LED检测到黑线时,小车左大转/***********************小车右转*******************************/if(RP1==1&&RP2==1&&RP3==0&&RP4==1)turn(count1,150,count2,80); // 1101 当第三个LED检测到黑线时,小车偏右转if(RP1==1&&RP2==1&&RP3==1&&RP4==0)turn(count1,180,count2,0); // 1110 当第四个LED检测到黑线时,小车右转if(RP1==1&&RP2==1&&RP3==0&&RP4==0)turn(count1,100,count2,0); //1100 当第三四格LED检测到黑线时,小车右转if(RP1==1&&RP2==0&&RP3==0&&RP4==0)turn(count1,200,count2,0); // 1000 当第二、三、四个LED检测到黑线时,小车右大转/**************小车检测到全黑情况的处理----停车与左转----*************/if(RP1==0&&RP2==0&&RP3==0&&RP4==0){if(num==0){back1(); // 0000 当四个LED第一次检测到黑线时,左轮后退,右轮前进小车左转forward2();delay(100); //延时100ms,等待小车转过弯道}if(num>0 && num<6){turn(count1,200,count2,200);// 0000 当四个LED再次检测到黑线的次数小于6次时,// 即到达斑马线时小车前进速度大于后退速度}if(num>=6){PWM1=0;PWM2=0; //当四个LED第六次检测到黑线时,小车停止stop=1; //发送停止信号给FPGA,使FPGA播放音乐}num++;}}}/*********第四部分中断服务函数 *******************************/void time0()interrupt 1{TH0=(65536-1000)/256;//定时1msTL0=(65536-1000)%256;count1++;count2++;if(count1>=500)//周期是 500mscount1=0;if(count2>=500)//周期是 500mscount2=0;}附录三:FPGA的1602液晶VHDL程序library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;--------------------------------------------------------------------------entity LCD1602c isport(CLK,RST : in std_logic; --状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间flag_start,flag_stop:in std_logic; --开始和停止信号,使液晶显示start和stop 并伴随音乐text1:in std_logic_vector(3 downto 0);--将FPGA检测到的数据传给单片机speaker:in std_logic; --音乐的输入端,开始和停止时才播放音乐dududu:in std_logic ; --开vector(3 downto 0); --寻迹板的四路信号输入--始的时候响3次嘟嘟声text1_out:out std_logic_vector(3 downto 0); --将寻迹板的四路信号不做处理直接从FPGA输出给单片机led:out std_logic_vector(5 downto 0);--设置寻迹板的四路信号对应的四个led灯代表其寻迹状态后两个表示开始和停止LCD_EN,LCD_RS,LCD_RW : out std_logic;--使能信号、寄存器选择信号液晶读写信号LCD_Data : out std_logic_vector(7 downto 0) ;--液晶数据信号speaker_out:out std_logic); --音乐输出end LCD1602c;--------------------------------------------------------------------------architecture Behavioral of LCD1602c istype state is (set_cls,set_func,set_DisCon,set_InMode,set_ddram,write_ddram,set_delay); --状态机,7种状态signal C_ST :state; --定义状态信号type ram1 is array(0 to 9) of std_logic_vector(7 downto 0); --type ram2 is array(0 to 9) of std_logic_vector(7 downto 0);type ram3 is array(0 to 9) of std_logic_vector(7 downto 0);type ram4 is array(0 to 9) of std_logic_vector(7 downto 0);type ram5 is array(0 to 9) of std_logic_vector(7 downto 0);type ram6 is array(0 to 9) of std_logic_vector(7 downto 0);constanttextram1:ram1:=(x"80",x"80",x"62",x"61",x"63",x"6B",x"80",x"80",x"80",x"80");--backconstanttextram2:ram2:=(x"74",x"75",x"72",x"6E",x"80",x"72",x"69",x"67",x"68",x"74"); --turn rightconstanttextram3:ram3:=(x"61",x"64",x"76",x"61",x"6E",x"63",x"65",x"80",x"80",x"80"); --advanceconstanttextram4:ram4:=(x"74",x"75",x"72",x"6E",x"80",x"6C",x"65",x"66",x"74",x"80"); --turn leftconstanttextram5:ram5:=(x"80",x"73",x"74",x"61",x"72",x"74",x"80",x"80",x"80",x"80"); --startconstanttextram6:ram6:=(x"80",x"73",x"74",x"6F",x"70",x"80",x"80",x"80",x"80",x"80"); --stopsignal CLK1 : std_logic; --signal cnt1: std_logic_vector(3 downto 0);signal a:std_logic_vector(5 downto 0);--检测信号和开始及停止信号共六位信号-------------------------------------------------------------------------begina<=text1&flag_start&flag_stop;text1_out<=text1;--将四路寻迹板的信号不作处理直接输出给单片机LCD_EN <= CLK ; --LCD_RW <= '0' ; --process(CLK)variable n2:integer range 0 to 499; --常整常量用于从0到500计数分频,可以不要这个进程因为不要循环显示beginif rising_edge(CLK) then --当时钟上升沿到来时if n2<499 thenn2:=n2+1;elsen2:=0; Clk1<=not Clk1;--end if;end if;end process;------------------------------------------------------------------------------PROCESS (CLK,RST)variable cnt1: std_logic_vector(3 downto 0);--32BEGINif RST='0' then C_ST<=set_cls; LCD_RS<='0'; LCD_RW<='0';--rw=0是写操作LCD_Data<="00000001"; cnt1:="0000";--清屏指令0x01elsif (CLK'event AND CLK ='1') THENCASE C_ST IS --判断状态WHEN set_cls => --清屏状态LCD_RS<='0'; LCD_RW<='0'; LCD_Data<="00000001"; --清屏指令0X01C_ST <= set_func; --将功能设置状态给c_st信号WHEN set_func => --功能设置0 0 1 DL N F * * DL:高电平时为8位总线,低电平时为4位总线--N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符LCD_RS<='0'; LCD_RW<='0'; LCD_Data<="00111000";--cnt1<="00000"; --0x38,表示8位宽度,2行C_ST <=set_DisCon;when set_discon=> --显示开关控制LCD_RS<='0'; LCD_RW<='0'; LCD_Data<="00001100"; --0x0C,表示开显示,关光标,关闪烁C_ST<=set_InMode;when set_InMode=> --设置输入方式LCD_RS<='0'; LCD_RW<='0'; LCD_Data<="00000110";--0x06,AC+1(左移),不移位C_ST<=set_ddram;when set_ddram=>LCD_RS<='0'; LCD_RW<='0';if cnt1<"1001" then cnt1:=cnt1+1; --else cnt1:="0000"; end if; --if cnt1<="1001" then LCD_Data<="10000100"+cnt1; --LCD1602第一行首地址80H+00Hend if;C_ST<=write_ddram;when write_ddram=>LCD_RS<='1'; LCD_RW<='0'; --if a="111001" then LCD_Data<=textram2(conv_integer(cnt1));led<="111000"; --向右elsif a="110001" then LCD_Data<=textram2(conv_integer(cnt1));led<="011100";--向右elsif a="011101" then LCD_Data<=textram4(conv_integer(cnt1));led<="001100";--向左elsif a="001101" then LCD_Data<=textram4(conv_integer(cnt1));led<="110000";--向左elsif a="100101" then LCD_Data<=textram3(conv_integer(cnt1));led<="011000"; --前进elsif a="111101" then LCD_Data<=textram1(conv_integer(cnt1));led<="111100";--后退elsif a="100111" then LCD_Data<=textram5(conv_integer(cnt1));led<="011010";--开始elsif a="000001" then LCD_Data<=textram6(conv_integer(cnt1));led<="111101";--结束end if;C_ST<=set_delay;when set_delay=>LCD_RS<='0'; LCD_RW<='0'; LCD_Data<="00000000"; --C_ST<=set_func; --回到功能设置状态,一直循环下去when others => null;END CASE;END IF;END PROCESS;process(a)begincase(a)iswhen"100110" => speaker_out<=dududu;when"000001"=> speaker_out<=speaker;when others =>speaker_out<='1';end case;end process;end Behavioral;附录五小车实物。