智能小车设计总结材料

智能小车设计总结材料
智能小车设计总结材料

小车设计报告

队员:*** ** ** 学校: 学院

【摘要】:本设计制作了一款具有智能判断功能的小车,功能强大。小车具有以下几个功能:自动避障功能;寻迹功能(按路面的黑色轨道行驶);趋光功能(寻找前方的点光源并行驶到位);检测路面所放置的铁片的个数的功能;计算并显示行走的时间,并可发声发光。设计以两电动机为主驱动,通过各类传感器件来采集各类信息,送入主控单元AT89S52单片机,处理数据后完成相应动,实现了无人控制即可完成一系列动作,相当于简易机器人。

【关键词】:AT89S52 L298N LM393 寻迹避障声控

目录

1、方案选择---------------------------------------------- 3

1.1 主体方案选择与论证-------------------------------------------3

1.2 各模块方案选择和论证----------------------------------------- 3

1.2.1 避障模块------------------------------------------------ 3

1.2.2 铁片检测模块---------------------------------------- 4

1.2.3 寻迹模块------------------------------------------------ 4

1.2.4 寻光模块-------------------------------------------------- 4

1.2.5 声音控制模块---------------------------------------------- 5

1.2.6电机驱动模块---------------------------------------------- 5

2、系统硬件总体设计框图------------------------------------------ 5 3.单元模块设计--------------------------------------------------- 5 3.1 红外避障电路的设计------------------------------------------- 6 3.2 铁片检测电路的设计------------------------------------------- 6 3.3 黑带检测电路的设计------------------------------------------- 7 3.4 寻光电路的设计------------------------------------------- 8

3.5 电机驱动电路的设计------------------------------------------- 9

3.6 声音控制电路的设计------------------------------------------- 9

4、系统软件设计--------------------------------------------------- 9

5、实际测试-------------------------------------------------------10

5.1测试设备----------------------------------------------------10 5.2 测试结果----------------------------------------------------10 5.3 其它功能测量------------------------------------------------11

6.测试结果分析 -----------------------------------------------11 7、设计总结-----------------------------------------------------11

8、参考文献----------------------------------------------------11 9.附:部分源程序代码--------------------------------------------16

1、总体设计方案的选择与论证

1.1 主体方案的论证与比较

方案一:采用各类数字电路来组成小车的控制系统,对外围避障信号,黑带检测信号,铁片检测信号,各路趋光信号进行处理。本方案电路复杂,灵活性不高,效率低,不利于小车智能化的扩展,对各路信号处理比较困难。

方案二:采用ATM89S52单片机来作为整机的控制单元。红外线探头采用市面上通用的发射管与及接收头,经过单片机调制后发射。铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测,黑带采用光敏二极管对光源信号采集,再经过ADC0809转化为数字信号送到单片机系统处理。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现,能很好地满足题目的要求。

比较以上两种方案的优缺点,方案二简洁、灵活、可扩展性好,能达到题目的设计要求,因此采用方案二来实现。

1.2各模块方案选择

1.2.1 避障方案选择

方案一:采用超声波避障,超声波受环境影响较大,电路复杂,而且地面对超声波的反射,会影响系统对障碍物的判断。

方案二:采用红外线避障,利用单片机来产生38KHz信号对红外线发射管进行调制发射,发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出TTL电平。外界对红外信号的干扰比较小,且易于1.2.2 检测铁片方案选择

方案一:采用电涡流原理自制的传感器,取才方便,但难以调试,输出信号也不可*,成功率比较低,难以准确输出传感信息。

方案二:采用市面易购的电感式接近开关,本系统采用市面比较通用LJ18A3-8-Z/BX来完成铁片检测的任务。虽然电感式接近开关占的体积大,对本是可以接受,且输出信号较可*,稳定性好,受外界的干扰小,故采用方案二。

1.2.3 黑带检测方案选择

方案一:采用发光二极管发光,用光敏二极管接收。由于光敏二极管受可见光的影响较大,稳定性差。

方案二:利用红外线发射管发射红外线,红外线二极管进行接收。采用红外线发射,外面可见光对接收信号的影响较小,再用射极输出器对信号进行

