基于51单片机智能小车

(程序+原理图+PCB+设计报告)

功能介绍

具体功能:

1.三种模式;

避障模式:遇到障碍物会自动避开;

循迹模式:会沿着地上的黑线行走;

蓝牙模式:手机通过蓝牙遥控小车行走;

2.超声波传感器用于避障模式、寻迹传感器用于循迹模式、蓝牙模块用于蓝牙模式;

3.L293D电机驱动电路,控制小车行动;

4.数码管显示模式、速度;

5.按键可以控制选择模式和调整速度;

程序

/*----------------------------------模块头文件调用区-------------------------------------------------------*/
#include "main.h"
#include "Comprehensive_application.h" 
#include "Robot_car.h"
/*----------------------------------变量定义区-------------------------------------------------------------*/
int8_t car_kg=0;//小车运行开关:0-停止;1-运行;初始为停止状态
int8_t car_instructions=0;//小车控制指令:0-停止;1-前进;2-后退;3-左转;4-右转
int8_t car_speed_level=1;//小车速度等级记录变量:分1 2 3 档调速,初始为1当(最低档位)
int8_t bizang_disdance=20;//小车自动避障距离记录变量中

int8_t flag_ms=0;//小车模式
unsigned char Sevro_moto_push_value=13;//舵机归中,产生约,1.5MS 信号


/*----------------------------------模块驱动程序源码区----------------------------------------------------*/
/******************************************************************
 - 函数名称:main(void)
 - 隶属模块:main.c
 - 函数属性:内部
 - 参数说明:无返回值,无带入参数
 - 返回说明:无
 - 功能描述:无
 *****************************************************************/
void main(void)
{  
   init_all();//初始化系统所有参数
   while(1)
   {  
	    Comprehensive_application_menu(); 
	    robot_car(); 	 
   }
}
/******************************************************************
 - 函数名称:init_all(void)
 - 隶属模块:application.c
 - 函数属性:内部
 - 参数说明:无返回值,无带入参数
 - 返回说明:无
 - 功能描述:完成所有硬件、系统资源的初始化任务
 *****************************************************************/
void init_all(void)
{
   keyboard_init();//键盘初始化
   timer0_init();//定时器T0初始化:用于小车调速控制、按键扫描、数码管扫描、超声波接收处理、舵机控制
   timer1_init();//定时器T1初始化:用于超声波测距
	 timer2_init();//定时器T2初始化:用作串口
   sys_data_read();//系统所有参数初始化
}	


/*----------------------------------模块头文件调用区-------------------------------------------------------*/
#include "Comprehensive_application.h"
#include "main.h"
/*----------------------------------变量定义区-------------------------------------------------------------*/

/*----------------------------------模块驱动程序源码区-----------------------------------------------------*/
/******************************************************************
 - 函数名称:Comprehensive_application_menu(void)
 - 隶属模块:Comprehensive_application.c
 - 函数属性:内部
 - 参数说明:无返回值,无带入参数
 - 返回说明:无
 - 功能描述:通过键盘等输入方式实现系统参数的设置与操作		   
 *****************************************************************/
void Comprehensive_application_menu(void)
{  key_value=keyboard_scan();
	 if(key_value==1) //K1按键控制小车的开始/停止
     {  key_value=255; 
        car_kg++;if(car_kg>1) car_kg=0;
		    sys_data_write();	car_stop;//停止 				  
     }
	 if(key_value==2) //K2按键:控制小车动作切换
     {  key_value=255; 
        car_speed_level++; if(car_speed_level>9)  car_speed_level=0;
		    sys_data_write();		
     }
     if(key_value==3) //K3按键:控制小车的速度等级
     {  key_value=255; 
        flag_ms++; if(flag_ms>3)  flag_ms=1;
		    sys_data_write();						  
     }	 
} 

/******************************************************************
 - 函数名称:sys_data_read(void)
 - 隶属模块:Comprehensive_application.c
 - 函数属性:内部
 - 参数说明:无返回值,无带入参数
 - 返回说明:无
 - 功能描述:完成系统所有参数的读操作		   
 *****************************************************************/
void sys_data_read(void)
{ 
	clear_rbuf(DATA_MAX);//清空读数据缓存
	eeprom_read_byte(SECTOR1, read_buf, DATA_MAX);//从指定扇区读数据到数据
	car_kg=read_buf[0];//小车开关指令参数
	//car_instructions=read_buf[1];//小车控制指令参数
	car_speed_level=read_buf[2];//小车速度参数
} 
/******************************************************************
 - 函数名称:void sys_data_write(void)
 - 隶属模块:Comprehensive_application.c
 - 函数属性:内部
 - 参数说明:无返回值,无带入参数
 - 返回说明:无
 - 功能描述:完成系统所有参数的写操作		   
 *****************************************************************/
