




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于单片机技术的智能小车一、 设计目的1、 通过本次创新设计项目的设计,培养良好的创新意识,拓宽创新视野;2、 关注最新科技前沿,不断更新自己的理论知识;3、 提高自己查阅专业学术论文的能力,并从中汲取所需要的知识,不断充实自己的理论水平;4、 通过实践提高自己的实际动手能力,在实践中检验理论。二、设计要求1、可实现比较平稳快速的寻迹功能;2、实现简单的避障功能;3、内置实时温度显示,且可以实现温度值上下限报警;4、可进行远程红外遥控控制小车进行左右前后行进。三、功能原理总体功能概述智能寻迹小车采用现在较为流行的8位单片机作为系统大脑。以8051系列家族中的AT89S52为控制主芯片。40脚的DIP封装使它拥有32个完全IO端口,通过对这些端口加以信号输入电路,控制电路,执行电路共同完成寻迹小车。P0.0,P0.1,P0.2,P0.3分别通过LG9110电机驱动来驱动电机1和电机2。由电机的正转与反转来完成小车的前进,后退,左转,右转,遇障碍物绕行,避悬崖等基本动作。在小车前进时如果前方有障碍物,由红外发射管发射的红外信号被反射给红外接收管,红外接管将此信号经过P3.7传送入AT89S52中,主芯片通过内部的代码进行小车的绕障碍物操作,同时主芯片将P3.7的信号状态通过P2.5的LED指示灯显示出来。小车行走时会通过P3.5与P3.6的红外接收探头来进行检测。 当走到悬崖处时,P3.5或P3.6将收到一个电平信号,此电平信号将通过相应端口传送入主芯片中,主芯片通过内部代码完成小车的避悬崖操作。同时P3.5与P3.6的信号状态将通过P2.6/P2.7显示出来。在小车的左转,右转,后退的过程,可以通过观看以P2.0/P0.7为指示灯的运行状态。P3.0接温度传感器,检测周围温度,并通过接4位7段LED显示器实时显示。两个按键以查询/中断两种不同的方式来展现按键操作。你可以按下S1键来进行机器的停止。再按下S2键来进行小车的运行。这个按键的信息分别被P3.2,P3.4接收到。IR1为红外遥控接收器,这就为小车进行远程遥控创造了可能。这个红外遥控接收头接收到红外信号时将信号经过P3.3送入到主芯片,主芯片对其进行解密后以不同的方式对小车进行控制。 系统功能总体方框图 软件设计方框图1、智能寻迹智能小车之所以能够寻迹,主要是由前方的两对红外发射与接收探头来完成的。我们知道光有反色的特性,所以当前方的红外发射探头发射出来的光线遇到物体时,就会形成发射的光线,而这个经反射的红外光线刚好被红外接收探头接收到。当红外接收探头接收到信号后,再将信号送到单片机,由单片机内部程序来控制小车的运行情况。至于如何知道是黑线还是白线,是利用红外光线的一个反射特性。但对于不同的物体反射特性是不一样的,特别是对白色反光的物体,红外光线的反射量将会少一点。而对于黑色不反光的物体,红外反射量将会大量的减少,则可以利用这一特性来完成黑与白的判断。通过电路的合理安装,可以将这种接收到的红外光线变化量转换为电压值传送到单片机中。而单片机就可以进行各种智能化的控制,完成黑线的寻迹功能。寻迹探头:白色:红色发射探头(连续的发射红外线)黑色:黑色接收探头(接收反射回来的红外光线) 红外光线是通过电阻将光信号转变为电信号的。用15K的电阻,并且在进行寻迹时,将红外接收探头用黑色的套管套住,以免多余的光线进入,影响程序的正常判断。如果需要对红外采集信号的灵敏度进行调整,可以将红外发射与接收的距离进行与地面距离的调整。另一种方法可以将那个用于红外接收探头的15K电阻进行调整,以使灵敏度适合自己的需求。在进行实际的智能寻迹时,第一次使用时,先将其他的软件功能关闭,只留寻迹功能来进行测试,完毕后在添加更多功能到寻迹框架中。来发挥它更多的功能。在寻迹功能不能很好完成时,应考虑到太阳光线或其他多余光线的影响。经过测试可知,在光线较暗的室内测试效果较好。 2、温度传感器 为单总线传感器,在本设计中,用接温度传感器,将检测得到的、已经在内部进行了转换的数字量直接送入单片机。1)工作原理及应用 的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解的内部存储器资源。共有2种形态的存储器资源,它们分别是: ROM 只读存储器,用于存放ID 编码,其前 8 位是单线系列编码( 的编码是19H) ,后面48 位是芯片唯一的序列号,最后 8位是以上 56的位的 CRC码(冗余校验)。数据在出产时设置不由用户更改。共 64 位 ROM。 RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失, 共9 个字节 RAM,每个字节为 8 位。第1、2 个字节是温度转换后的数据值信息,第 3、4 个字节是用户 EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第 5 个字节则是用户第 3 个 EEPROM的镜像。第 6、7、8 个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第 9 个字节为前 8个字节的 CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,共3位EEPROM,并在 RAM 都存在镜像,以方便用户操作。温度传感器 3、红外避障红外探测避障是根据反射发出特定频率的红外线确定物体距离的,具体测量过程是这样的,在小车运动过程中先调节距离旋钮使其探测距离达到所用超声波探测器的盲区最大值,用程序控制探头发射信号,然后捕捉反射信号,若无反射信号说明无障碍,如有反射信号说明有障碍,信号从上拉电阻的OC门取出。红外接管将此信号经过P3.7传送入AT89S52中,主芯片通过内部的程序,驱动电机进行小车的绕障碍物操作防撞红外探头 正前方的一对红外发射与接收探头,可以良好的完成前方是否有障碍物的判断,当前方无障碍物时没有红外光线被反射,小车按原来线路行走。当红外线光线发射时,小车会根据内部智能程序是实现不同的功能4、红外遥控在本设计中,使用红外接收器,且与端口连接。特性有:1、 小型设计;2、 内置专用;红外遥控3、 宽角度及长距离接收; 4、 抗干扰能力强;5、 能抵御环境光线干扰;6、 低电压工作;通过遥控器远程发射信号,被红外接收器接收,红外接收器再把信号通过端口将控制信号送入单片机,控制电机驱动,是小车完成前后左右的行驶的操作。5、蜂鸣器 在本设计中,蜂鸣器主要作为温度上下限值报警提示报警。蜂鸣器 蜂鸣器模块电路四、本项目设计创新点 本项目采用以单片机系统开发制作,各项功能集于小车一身,可无需外部控制实现寻迹功能,也是人工智能技术。亦可通过遥控控制,有手动与自动的选择。1.各部件相互独立又相互协同。探测器、数据处理器、驱动电路相互独立,减轻了处理器的负担,能达到快速获取实时路况,分析路况,提供运行方案之目的。处理器不负责控制探测器,减小了系统对软件的依赖,系统速度快,稳定性好。2.实时温度检测显示,同时可以设定上下限报警,有很高的实用价值。3.本小车的最大特色是各模块提供接口,可以随意拆卸,单片机采用了E2PROM,可以重复编程,修改代码,同时也预留了一些接口,便于日后的升级改进。4.本电路板采用布线和印制电路板相结合的策略,增大了修改硬件电路的灵活性。综上所述,本项目的特点是采用模块化设计理念,有很大的升级空间,日后可方便的添加新功能。五、作品实图六、原理图七、使用说明书温度实时显示74LS138L9110是为控制和驱动电机设计的推挽式功率放大专用集成器件DS18B20AT89S52红外遥控接收探头启动开关停止前轮驱动四个1.5V电池串联提供电源避障红外探头 俯视图向前停止右轮左轮向后寻迹红外探头 前视图 遥控器避障红外探头九、总结通过本次创新项目实践,使我们在学习理论知识之余,难得有机会得到一次理论知识的综合应用。在动手的实践过程中,遇到过很多在之前觉得不是问题问题,比如焊接时不小心刮断电路板线路没发现,造成调试过程中的不小麻烦。除了得到了知识的收获外,最可贵的是可以经历从一个项目构思立项到最终完成实物调试的整个过程。同时也要感谢王涛老师、廖京盛老师在资金和技术上的支持与指导!十、原程序#include #include#include /包含51相关的头文件typedef unsigned char uchar; /重定义char数据类型typedef unsigned int uint; /重定义int数据类型sbit DQ=P30; /ds18b20 端口#define dataled P2 /数码管接收数据口static unsigned int RecvData; /定义接收红外数据变量static unsigned char CountData; /定义红外个数计数变量static unsigned char AddData; /定义自增变量static unsigned int LedFlash; /定义闪动频率计数变量unsigned char HeardData; uint temp,tem;uchar flag_get,count,num,minute,second;uchar code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /7段数码管段码表共阴uchar str4; unsigned int ReadTemperature(void);void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void delay(unsigned int i);bit RunFlag=0; /定义运行标志位bit EnableLight=0; /定义指示灯使能位sbit LeftIR=P35; /定义前方左侧红外探头sbit RightIR=P36; /定义前主右侧红外探头sbit FontIR=P37; /定义前方红外探头sbit SB1=P04; /定义蜂呜器sbit S1=P32; /定义遥控红外接收探头sbit LeftLed=P31; /定义前方左侧指示灯端口sbit RightLed=P34; /定义前方右侧指示灯端口/*完成红外探头端口定义*/sbit M1A=P00; /定义电机1反向端口sbit M1B=P01; /定义电机1正向端口sbit M2A=P02; /定义电机2反向端口sbit M2B=P03; /定义电机2正向端口sbit IR1=P33; /定义红外接收端口/*完成红外接收端口的定义*/void Delay() /定义延时子程序 uint DelayTime=10000; /定义延时时间变量 while(DelayTime-); /开始进行延时循环 return; /子程序返回void ControlCar(uchar CarType) /定义小车控制子程序 M1A=0; /将电机1正向电平置低 M1B=0; /将电机1反向电平置低 M2A=0; /将电机2正向电平置低 M2B=0; /将电机2反向电平置低 LeftLed=1; /关闭前方左侧指示灯 RightLed=1; /关闭前方右侧指示灯 Delay(); /将此状态延时一段时间 switch(CarType) /判断小车控制指令类型 case 1: /前进 /判断是否是前进 M1A=1; /将电机1反向端口置高 M2B=1; /将电机2反向端口置高 break; /退出判断 case 2: /后退 /判断是否是后退 M1B=1; /将电机1正向端口置高 M2A=1; /将电机2正向端口置高 break; /退出判断 case 3: /左转 /判断是否是左转 M1B=1; /将电机1反向端口置高 /M2B=1; /将电机2正向端口置高 break; /退出判断 case 4: /右转 /判断是否是右转 /M1A=1; /将电机1正向端口置高 M2A=1; /将电机2反向端口置高 break; /退出判断 case 8: /停转 /判断是否是右转 M1A=0; /将电机1正向电平置低 M1B=0; /将电机1反向电平置低 M2A=0; /将电机2正向电平置低 M2B=0; /将电机2反向端口置高 break; /退出判断 default: /默认情况下的判断 break; /直接退出判断 void Timer0_IR1() interrupt 1 using 3 /定义红外定时器子程序 TH0=0xFF; /向定时器定时间寄存器填入高八位值 TL0=0x19; /向定时器定时间寄存器填入低八位值 AddData+; /自增变量加1void Int1_IR1() interrupt 2 /定义红外接收中断子程序 TR1=0; /将定时/计数器1关闭 if(4=AddData) /0 /判断接收到的数据是0 RecvData=RecvData | 0; /判断到0就将当前位写0 RecvData=RecvData 1; /将当前位向左移动1位 else if(8=AddData) /1 /判断接收到的数据是1 RecvData=RecvData | 1; /将当前位写1 RecvData=RecvData 4; tem=TempH%100; TempL=(temp&0x0f)*6/10;/小数近似处理 flag_get=0; while(LedFlash-) /闪灯总延时 if(IR1=0) /判断延时期间是否有红外信号输入 ExeFlag=1; /将可执行标志位置1 if(S1=0) /判断是否有S1按下 ControlCar(8); /将小车置于停止状态 goto NextRun; /跳转到NextRun标签 LeftLed=LeftIR; /前方左侧指示灯指示出前方左侧红外探头状态 RightLed=RightIR; if(LeftIR=0&RightIR=1) /左侧红外探头没有接收到白色道路信号 ControlCar(4); /左侧没有信号时,开始向右转一定的角度 Delay(); /修改这里进行转弯角度的调整 /Delay(); /同上 /Delay(); /goto NextRun; ControlCar(1); if(LeftIR=1&RightIR=0) / ControlCar(8); /右侧没有信号时,开始向左转一定的角度 /Delay(); ControlCar(3); /右侧没有信号时,开始向左转一定的角度 Delay(); /修改这里进行转弯角度的调整 / Delay(); /同上 / Delay(); /goto NextRun; ControlCar(1); if(LeftIR=0&RightIR=0) /左侧红外探头没有接收到白色道路信号 ControlCar(2); /左侧没有信号时,开始向右转一定的角度 Delay(); /修改这里进行转弯角度的调整 /Delay(); /同上 /Delay(); /goto NextRun; ControlCar(1); if(FontIR=0 ) /判断正前方,前左侧,前右侧红外探头状态 ControlCar(2); /改变小车状态为后退 SB1=!SB1; /将蜂鸣器取反 Delay(); /调用延时子程序 Delay(); Delay(); SB1=!SB1; /将蜂鸣器取反 Delay(); /调用延时子程序 ControlCar(3); /改变小车左转状态 Delay(); /调用延时子程序 Delay(); Delay(); SB1=!SB1; /将蜂鸣器取反 Delay(); /调用延时子程序 SB1=!SB1; /将蜂鸣器取反 ControlCar(1); /改变小车为前进状态 SB1=1; /关闭蜂鸣器声音 NextRun: LedFlash=1000; /运行闪动时间重设定 if(ExeFlag=0) /判断可执行标志位 EX1=1; /开启外部中断1 TR1=1; /开启定时/计数器1 ExeFlag=0; /可执行标志位置0 /*/* 定时器中断 */*/void tim(void) interrupt 3 using 2/中断,用于数码管扫描和温度检测间隔TH1=0xef;/定时器重装值TL1=0xf0;num+;if (num=50) num=0; flag_get=1;/标志位有效 count+;if(count=1) P1=0; dataled=str0; if(count=2) P1=1; dataled=str1; if(count=3) P1=2; dataled=str2; if(count=4) P1=3; dataled=str3; count=0;/*/* 延时函数 */*/void delay(unsigned int i)/延时函数 while(i-);/*/* 初始化 */*/void Init_DS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养殖金融投资合作创新创业项目商业计划书
- 智能家居场景识别与控制大模型创新创业项目商业计划书
- 农畜产品品牌农产品品牌保护创新创业项目商业计划书
- 2025年工具钳工(初中高级)证考试练习题库(含答案)
- 物联网智能设备故障诊断创新创业项目商业计划书
- 电脑硬件降噪创新创业项目商业计划书
- 现场急救知识培训的意义
- 2025年消费与零售行业食品行业可持续发展报告
- 2025年工业互联网平台入侵检测系统数据挖掘与分析优化研究
- 2025年教育行业投资并购风险控制与整合策略报告001
- 汽车维修工(新能源汽车电控技术)赛项竞赛规程
- 2025年中职高考对口升学(旅游概论)真题试卷附参考答案
- 电商模特合同协议
- 公司为完善管理制度
- 行业协会投诉处理流程标准
- 肝性脑病护理病例讨论
- 陪诊与患者合同协议
- 部编新人教版七年级上册历史全册教案
- 中医经络学说的现代科学解读
- 输液过程中突发肺水肿应急预案及处理流程
- 《餐饮服务与数字化运营》课件-1.认识餐饮企业
评论
0/150
提交评论