基于51单片机的红外自动避障小车(lunwen+任务书+开题+文献综述+翻译及原文+避障程序)

目 录
1 绪论 1
1.1 课题研究背景及意义 1
1.2 国内外研究现状 1
1.2.1国外智能车辆研究现状 2
1.2.2发展前景 3
1.3 课题主要研究内容 4
2 工作原理及总体设计 5
2.1 工作原理 5
2.2 总体设计 5
3 硬件设计 7
3.1 小车车体设计 7
3.2 电源模块 7
3.3 电机驱动模块 8
3.4 电机模块 9
3.5 检测模块 9
3.6 最终方案 9
4 硬件实现及单元电路设计 11
4.1 主控制模块 11
4.2 单片机的复位电路与振荡电路设计 11
4.3 电源设计 13
4.4 驱动电路 14
4.5 E18-D50NK光电开关避障模块 15
4.6 红外光电开关传感器的安装 17
4.7 小车车体总体设计 17
5 软件设计与仿真调试 18
5.1 主程序流程 18
5.2 Keil uVision3环境 19
5.3 单片机程序烧写 22
5.4 系统的安装与调试 23
结束语 24
致 谢 25
参考文献 26
附录 28
附录A 整体电路图 28
附录B 部分源程序 29
1.3 课题主要研究内容
系统采用STC89C52单片机作为核心控制单元,小车车体前方的红外线传感器检测前方障碍物,用于判断是否需要转弯,防止小车碰到障碍物。
本设计题目为基于单片机的自动避障小车设计,主要研究小车的避障功能,小车遇到障碍物时,当距离障碍物大于25cm,PWM信号自增,驱动电机加速,小车加速前进,当小于15cm时,PWM信号自减,驱动电机减速,小车减速前进,并且小车采取相应的避障措施。这里探测装置必不可少,因为红外在距离检测方面的准确定位。所以采用红外线传感器作为探测装置。运用单片机搭建控制电路,把红外信号接到单片机上,通过单片机对信号的检测和处理,控制外围电路使小车转向,来避开障碍物。通过H桥驱动电路来控制电机的转向和前进。
2 工作原理及总体设计
2.1 工作原理
在这里我们采用STC89C52作为控制电路,把两个红外信号接到单片机上,通过单片机对信号的接收和处理,控制外围电路使小车转向,来避开障碍物。通过H桥驱动电路来控制电机的转向和前进。通过为微控制芯片对数据进行处理,处理速度远远满足小车的运行和避障的需求。也可以通过编写不同的程序,增加模块来增加小车的功能。
本小车使用STC89C52单片机作为主控芯片,它通过红外线传感器获知前方的障碍物情况,若不存在障碍物,小车直线前进;若左前方发现障碍物,左前放的红外传感器将信号传给单片机,单片机作出处理后控制小车向右转弯以躲开障碍物;若右前方发现障碍物,右前放的红外传感器将信号传给单片机,单片机作出处理后控制小车向左转弯以躲开障碍物;若正前方发现障碍物,则两个红外传感器将信号传给单片机,单片机作出处理后控制小车倒车至合适距离后,通过传感器传来的信号决定转弯方向,以躲开障碍物。
2.2 总体设计
通过学习相关技术资料可了解到,红外测模块是系统的关键模块之一,红外检测方案的好坏直接关系到整体性能的优劣,因此确定红外检测方案是总体方案的关键。
检测使用的红外传感器是专业的红外避障传感器,当有障碍物时,它能够反映出电平高低的变化,而且更加廉价易得,适合简单的避障。系统总体设计方框图如图2-1所示。

图2-1 系统总体设计方框图
根据系统方案设计,系统包括以下模块:STC89C52主控模块、L298N电机驱动模块、电源模块、红外检测模块等。各模块作用如下:
STC89C52主控模块,作为整个智能小车的“大脑”,将根据传感器的信号,控制算法做出控制决策,驱动直流电机等完成对智能小车的控制。
电源模块,为整个系统提供合适而又稳定的电源。
红外检测模块,检测障碍信号,为单片机提供前方道路信息。
电机驱动模块,驱动直流电机完成智能车的加减速和转向控制。

#include <reg52.h>	         //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535

sbit biz_l = P1^1;		    //左边避障
sbit biz_r = P1^0;		    //右边避障

/********************LN298电机驱动IO口定义*********************************/
sbit qu_ll = P2^1;	   //左边电机控制IN1
sbit qu_zl = P2^0;	   //左边电机控制IN2
sbit qu_zr = P2^2;	   //右边电机控制IN1
sbit qu_rr = P2^3;	   //右边电机控制IN2

/*********************1ms 延时函数*****************************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=q;i>0;i--)
		for(j=120;j>0;j--);
}

/***********************小车前进函数************************/
void go()
{
	qu_ll = 1;  
	qu_zl = 0; 
	qu_zr = 0; 
	qu_rr = 1;    	
}

/***********************小车后退函数************************/
void back()
{
	qu_ll = 0;  
	qu_zl = 1; 
	qu_zr = 1; 
	qu_rr = 0;    	
}

/***********************小车左转函数 只有一个轮子动************************/
void left()
{
	qu_ll = 0;  
	qu_zl = 0; 
	qu_zr = 0; 
	qu_rr = 1;    	
}

/***********************小车左转函数 左边轮子后退 右边轮子前进************************/
void left_s()
{
	qu_ll = 0;  
	qu_zl = 1; 
	qu_zr = 0; 
	qu_rr = 1;    	
}

/***********************小车停下函数************************/
void stop()
{
	qu_ll = 0;  
	qu_zl = 0; 
	qu_zr = 0; 
	qu_rr = 0;
}

/***********************小车右转函数 只有一个轮子动************************/
void right()
{
	qu_ll = 1;  
	qu_zl = 0; 
	qu_zr = 0; 
	qu_rr = 0;    	
}

/***********************小车右转函数 左边轮子前进 右边轮子后退************************/
void right_s()
{
	qu_ll = 1;  
	qu_zl = 0; 
	qu_zr = 1; 
	qu_rr = 0;	
}

/*********************红外避障头避障*****************************/
void hongwai_bizhang()
{
	if((biz_l == 1) && (biz_r == 1))     //没有障碍物时就前进
	{
	  	 go();
	}
	else if((biz_l == 0) && (biz_r == 0))//两个传感器都有障碍物时,先后退然后再右转
	{
	  	 stop();
		 delay_1ms(100);
		 back();
		 delay_1ms(500);
		 right_s();
		 delay_1ms(380);
	}
	else if(biz_l == 0)   				 //左边传感器都有障碍物时,先停下然后再右转
	{
		stop();
		delay_1ms(100);
		right_s();
		delay_1ms(200);
	}	
	else if(biz_r == 0)					//右边传感器都有障碍物时,先停下然后再左转
	{
		stop();
		delay_1ms(100);
		left_s();
		delay_1ms(200);	
	}
	go();
}

/***************主函数*****************/
void main()
{
	while(1)
	{
		delay_1ms(150);	
		hongwai_bizhang();	
	}
}







物联沃分享整理
物联沃-IOTWORD物联网 » 基于51单片机的红外自动避障小车(lunwen+任务书+开题+文献综述+翻译及原文+避障程序)

发表评论