ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:38.32KB ,
资源ID:9533273      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9533273.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(智能寻迹避障小车寻迹系统设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

智能寻迹避障小车寻迹系统设计.docx

1、智能寻迹避障小车寻迹系统设计第二章 智能寻迹避障小车寻迹系统设计1任务 任务一:产生智能寻迹避障小车沿黑线转圈的控制程序;任务二:产生智能寻迹避障小车带状态显示沿黑线转圈的控制程序;2要求(1)能控制智能寻迹避障小车沿黑线实现转圈功能;(2)行走过程中小车一直压着黑线走,不得冲出黑线圆圈之外或之内;(3)智能寻迹避障小车可以从小于90度的任意方向寻找到黑线圆圈;2.1 项目描述该项目的主要内容是:在智能寻迹避障小车电机控制系统之上扩展寻迹电路,然后运用C语言对系统进行编程,使智能寻迹避障小车实现沿黑线转圆圈的功能,并且在行走过程中小车一直压着黑线走,不得冲出黑线圆圈之外或之内;当人为将小车拿开

2、,再从小于90度的任意方向放置小车,小车应能重新找回轨道,并沿黑线继续转圈。通过该项目的学习与实践,可以让读者获得如下知识和技能: 继续掌握单片机I/O端口的应用; 掌握红外线收、发对管的工作原理与控制方法; 掌握数码管的工作原理与控制方法; 掌握单片机C语言的编程方法与技巧; 能够编写出智能寻迹避障小车沿黑线实现转圈功能的控制函数;2.1 必备知识 2.1.1 关于红外线传感器红外线定义:在光谱中波长自0.76至400微米的一段称为红外线,红外线是不可见光线。所有高于绝对零度(-273.15)的物质都可以产生红外线。现代物理学称之为热射线。医用红外线可分为两类:近红外线与远红外线。红外线发射

3、器:红外线发射管在LED封装行业中主要有三个常用的波段,如下850NM、875NM、940NM。根据波长的特性运用的产品也有很大的差异,850NM波长的主要用于红外线监控设备,875NM主要用于医疗设备,940NM波段的主要用于红外线控制设备。如:红外线遥控器、光电开关、光电计数设备等。红外线对管应用:本项目中,小车的寻迹功能采用红外线收、发对管实现。具体工作过程如下:两对红外线收、发对管安装在智能寻迹避障小车底盘正前方,红外发射管一直发射信号,接收管时刻准备接收信号。两对对着地的红外管发射红外信号,信号在白色的地面上反射回接收管,通过接收管把信号送回单片机进行处理,完成相应的动作。假如在黑色

4、的地面上,信号被地面吸收,就无信号返回,单片机检测到无信号,根据程序也会做出相应的动作。如图2.1所示为红外线收、发对管外型示意图。 图2.1 红外收、发对管外形图2.3 案例设计 2.3.1 系统设计方案本项目采用单片机最小系统+红外寻线传感器来实现小车寻线功能。系统设计框图如图2.2所示。图2.2 系统设计框图2.3.2 硬件电路设计智能寻迹避障小车寻线电路原理图如图2.3所示:它是在单片机最小系统的基础上直接由单片机的P3连接红外线收、发对个构成的,其中单片机的P3.5端口控制左边寻线电路模块,右边寻线电路模块由P3.6控制。为了保准巡线信号的准确度,一般要求左、右红外发射对管安装时离地

5、面高度控制在0.5cm内比较理想,距离太大,可能造成信号不灵敏,巡线不够准确,距离太小,也可能造成小车前进会与地面产生刮擦,从而损坏器件;另外,左、右收、发对管安装的距离应保持在比黑线条的宽度多一点,做到夹在黑线条,并处于黑线条的边缘,不能压在黑线上。这样巡线才能准确。 图2.3 智能寻迹避障小车寻线电路原理图2.3.3 系统软件设计 任务一:产生智能寻迹避障小车沿黑线转圈的控制程序; 1、源程序#include#define uint unsigned int#define uchar unsigned char#define out P2sbit zuo1=P01;sbit zuo2=P0

6、0;sbit you1=P03;sbit you2=P02;sbit zuod=P35;sbit youd=P36;sbit qiand=P37; /左 右 前 3个红外传感器sbit jiao=P06;sbit D1=P20;sbit D2=P07;void delay(uint x) uchar i; while(x-) for(i=0;i123;i+);void qian() zuo1=0; zuo2=1; /左边往前 you1=0; you2=1; /右边往前void hou() zuo1=1; zuo2=0; /左边往后 you1=1; you2=0; /右边往后void zuo()

7、 zuo1=1; zuo2=0; /左边往后 you1=0; you2=1; /右边往前void you() zuo1=0; zuo2=1; /左边往前 you1=1; you2=0; /右边往后void main() while(1) if(zuod=0&youd=0) /如果左右两个传感器没有检测到黑线 qian(); /直走 if(zuod=1&youd=0) /如果左边的传感器检测到黑线 while(1) zuo(); /左转 D1=0; if(zuod=0) /一直左转到传感器检测不到为止 D1=1; break; /跳出循环 if(youd=1&zuod=0) while(1) y

8、ou(); D2=0; if(youd=0) D2=1; break; /道理同上 2、程序运行及调试按图2.3连接智能寻迹避障小车控制电路,编译以上程序,将产生的可执行文件烧写到智能寻迹避障小车的单片机程序存储器,然后将小车放置在黑线圆圈的任意位置,开启电源,小车会沿着黑线不断转圈;将小车从黑线上拿走,然后再放放置黑线旁边,只要小车与黑线不成90度放置,则小车通过自我修正,会重新找到黑线轨迹,继续转圈。3、程序设计思路基本思路是:先判断智能寻线小车左、右寻线传感器是否夹在黑线边缘,如果是说明寻线传感器处于白色区域,则小车前进;如果不是,则再判断左、右传感器所处的位置,如果左边传感器压到黑线,

9、左传感器指示灯D1亮,说明小车已经偏右,则应调左转函数修正,使左边传感器退出黑色区域;当退出黑色区域后,左传感器指示灯D1灭;当右边传感器压到黑是,方法跟左边处理类是:调用右转函数修正,同时D2亮,修正完,D2灭。总之,小车在沿黑线转圈过程中,左、右寻线传感器始终是夹在黑线边缘(即白色区域)的,如果不在白色区域,就要根据情况调用左转、或右转函数进行修正。程序流程图如图2.4所示:图2.4 智能寻迹避障小车寻黑线转圈流程图 任务二:产生智能寻迹避障小车带状态显示沿黑线转圈的控制程序;1、源程序#include#define uint unsigned int#define uchar unsig

10、ned char#define out P2sbit zuo1=P01;sbit zuo2=P00;sbit you1=P03;sbit you2=P02;sbit zuod=P35;sbit youd=P36;sbit qiand=P37; /左 右 前 3个红外传感器sbit jiao=P06;sbit D1=P20;sbit D2=P07;uchar code ZM= 0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,; void delay(uint x) uchar i; while(x-) for(i=0;i123;i+);void

11、 qian() zuo1=0; zuo2=1; /左边往前 you1=0; you2=1; /右边往前void hou() zuo1=1; zuo2=0; /左边往后 you1=1; you2=0; /右边往后void zuo() zuo1=1; zuo2=0; /左边往后 you1=0; you2=1; /右边往前void you() zuo1=0; zuo2=1; /左边往前 you1=1; you2=0; /右边往后void main() while(1) if(zuod=0&youd=0) /如果左右两个传感器没有检测到黑线 qian(); /直走 out=ZM1; if(zuod=1

12、&youd=0) /如果左边的传感器检测到黑线 while(1) zuo(); out=ZM3; /左转 D1=0; if(zuod=0) /一直左转到传感器检测不到为止 D1=1; break; /跳出循环 if(youd=1&zuod=0) while(1) you(); out=ZM4; D2=0; if(youd=0) D2=1; break; /道理同上 2、程序运行及调试程序的运行与调试与任务一相同,当程序下载到小车控制电路单片机中,开机运行,小车除完成任务一的动作外,还会在小车行进过程中在数码管上显示小车的状态,比如,小车前进,则在数码管上显示“1”;小车左转弯则在数码管上显示“

13、3”;小车右转弯则在数码管上显示“4”。3、程序设计思路 程序设计思路与任务一基本相同,只是在小车直行、左转、右转函数后面调用相应的状态显示字符。其程序流程图如图2.5所示。 图2.5 带小车行走状态显示、转圈程序流程图2.4 相关知识 2.4.1 显示模块显示器是最常用的输出设备,其种类繁多,但在单片机系统设计中常用的是发光二极管显示器(LED)和液晶显示器(LCD)两种。由于这两种显示器结构简单,价格便宜,接口容易实现,因而得到广泛应用。下面介绍发光二极管显示器(LED)的结构、工作原理及其接口电路。1、LED结构与原理LED显示器又称为数码管,它主要由8个发光二极管组成,如图2.6(a)

14、所示。图中,ag为数字或字符显示段,h段为小数点显示,通过ag为7个发光段的不同组合,可以显示09和AF共16个数字和字母。例如,当a、b、g、e、d段亮时,显示数字“2”,当a、f、e、g段亮时,则显示字母“F”。LED可以分为共阴极和共阳极两种结构,如图2.6(b)和(c)所示。其中图(b)为共阴极结构。即把8个发光二极管阴极连在一起。这时如果需要点亮ag中的任何一盏灯,则只需要在相应端输入高电平即可;输入低电平则截止。比如我们现在要显示数字“3”,则只要在对应的a、b、c、d、g段送入高电平,在其他端送入低电平即可,点亮为“3”。图(c)为共阳极结构。其显示端输入低电平有效,高电平截止。

15、 (a)引脚分布图 (b)共阴LED (c)共阳LED图2.6八段LED显示块表2-1列出了共阳极与共阴极LED显示器显示数字、字母与显示代码之间的对应关系。表2-1显示器显示数字、字母与显示代码之间的对应关系显示字符共阴极段码共阳极段码显示字符共阴极段码共阳极段码03FHC087FH80H106HF996FH90H25BHA4A77H88H34FHB0B7CH83H466H99HC39HC656DH92HD5EHA1H67DH82HE79H86H707HF8F71H8EH2、LED显示器显示方式点亮LED显示器有两种方式:一是静态显示;二是动态显示。所谓静态显示,就是当显示器显示某一个字符时

16、,相应的发光二极管恒定地导通或截止。如图2.7所示为4位静态LED显示器电路。该电路每一位可单独显示。只要在要显示的那位的段选线上保持段选码电平,该位就能保持显示相应的显示字符。这种电路的优点是:在同一瞬间可以显示不同的字符;但缺点就是占用端口资源较多。从图2.8可以看出,每位LED显示器需单独占用8根端口线,也就是说需要占用单片机的1个端口,而对于MCS51单片机而言,端口资源是比较少的。因而,在显示的数据位较多时往往不采用此种设计方法,而是采用动态显示方式。所谓动态显示,就是将要显示的多位LED显示器采用一个8位的段选端口,然后采用动态扫描方式一位一位地轮流点亮各位显示器。如图2.8所示为

17、4位LED动态显示电路。图2.7 4位静态LED显示器电路图2.8 4位动态LED显示器电路在此电路中,单片机的P1口用于控制4位LED的段选码;P2口的P2.0P2.3用于控制4位LED位选码。由于所有的段选码连在一起,所以同一瞬间只能显示同一种字符。但如果要显示不同字符,则要借助位选口来控制。(如果LED为共阴,则P2.0P2.3输出高电平,为共阳则P2.0P2.3输出为低电平。)例如,现在要显示5678四个数字,则首先应该将“5”的显示代码(共阴LED的显示代码为6DH,共阳LED的显示代码为92H)由P1.0送出。然后P2.0P2.3输出相应位码(共阴LED时P2.0P2.3输出100

18、0,共阳LED时P2.0P2.3输出0111)时,则可以看到在数码管1上的显示数字“5”。再将显示的数字“5”延时510ms,以造成视觉暂留效果;同时代码由P1.0送出。用同样的方法将其余3个数字“678”送数码管2、3、4显示,最后则可以在4位LED上看到“5678”四个数字。为了使显示效果稳定,可以使每个数码管显示的数字不断重复,当重复频率达到一定程度时,加之人眼视觉暂留作用,便可以看到相当稳定的“5678”四个数字。表2-2为模拟以上显示的过程表(以共阴LED设置显示代码,共阳与此相反。)表2-2 4位动态LED扫描显示状态段选码P1.7至P1.0段选码P2.3至P2.0LED显示数码管

19、1数码管2数码管3数码管46DH01H7DH02H07H04H7FH08H3、LED显示器接口实例 实例1:用LED数码管显示数字“6”本例用LED数码管显示数字“6”,接口电路如图2.9所示(采用共阳极数码管)。实现方法:图2.9中数码的电源由单片机P2.0引脚控制,当P2.0为低电平时数码管被点亮,然后由P0控制数码管显示的数字,根据表21输出数字”6”。图2.9数码与单片机的接口电路程序设计如下:/实例1:用LED数码管显示数字“6”#include / 包含51单片机寄存器定义的头文件void main(void) P2=0xfe; /P2.0引脚输出低电平,数码显示器接通电源准备点亮

20、 P0=0x82; /让P0口输出数字5的段码92H实例2:用4位数码管静态显示“1234”实现方法:图2.10为4位静态显示电路,在该电路中每一个数码管占用1个单片机并行端口,因而可以同时显示不同的数字,但这种方式由于过多地占用了单片机端口资源,故在实际设计中不实用,特别是显示数位数多时,不采用该种方式,而是采用动态方式实现。 图2.10 4位数码管静态显示电路程序设计如下:/实例2:静态显示数字“1234”#include /包含51单片机寄存器定义的头文件/*函数功能:主函数*/ void main(void) P0=0x6d; /将数字5的段码送P0口 P1=0x7d; /将数字6的段

21、码送P1口 P2=0x07; /将数字5的段码送P2口 P3=0x7f; /将数字6的段码送P3口 while(1) /无限循环,防止程序跑飞 ; 实例3:用4位数码管动态显示“1234”实现方法:上例虽然实现同时显示不同数字的功能,但浪费端口资源严重,故在实现多位同时显示不同数字时多采用如图2.11所示的动态显示,这种方式能够利用较少的端口实现较多位的数字显示,因而得以实用。 图2.11 4位数码管动态显示程序设计如下:/实例3:用4位数码管动态显示“1234”#include#define uint unsigned int#define uchar unsigned charuchar

22、code DIS_SEG4=0xf9,0xa4,0xb0,0x99;uchar code DIS_BIT4=0x01,0x02,0x04,0x08;void delay(uint k)uinti,j;for(i=0;ik;i+) for(j=0;j121;j+) ; void main(void) ucharcnt;while(1) for(cnt=0;cnt4;cnt+) P0=DIS_SEGcnt; P2=DIS_BITcnt; delay(100); P2=0X00; / 每开段位就关闭全部显示可以起到消影的作用。 2.5 拓展提高2.5.1 思考练习1、本案例设计中智能巡迹避障小车的巡线功能与那些器件有关?如何保证巡线的准确性?2、智能巡迹避障小车沿黑线转圈与沿黑线走“S”型路线的控制程序是一样的吗?为什么?3、数码管动态扫描如何实现?如何出现数码管显示出现“闪烁”现象,应如何消除?2.5.2 拓展训练任务:在单片机的P2口扩展一片LCD1602作为显示器件,显示智能小车的行走状态。要求:1、 设计满足任务要求的系统硬件电路。2、 给出程序的设计思路,画出详细的程序流程框图。3、 给出程序清单并加上必要的注释。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1