隔离。本方案也易于实现,比较可*,因此采用方案二。

1.2.4 寻找光源功能电路选择

方案一:在小车前面装上几个光电开关,通过不同方向射来的光使光电开关工作,从而对小车行驶方向进行控制,根据光电开关特性,只有当光达到一定强度时才能够导通,因此带有一定的局限性。

方案二:在小车前面装上参数一致的光敏二极管或者光敏电阻,再通过A/D转换电路转换成数字量送入单片机,单片机再对读入的几路数据进行存储、比较,然后发出命令对外围进*作。对方案一、二进行比较,方案二硬件稍为复杂,但能够对不同强度的光进行采集以及比较,*作灵活,所以采用方案二。

1.2.5 声音控制电路选择

方案一:采用模拟电路直接搭建,电路主要由柱极体传感器和普通的三极管构成的声控电路,电路设计简单,成本低,功耗低,结构简单,调试方便,能直接获得高低电平为单片机所用,为硬件制作节省时间,但信号采集不够灵敏。

方案二:采用555芯片构造时基集成电路,电路主要由555芯片,晶体管放大器等构成,以555芯片集成构造双稳态电路进行前后状态的改变,信号采集更为精确,但是调试难度相对高,成本和功耗也稍逊,且还没有现存元件。

综上,经比较验证,根据题目要求和基于实际情况,声控电路只要是启动和停止智能小车,方案一本身是与小车相兼容的,性能也比较好,且比较符合我们实际情况,故我们采用方案一。

1.2.6 智能车驱动电路方案选择

方案一:采用分立元件组成的平衡式驱动电路,这种电路可以由单片机直接对其进行*作,但由于分立元件占用的空间比较大,还要配上两个继电器,考虑到小车的空间问题,此方案不够理想。

方案二:因为小车电机装有减速齿轮组,考虑不需调速功能,采用市面易购的电机驱动芯片L298N,该芯片是利用TTL电平进行控制,对电机的*作方便,通过改变芯片控制端的输入电平,即可以对电机进行正反转*作,很方便单片机的*作,亦能满足直流减速电机的要求。因此采用方案二。

2、系统硬件总体设计框图

图1 智能车运行基本原理图框图

说明:避障部分采用红外线发射和接受原理。铁片检测采用电感式接近开关

LJ18A3-8-Z/BX检测,产生的高低电平信号经过处理后,完成相应的记录数目,驱动蜂鸣器发声。黑带寻迹依*安装在车底部左右两个光敏二极管对管来对地面反射光感应。寻光设计在小车前端安装3路(左、中、右)光敏电阻对光源信号采集,模拟信号经过ADC0809转化为数字信号送到MCU处理。记程通过在车轮上安装小磁块,再用霍尔管感应产生计数脉冲。记时由软件实现,显示采用普通七段LED。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现。

3、单元模块设计

3.1红外避障电路

采用红外线避障方法,利用一管发射另一管接收,接收管对外界红外线的

接收强弱来判断障碍物的远近,由于红外线受外界可见光的影响较大,因此用

250Hz的信号对38KHz的载波进行调制,这样减少外界的一些干扰。接收管输

出TTL电平,有利于单片机对信号的处理。采用红外线发射与接收原理。利用单

片机产生38KHz信号对红外线发射管进行调制发射,发射距离远近由RW调节,

本设计调节为10CM左右。发射出去的红外线遇到避障物的时候反射回来,红外

线接收管对反射回来信号进行解调,输出TTL电平。利用单片机的中断系统,在

遇障碍物时控制电机并使小车转弯。由于只采用了一组红外线收发对管,在避障

转弯方向上,程序采用遇障碍物往左拐方式。如果要求小车正确判断左转还是右

转,需在小车侧边加多一组对管。外界对红外信号的干扰比较小,性价比高。。

调试时主要是调制发射频率为接收头能接收的频率,采用单片机程序解决。发射信号强弱的调节,由可调精密电阻调节。红外线发射接受电路原理图如图2所示。

