智能循迹小车论文
- 格式:doc
- 大小:289.50 KB
- 文档页数:24
‘杰威电子’杯电气学院第二届电子设计大赛设计报告参赛题目:智能循迹小车学院班级:12电51学生姓名:杨勇陈锐朱伟峰学生专业:电气工程及自动化日期: 2013年3月31日‘杰威电子’杯第二届院电子设计大赛组委会印制录目摘要………………………………………………………………………………Abstract…………………………………………………………………………...1绪论(或概述)………………..........……………………………………..1.1 引言…………………………………………………………………………...2 设计方案简述………………………………………..…………………..2.1 设计要求………………………………………..………………………….…2.2 总体设计…………………………………..………………………….…3 详细设计……………………………………………………..………………..3.1 单片机模块……………………………………..………………………….…3.2 电机驱动模块…………………………………..………………………….…3.3 显示模块………………………………………..………………………….…3.4 循迹模块………………………………………..………………………….…4 设计结果及分析………………………………………..…….………………..4.1 机械性能……………………………….………………………………..….…4.2 循迹检查….……………………………………..………………………….…4.3 通电检查…….…………………………………..………………………….…5.4 程序调试…….…………………………………..………………………….…5总结……..…………………………………………..………………………….…参考文献…….………………..………………………..………………………….…附录主要程序代码………...………………………..………………………….…摘要摘要:本组的智能小车是采用自己购买的小车,主板及其他模块自行设计并制作。
以单片机为主控模块,接收并将处理过的信号送进驱动芯片 L298N以完成各种相应的操作。
循迹模块是采用红外电管 ST178来实现小车自动寻迹功能,并且将整个过程采用液晶显示 1602(或数码管)显示相应的状态数据。
关键词:L298N LM339 ST178 自动寻迹1 绪论本组智能循迹小车的硬件主要由以单片机为核心的主控模块,自动寻迹模块,电机驱动模块,显示模块等构成。
1.1引言本次设计的智能循迹小车是以单片机STC89C52 为主控制器。
运用反射式红外传感器来进行路径检测和速度监测模块。
将检测数据传回单片机进行处理,同时,用单片机产生PWM 波来控制小车的行进速度,并实时控制小车的行进状态。
另外,在小车上还扩展了LCD 作为人机交互界面,以便于实时了解小车个监测传感器的状态机小车的实时数据,由于本次设计的是智能自动循迹小车,整个任务过程无需人工的任何干预,故而没有进行键盘及遥控等的人工操作设备。
用多路传感器的实时监测和算法的紧密配合来保证小车的顺畅完成任务。
报告是以小车的总体设计为主要线索,包括小车的设计分析及发案论证、小车的软件设计、小车的硬件设计、以及总体的设计流程。
2 设计方案简述2.1 设计要求本次比赛要求任务是,小车具有自动循迹功能,能够沿着主办方提供的赛道按要求在规定的时间内跑完全程。
赛道用黑色胶带在白色地板上粘贴而成,很好识别。
发挥部分是要求小车在行驶过程中检测到并识别出停靠站、减速带标志、和停车站等标志,并做出相应的反应,。
能够记录行驶时间及行驶路程,并显示出来,外还可以有其他的特色创新功能。
2.2 总体设计设计主要有以下几个模块组成:(1)信息采集模块:信息采集部分是由光电检测和运算放大模块组成,光电检测有寻迹检测和测速检测两个部分。
将检测到的信号经过预算放大整形后送给单片机处理,其核心部分是几个光电传感器。
(2)控制处理模块:控制处理模块是一一片stc89c52 单片机为核心,单片机将从采集到的信息进行判断后,按照预定的算法处理,把处理的结果送交电机驱动和液晶显示模块,使之做出相应的动作。
(3)执行模块:执行模块是由液晶显示、电机驱动及电机、蜂鸣器三部分组成。
液晶主要是将单片机处理的结果进行实时显示,方便及时用户了解系统当前的状态,电机驱动根据单片机的指令对两个电机进行动作,使之能够根据需要作出相应的转弯、停车等的动作,以达到预期的目的。
蜂鸣器主要是根据要求在特定的位置作出出响应来报告位置。
3 详细设计3.1 单片机模块单片机模块是整个硬件电路的核心模块,负责整个电路的资源分配并且对各路信号进行采集分析处理。
3.2 电机驱动模块电机驱动模块采用 L298N 来驱动电机。
L298 通过主控单片机接收指令来控制电机的工作状态。
可以对电机进行正常进行左拐弯、右拐弯、后退、停车等操作。
(实际电路要加上拉电阻)电路图如下3.3 显示模块本组的显示模块是采用数码管显示。
用来显示小车整个过程行驶状态。
电路图如下:3.4 寻迹模块本组的寻及模块采用红外探测法。
即利用红外线在不同色物理具有不同反射性质的特点。
在小车行驶过程中不断向地面发射红外光。
当红外光遇到白色底板时发生漫反射反射光被装在小车上的接收光接收;如果遇到黑线,则红外线光被吸收,则小车接收不到信号。
这里用的是 ST178红外对管。
(实际电路要加下拉电阻)电路图如下:4 设计结果及分析测试工具仪器名称用途万用表测量各种电路工作情况电脑调试及下载程序测试过程1. 我们先测试小车的机械性能,结果证明,小车完好2. 循迹板检查。
检查电路线路是否正确,有无短路等故障,器件有无接错等。
检查完毕,没有问题。
3. 通电检查。
把循迹板与小车连接起来,看循迹板上的红外电管能否检测到线路。
4. 下载程序调试。
把已经写好的程序下载到单片机上,小车能实现循迹等功能。
5 总结经过几个礼拜的忙碌,在大家共同的努力下,终于给智能循迹小车画上了句号。
谁说不上是完美,但总算成功了。
刚开始接触这个项目,我们几个男生对其一点也不了解,无从下手。
后来从硬件电路开始,慢慢了解其原理,也算知道个大概。
在这期间,我们也遇到过很多问题。
最开始的便是寻迹电路板。
因为我们用的是万能板,所以焊接起来有些困难,尤其是线路处理方面。
其次是程序,程序是不可能一次性成功的。
在不断的修改调试之后,小车最终还是实现了预想的功能。
参考文献[1]郭天祥51单片机C语言教程电子工业出版社[2]陈晓旭耿鲁静张海王勇C语言算法速查手册人民邮电出版社[3]高吉祥丁文霞数字电子技术电子工业出版社[4]阎石数字电子技术基础高等教育出版社[5]童失白华成英模拟电子技术基础高等教育出版社[6]韦林图解电子电路科学出版社附录:调速程序#include<reg52.h>#define uint unsigned int uint i;sbit fm=P2^0;sbit zuobian=P3^6;sbit youbian=P3^7;sbit zuodeng=P1^1;sbit youdeng=P1^0;sbit in1=P2^1;sbit in2=P2^2;sbit in3=P2^3;sbit in4=P2^4;sbit en1=P2^5;sbit en2=P2^6;void delayms(uint x){uint n,m;for(n=x;n>0;n--)for(m=110;m>0;m--); }/*直走*/void go(){en1=1; //you dian jiin1=1;in2=0;en2=1; //zuo dian jiin3=1;in4=0;}/*左转*/void left_go() {en1=1;in1=1;in2=0;en2=1;in3=0;in4=1;}/*右转*/void right_go() {en1=1;in1=0;in2=1;en2=1;in3=1;in4=0;}void stop(){en1=1;en2=1;in1=1;in2=1;in3=1;in4=1;}/*循迹检测*/void scan(){if(zuobian==0&&youbian==0) {zuodeng=1;youdeng=1;go();}if(zuobian==1&&youbian==0) {zuodeng=0;right_go();}if(youbian==1&&zuobian==0) {youdeng=0;left_go();}if(youbian==1&&zuobian==1) {stop();}}void main(){zuodeng=0;youdeng=0;delayms(500);zuodeng=1;youdeng=1;fm=0;delayms(100);fm=1;while(1){scan();}}液晶程序#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code table[]="0123456789";uint i;uint a,b,c,d,e,f,g,h,sudu,num,qs,time0,time; float lucheng;sbit lcden=P3^1;sbit lcdrs=P3^0;void delayms(uint x){uint n,m;for(n=x;n>0;n--)for(m=110;m>0;m--); }void write_com(uchar com) {lcdrs=0;P1=com;delayms(5);lcden=1;delayms(5);lcden=0;}void write_data(uchar date) {lcdrs=1;P1=date;delayms(5);lcden=1;delayms(5);lcden=0;}void init(){lcden=0;write_com(0x38);write_com(0x0f);write_com(0x06);write_com(0x01);}void yejing(){write_com(0x80);write_data('L');write_data(':');write_data(table[a]); write_data(table[b]); write_data(table[c]); write_data('(');write_data('c');write_data('m');write_data(')');write_data('T');write_data(':');write_data(table[d]); write_data(table[e]); write_data(table[f]); write_data('s');write_com(0x80+0x40); write_data('V');write_data(':');write_data(table[g]); write_data(table[h]);write_data('(');write_data('c');write_data('m');write_data('/');write_data('s');write_data(')');}void main(){uchar th0,tl0;TMOD=0x15;TH0=0;TL0=0;TR0=1;TH1=(65536-45872)/256;TL1=(65536-45872)%256;EA=1;ET1=1;TR1=1;init();while(1){th0=TH0;tl0=TL0;qs=th0*256+tl0;//mai chong de ge shulucheng=qs*0.2;//luchenga=(uint)lucheng/100;b=(uint)lucheng/10%10;c=(uint)lucheng%10;d=time/100;e=time/10%10;f=time%10;sudu=(uint)(lucheng*100)/time;g=sudu/10;h=sudu%10;yejing();}}void T1_time() interrupt 3 {TH1=(65536-45872)/256;TL1=(65536-45872)%256;time0++;if(time0==20){time0=0;time++;}}3 2。