void sys_data_write(void)
{
    clear_wbuf(DATA_MAX);//清空写数据缓存
	  write_buf[0]=car_kg%10;//小车开关指令参数
	  //write_buf[1]=car_instructions%10;//小车控制指令参数
	  write_buf[2]=car_speed_level%10;//小车速度参数
	  eeprom_write_byte(SECTOR1, write_buf, DATA_MAX);//向指定扇区写入
} 
//完整资料
//微信公众号:木子单片机


/*----------------------------------模块头文件调用区-------------------------------------------------------*/
#include "Robot_car.h"
#include "main.h"
#include "Comprehensive_application.h"
/*----------------------------------变量定义区-------------------------------------------------------------*/
/*----------------------------------模块驱动程序源码区-----------------------------------------------------*/


sbit IR1=P1^0;//L
sbit IR2=P2^0;//R
	
/****************************************************************************
 - 函数名称:void hongwai_genzhong(void)
 - 隶属模块:Robot_car.c
 - 函数属性:内部
 - 参数说明:无返回值,无带入参数
 - 返回说明:无
 - 功能描述:根据遥控/按键指令实现小成功能
 ***************************************************************************/
void robot_car(void)
{ 
  if(car_kg==1) //允许小车运行执行动作
  {  
		
		if (RI)
    {
       RI = 0;                                //清除RI位
		   car_instructions = SBUF;
			 if(car_instructions==5)
			 {
			   flag_ms++; if(flag_ms>3)  flag_ms=1;
			 }
    }
		
		
		
	 //自动避障模式
	 if(flag_ms==1)
	 {
	   Get_Distance();//采集距离
		 if(S<bizang_disdance)//如果小于避障距离则执行:后退一定距离、左转一定距离
		 {
 			  car_back;//后退
        delay_ms(15);		
        car_left;//左转		
        delay_ms(40);					 
		 }	
		 else //如果大于避障距离则执行:前进
		 {  
			  car_go;//前进
	   }
	 }
	 //红外寻迹模式
	 if(flag_ms==2)
	 {
		
    if(IR1==0&&IR2==0)//如果都为高电平,表示左右传感器都没有检测到黑线,执行:前进
		{
			car_go;//前进
			//car_instructions=11;
		}
		else
		if(IR1==1&&IR2==1)//如果都为低电平,表示左右传感器都检测到了黑线,执行:停止
		{
			car_stop;//停止
			//car_instructions=0;
		}
		else
		if(IR1==1&&IR2==0)//如果左传感器为低电平,右为高电平,表示车头偏右,小车需左转调整姿态
		{
			car_left;//左转
			//car_instructions=1;
		}
		else
		if(IR1==0&&IR2==1)//如果右传感器为低电平,左为高电平,表示车头偏左,小车需右转调整姿态
		{
			car_right;//右转
			car_instructions=10;
		}	
		 
	 }	
   //蓝牙遥控模式
	 if(flag_ms==3)
	 {
		
    
		if(car_instructions==1)//前进
		{
			car_go;//前进
		}
		else
		if(car_instructions==2)//后退
		{
			car_back;//后退
		}
		else
		if(car_instructions==3)//左转
		{
			car_right;//左转
		}
		else
		if(car_instructions==4)//右转
		{
			car_left;//右转
		}	
		else	
			car_stop;//停止 
		 
	 }		 
  }
  else 
  {
   	 car_stop;//停止 
  } 
	
}

硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

电容:470uF、10uF、22pF;

1838红外一体接收头;

5V输出接口;锂电池接口;

1K排阻;四位共阴数码管;

寻迹传感器_左;寻迹传感器_右;

LM7805稳压芯片;电机;

传感器1;下载接口;

超声波模块;传感器2; 

电阻:10K;L293D;

晶振:11.0592M    

导线:若干;

流程图:

设计资料

01原理图

    本系统原理图采用Altium Designer19设计,具体如图!

02PCB

    本系统pcb采用Altium Designer19设计,具体如图!

03程序

    本设计使用软件Keil5版本编程设计!具体如图!

04设计报告

    一万两千字设计报告,具体如下!

05设计资料

    全部资料包括程序(含注释)、AD原理图、PCB、设计报告、流程图、实物图、元件清单等。具体内容如下,全网最全! !

​大家共同学习进步:

点赞分享一起学习成长。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