图2 红外避障电路

3.2 检测铁片电路

铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测,产生的高低电平信号经过处理后,完成相应的记录数目,驱动蜂鸣器发声。铁片检测电路如图3所示。

图3 铁片检测电路

3.3 黑带检测电路

黑带检测电路如图4所示:

图4 黑带检测电路

上图只是黑线一侧的检测电路,另一侧检测电路也是一样的,通过将传感器检测的信号转换成高低电平输出,不同的输出状态组合可以实现不同运动,如下表所示:

P1.0 P1.1 运动

0 0 停止

0 1 左转

1 0 右转

1 1 前进

3.4 寻光电路

寻光电路如图5所示:

图5 寻光电路

3.5 电机驱动电路

L298驱动两台直流减速电机的电路。引脚6,9可用于PWM控制。如果机器人项目只要求直行前进,则可将5,10和7,12两对引脚分别接高电平和低电平,仅用单片机的两个端口给出PWM信号控制6,11即可实现直行、转弯、加减速等动作。驱动电路如图6所示:

图6 电机驱动电路

3.6 声音控制电路

电路主要由检音器(驻极体传感器),晶体管放大器和LM358等构成,采用模拟搭建。

当声敏传感器MIC有声音信号时,C1电容采集信号,经过三极管Q1将其放大,此时LM358输出高电平;当声敏传感器MIC没有检测到声音信号时,LM358输出低电平。

4、系统软件设计

5、实际测试

5.1测试设备

模拟跑道:带直线和半圆弧引导线,地上铺有若干宽15cm长不定的薄铁板,道路中间设有障碍物、终点设有车库。

秒表:精度0.01s

卷尺:精度0.001m

5.2测试结果

5.2.1基本要求

题目要求一:小车按引导线到达B点,在直道区测量金属薄片的数量立即发出声光信号,并实时存储、显示在“直道区”所测到的薄铁片数目。

实际测量结果:小车准确沿引导线行驶,到达B点后准确的测量出薄铁片的数目,同时显示出正确的结果。

题目要求二:电动车到达B点以后进入“弯道区”,沿圆弧引导线到达C点,在C点停车5秒钟,停车期间发出断续的声光信号。

实际测量结果:小车准确沿圆弧引导线到达C点,并在C点准确停车5秒钟,发出声光信号。

题目要求三:电动车在光源的诱导之下,通过障碍区到达车库,电动车必须在两个障碍物之间通过且不得与其接触。

实际测量结果:电动车顺利绕过障碍物到达车库。

题目要求四:电动车到达车库后立即停车,全程时间小于90秒。

实际测量结果:

电动车行走的时间基本上在90s左右。

5.2.2发挥部分:

题目要求一:电动车在“直道区”在行驶过程中,存储并显示每个薄铁片(中心线)至起跑线间的距离。

测试结果:

设定有两片金属薄片,且其离起跑线的距离分别为60cm和180cm,先把测量

测量结果:

到达车库停车后液晶板准确显示行驶的全程时间。

5.2.3 其他功能的测量结果:

1.准确显示全程走过的路程;

2.当停车位置不准时先倒车然后纠正停靠位置。

6.测试结果分析

由上述测量结果可以看出简易智能电动车很好的完成了题目要求的基本要求和发挥部分的前两项容。全程时间的测试具有较低的误差,在寻迹的过程中基本上达到了不脱离引导线的良好效果,而且在液晶显示部分添加了全程路程的显示。

7、设计总结

经过为期四天三夜的设计,感触颇深的是解决问题的方法、技巧。在这四天中,我们遇到许许多多问题,同时也不断的克服遇到的困难。通过这几天的设计竞赛,我们再次培养了实践能力和协作精神,这对以后的学习和工作不无裨益。当然,我们的设计还存在着一些缺陷,有待于在将来设计中进一步提高,在此恳请各位老师批评指正。

8、参考文献

1 德金、粤初等编著,MCS-51系列单片机接口电路与应用程序实例,:航空航

天大学,1991年4月

2 Howard M.Berlin ,Guide to CMOS Basics, Circuits, &Experiments Howard

