基于51单片机智能小车—避障、寻迹、蓝牙
·
基于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、设计报告、流程图、实物图、元件清单等。具体内容如下,全网最全! !

大家共同学习进步:
点赞分享一起学习成长。
更多推荐

所有评论(0)