M.Berlin,Ltd

3 铁力等编著,传感器及其接口技术,:,2000年

附:

部分源代码:

//寻迹部分的程序

#include

#define uint unsigned int

#define uchar unsigned char

sbit out1=P2^0;

sbit out2=P2^1;

sbit in1=P0^0;

sbit in2=P0^1;

sbit in3=P0^2;

sbit in4=P0^3;

sbit en1=P0^4;

sbit en2=P0^5;

uint i,j,pwm1,pwm2,flag; void init()

{

TMOD=0X11;

TR0=1;

TR1=1;

TH0=(65536-50)/256;

TL0=(65536-50)%256;

EA=1;

ET0=1;

flag=3;

}

void timer0() interrupt 1 {

TH0=(65536-50)/256;

TL0=(65536-50)%256;

i++;

j++;

if(i<=pwm1)

en1=1;

else

en1=0;

if(i==50)

{

i=0;

en1=1;

}

if(j<=pwm2)

en2=1;

else

en2=0;

if(j==50)

{

j=0;

en2=1;

}

}

void straight()

{

if(flag==0)

{

pwm1=49;

pwm2=49;

in1=1;

in2=0;

in3=1;

in4=0;

}

}

void turn_left() {

if(flag==1)

{

pwm1=45;

pwm2=35;

in1=1;

in2=0;

in3=0;

in4=1;

}

}

void turn_right() {

if(flag==2)

{

pwm1=35;

pwm2=49;

in1=0;

in2=1;

in3=1;

in4=0;

}

}

void stop()

{

if(flag==3)

{

pwm1=0;

pwm2=0;

in1=0;

in2=0;

in3=0;

in4=0;

}

}

void main()

{

init();

while(1)

{

if(out1==1&&out2==1)

flag=0;

if(out1==0&&out2==1)

flag=1;

if(out1==1&&out2==0)

flag=2;

if(out1==0&&out2==0)

flag=3;

switch(flag)

{

case 0:straight();break;

case 1:turn_left();break;

case 2:turn_right();break;

case 3:stop();break;

default:break;

}

}

}

//通过按键控制小车的程序

#include

#define uint unsigned int

#define uchar unsigned char

sbit key1=P1^0;

sbit key2=P1^1;

sbit key3=P1^2;

sbit in1=P0^0;

sbit in2=P0^1;

sbit in3=P0^2;

sbit in4=P0^3;

sbit en1=P0^4;

sbit en2=P0^5;

uint i,j,pwm1,pwm2,flag;

void init()

TMOD=0X11;

TR0=1;

TR1=1;

TH0=(65536-200)/256;

TL0=(65536-200)%256;

EA=1;

ET0=1;

flag=0;

P1=0xff;

}

void timer0() interrupt 1 {

TH0=(65536-200)/256;

TL0=(65536-200)%256;

i++;

j++;

if(i<=pwm1)

en1=1;

else

en1=0;

if(i==50)

{

i=0;

en1=1;

}

if(j<=pwm2)

en2=1;

else

en2=0;

if(j==50)

{

j=0;

en2=1;

}

}

void straight()

{

if(flag==0)

{

pwm1=44;

pwm2=44;

in1=1;

in2=0;

in3=1;

in4=0;

}

}

void turn_left() {

if(flag==1)

{

pwm1=44;

pwm2=20;

in1=1;

in2=0;

in3=1;

in4=0;

}

}

void turn_right() {

if(flag==2)

{

pwm1=20;

pwm2=44;

in1=1;

in2=0;

in3=1;

in4=0;

}

}

void stop()

{

if(flag==3)

{

pwm1=0;

pwm2=0;

in1=0;

in2=0;

in3=0;

in4=0;

}

}

void main()

{

init();

while(1)

{

if(key1==0)

flag=1;

if(key2==0)

flag=2;

if(key3==0)

flag=3;

switch(flag)

{

case 0:straight();break;

case 1:turn_left();break;

case 2:turn_right();break;

case 3:stop();break;

default:break;

}

}

}

相关主题
相关文档
最新文档