基于安卓蓝牙控制的智能车设计报告.docx

上传人:b****1 文档编号:23281334 上传时间:2023-05-15 格式:DOCX 页数:36 大小:263.28KB
下载 相关 举报
基于安卓蓝牙控制的智能车设计报告.docx_第1页
第1页 / 共36页
基于安卓蓝牙控制的智能车设计报告.docx_第2页
第2页 / 共36页
基于安卓蓝牙控制的智能车设计报告.docx_第3页
第3页 / 共36页
基于安卓蓝牙控制的智能车设计报告.docx_第4页
第4页 / 共36页
基于安卓蓝牙控制的智能车设计报告.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

基于安卓蓝牙控制的智能车设计报告.docx

《基于安卓蓝牙控制的智能车设计报告.docx》由会员分享,可在线阅读,更多相关《基于安卓蓝牙控制的智能车设计报告.docx(36页珍藏版)》请在冰豆网上搜索。

基于安卓蓝牙控制的智能车设计报告.docx

基于安卓蓝牙控制的智能车设计报告

摘要:

在科技日益发展的今天,无线遥控的机器人小车在危险环境作业、人员搜集等应用中可发挥特殊的作用。

智能车作为智能车辆的仿真车,是研究智能车辆的基础。

介绍了基于蓝牙遥控的多功能智能车。

该设计采用STC89C52RC芯片为主控制器,利用L298N芯片驱动直流电机。

同时利用安卓手机蓝牙无线遥控小车进入蓝牙手动模式,循迹模式和避障模式。

在蓝牙模式下小车采用蓝牙模块利用Android平台远程控制小车的移动;在循迹模式下,采用红外光对管对黑线检测,判断出黑线的位置,将采集到的路况信息输入STC89C52单片机中,让小车沿着黑线自动行驶;在避障模式下,让小车自由移动,避障模块将使小车不会撞上障碍物。

为了避免小车撞上障碍物,该小车使用了HS-RS04超声波模块,通过超声波的发射与接受来确定障碍物的位置,避免小车撞上障碍物。

关键词:

智能车;51单片机;蓝牙通讯;超声波测距;红外检测;

1方案比较与论证

1.1循迹单元方案比较与选择

方案一:

采用可见光发光二极管和光敏二极管

采用普通可见光发光管和光敏管组成的发射-接收电路。

其缺点在于易受到环境光源的影响。

即便提高发光管亮度也难以抵抗外界光的干扰。

方案二:

采用反射式红外发射-接收器

采用反射式红外发射-接收器。

直接用直流电压对发射管进行供电,其优点是实现简单,对环境光源的抗干扰能力强,在要求不高时可以使用。

结论:

根据成本和实现容易性,以与由于传感器可以在车体的下部,发射、接收距地面都很近,外界光对其的干扰都很小。

在基本不影响效果的前提下,为了简便起见,系统选用了方案二。

1.2避障单元方案比较与选择

方案一:

超声波探测

超声波测距对色彩和光照不敏感,可用于识别透明与漫反射性的物体,可在黑暗、有灰尘或烟雾的环境当中使用,超声波测距对电磁场与其他电磁干扰不敏感,可用于电磁干扰强、有毒、有害等恶劣环境中,超声波传感器结构简单、体积小、成本低、技术难度小、信息处理简单可靠、易于小型化和集成化。

当然超声波测距也有一定的缺点,比如受温度、气流、材质的影响。

方案二:

红外式探测

光电对管价格低廉,性能稳定,但探测距离过近(一般不超过3cm),使得小车必须制动迅速。

而我们由于采用普通直流电机作为原动力,制动距离至少需要10cm。

方案三:

雷达探测

雷达测距受恶劣天气的影响比较大,且成本比较高,雷达还必须满足电磁兼容要求。

方案四:

使用视频采集处理装置进行探测

使用CCD实时采集小车前进路线上的图像并进行实时传输与处理,这是最精确的障碍物信息采集方案,可以对障碍物进行精确定位和测距。

但是使用视频采集会大大增加小车成本和设计开发难度,而且考虑到我们小车行进转弯的精确度并未达到视频处理的精度,因而使用视频采集在实际应用中是个很大的浪费。

结论:

综上所述,再结合我们的设计目标,采用方案一最符合设计要求。

1.3无线单元方案与比较

无线控制是为了能够实现对智能车的远程遥控,使小车可以在遥控状态下代替人类完成一些危险项目。

目前短距离无线数据传输技术主要有两大类,一类是基于IrDA红外无线通信技术,另一类是基于ISM(IndustrialScientificMedical)频段射频通信技术。

较为主流的几种通信技术之间既存在着相互竞争,但又在某些实际应用领域相互补充、相互配合,究竟选择何种技术更优越,需要由具体的工作环境来决定。

表1-3所示为四种短距离无线通讯技术主要性能参数。

表1.3四种短距离无线通讯技术主要性能参数

蓝牙技术

红外技术

WiFi技术

ISM射频技术

通信距离

<100m

<10m

<300m

<1000m

通信速率

<10Mb/s

<16Mb/s

<11Mb/s

<500kb/s

通信频率或波长

2.4GHz

0.75um-24um

2.4GHz

315、433.868、915和2400MHz

频率申请

开发难度

模块成本

较低

很低

较低

结论:

通过表格可以看出,他们在近距离通讯领域都可以提供可靠的通信服务,但是同时他们的应用有着各自的技术架构的限制。

在以上的几种中,我最终选择了蓝牙无线传输方式。

2硬件电路设计

2.1总体设计

智能车主要现实远程来控制智能车的运动。

它要实现三种运动模式:

遥控模式、自主循迹模式、自动壁障模式。

根据上述功能需求和模块化思想,智能车可以分为以下几个主要模块:

单片机模块、电源管理模块、无线通讯模块、循迹模块、壁障模块。

其主要结构框图如图1-1所示。

图2.1总体结构框图

2.2单片机模块

2.2.1STC89C52简介

STC89C52是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM-FlashProgramableandErasableReadOnlyMemory)的低电压,高性能COMOS8的微处理器。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

STC89C52特性:

通用I/O口,复位后为:

P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O口);P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需要加上拉电阻;ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成;具有EEPROM功能;具有看门狗自动复位功能;共有3个16位定时器/计数器,其中定时器0还可以当成2个八位定时器使用;外部中断4路,下降沿中断或低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒。

图2.2.1单片机最小系统原理图

2.3电机驱动模块

L298N部包含4个通道逻辑驱动电路,是一种二相和四相电机的专用驱动器,即含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可以驱动4V、2V以下的电机。

2.3.1参数

1.驱动芯片:

L298N双H桥直流电机驱动芯片

2.驱动部分端子供电围Vs:

+5V~+35V;如需要板取电,则供电围Vs:

+7V~+35V

3.驱动部分峰值电流Io:

2A

4.逻辑部分端子供电围Vss:

+5V~+7V(可板取电+5V)

5.逻辑部分工作电流围:

0~36mA

6.控制信号输入电压围:

低电平:

-0.3V≤Vin≤1.5V

高电平:

2.3V≤Vin≤Vss

7.使能信号输入电压围:

低电平:

-0.3≤Vin≤1.5V(控制信号无效)

高电平:

2.3V≤Vin≤Vss(控制信号有效)

8.最大功耗:

20W(温度T=75℃时)

9.存储温度:

-25℃~+130℃

图2.3.1驱动模块原理图

表2.3.1驱动状态编码

2.4电源模块

考虑到电路消耗功率较多,最终采用11.1v的锂电池,可以安在小车上,为小车供电。

电机所需电源由锂电池直接供给,51单片机最小系统以与其扩展模块由锂电池通过7805降压至5V后提供电源。

电源电路为整个系统供电,包括单片机STC89C52、电机驱动、蓝牙模块、超声波模块与其他外围电路。

电源电路分两个部分:

一是接外部电源给电机供电;二是由锂电池作为电源,给系统供电,以确保单片机、电机驱动、蓝牙模块的正常运行。

在电源电路给系统供电时,红色指示灯点亮,只是当前供电正常。

2.5蓝牙模块

蓝牙模块支持短距离无线传输,可以通过手机与蓝牙模块的配对实现对小车的无线控制。

本小车采用的是HC-06蓝牙芯片,在HC-06芯片里已经将蓝牙协议封装好,只需要通过串口通信实现上位机(手机)与下位机(51单片机)的无线通信。

蓝牙模块中蓝牙芯片的TXD与RXD分别于单片机的RXD与TXD相接,VCC与单片机电源,GND与单片机GND相连。

HC-06使用R1114作为稳压芯片,将单片机提供的5V电压转换为3.3V的低电压,为蓝牙芯片供电。

蓝牙芯片应用围:

可用于GPS导航,水电煤气抄表系统,工业现场控制,与移动设备无线连接。

2.6循迹模块

地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被安装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不倒红外光。

单片机就是否反射回来的红外光为依据来确定黑线的位置和小车的行走路线。

红外探测器探测的距离有限,一般最大不应超过15cm。

这里用反射式红外传感器ST188。

当小车在白色地面行驶时,装在车下的红外发射管发射红外线信号,经白色反射后,被接收管接收,一旦接收管接收到信号,输出端将输出低电平;当小车行驶到黑线时,红外线信号被黑色吸收后,将输出高电平,从而实现了通过红线检测信号的功能。

将检测到的信号送到单片机的I/O口,当I/O口检测到的信号为高电平时,表明红外光被地上的黑线吸收了,表明小车处在黑色的引线上;同理,当I/O口检测到的信号为低电平时,表明小车行驶在白色地面上。

图2.6循迹模块原理图

2.7避障模块

本模块使用的是HC-RS04超声波模块。

只需要在Trig/TX管脚输入一个10US以上的高电平,系统便可发出8个40KHZ的超声波脉冲,然后检测回波信号。

本模块通过定时器来测量超声波脉冲从发射到接收的时间,乘以超声波在空气之中的速度,得出的距离就是超声波往返传输的距离,将结果除以2后,结果就是超声波模块与障碍物之间的距离。

3软件设计

整个系统的软件设计可以分为两大部分:

全能车运动控制程序、Android蓝牙控制端的APP。

其中全能车运动控制程序又可以细分为五个主要模块:

全能车运动部分、串口通讯部分、蓝牙控制模式、循迹模式、壁障模式。

3.1智能车运动控制程序

3.1.1智能车运动控制程序构思与框架

智能车运动程序流程主要为:

首先为各个模块的初始化工作,为后面的工作做好前期准备,再就是判断智能车运动模式,最后就是在相应的运动模式下执行相应的指令。

大概程序流程图如图3.1.1所示。

图3.1.1主题程序流程图

智能车处理器为STC89C52,根据其的CPU构架,写出了程序的主体框架。

处理器启动后首先要做好设备初始化,为后面的工作做好前期的准备。

模块初始化工作部分代码如表3-1所示。

表3-1源程序之初始化工作

greatcar.c/main()/模块初始化工作部分代码

/*主函数*/

voidmain(void)

{

/*初始化部分*/

//定时器0初始化

Timer0_Init();

//定时器1初始化

Timer1_Init();

//串口初始化

UART_Init();

//打开总中断开关

EA=1;

//以下若干行省略,详细请参考源代码

}

注释:

Timer0用于超声波模块,Timer1用于模拟PWM。

智能车初始化后,将进行智能车运动模式的选择。

通过安卓手机APP或者拨码开关传递给智能车不同的运动模式指令,主要有三种运动模式。

蓝牙手动模式,对应编码为0x01;循迹模式,对应编码为0x10;避障模式,对应编码为0x11。

编码为0x00是无效编码,也是智能车启动后的默认值。

拨码开关通过两个引脚接到单片机上,两个引脚分别为RM0和RM1。

蓝牙控制模式选择指令有三种,分别为蓝牙手动模式0xA0,循迹模式0xB0以与避障模式0xC0。

其实现的部分代码如表3-2所示。

表3-2智能车运动模式判断与选择

greatcar.c/mian()/运动模式判断与选择

/*主函数*/

voidmain(void)

{

//省略初始化部分代码,详细请参考源代码

/*主体工作部分*/

for(;;)

{

//全能车模式判断,主要判断P2.0和P2.1引脚的电平高低

if(0==RM1&&0==RM0)

{

Run_Mode_Flag=0x11;//全能壁障模式标志,也是自动避开障碍物

}

elseif(0==RM0&&1==RM1)

{

Run_Mode_Flag=0x01;//蓝牙控制模式标志

}

elseif(1==RM0&&0==RM1)

{

Run_Mode_Flag=0x10;//红外循迹模式标志

}else

{

switch(R_Buffer)

{

case0xA0:

Run_Mode_Flag=0x01;

break;

case0xB0:

Run_Mode_Flag=0x10;

break;

case0xC0:

Run_Mode_Flag=0x11;

break;

}

}

//中间省略若干代码,详细参考源代码

//全能车运行模式判断

if(0x01==Run_Mode_Flag)//蓝牙模式,通过串口与蓝牙模块通信,获得相应的执行指令

{

Run_Mode_Bluetooth();

}

elseif(0x10==Run_Mode_Flag)//循迹模式

{

Run_Mode_Track();

}

elseif(0x11==Run_Mode_Flag)//自动模式

{

Run_Mode_Auto();

}

}

}

注释:

Run_Mode_Flag为智能车运动模式标识符;Run_Mode_Bluetooth()为蓝牙手动模式;Run_Mode_Track()为循迹模式;Run_Mode_Auto()为避障模式;

3.1.2智能车基础运动设计与实现

智能车基础运动包括前进、倒车、左转、右转和停车,其对应的功能函数名分别如下:

前进Car_Go_Forward()、倒车Car_Go_Back()、左转Car_Turn_Left()、右转Car_Turn_Right()以与停车Car_Stop()。

智能车是通过PWM技术来实现调整其运动的速度。

前进Car_Go_Forward()和左转Car_Turn_Left()部分代码如表3-3所示,而倒车和右转以与停车与前者相似。

表3-3智能车基础运动源代码

greatcar.c/Car_Go_Forward()&Car_Turn_Left()

/*小车前进*/

voidCar_Go_Forward(void)

{

L_LAMP=R_LAMP=1;//关闭左侧和右侧车灯

if(COUNT<=DUTY)//高电平

{

//左边车轮正转,LIN1=1,LIN2=0

//右边车轮正转,RIN1=1,RIN2=0

Motor_RIN1=Motor_LIN1=1;

Motor_RIN2=Motor_LIN2=0;

}

else//低电平

{

//左右都停止

Motor_LIN1=Motor_RIN1=1;

Motor_LIN2=Motor_RIN2=1;

}

}

/*小车左转*/

voidCar_Turn_Left(void)

{

L_LAMP=0;//打开左侧车灯

R_LAMP=1;//关闭右侧车灯

if(COUNT<=DUTY)

{

//左边车轮停止转动,LIN1=1,LIN2=1

Motor_LIN1=1;

Motor_LIN2=1;

//右边车轮正转,RIN1=1,RIN2=0

Motor_RIN1=1;

Motor_RIN2=0;

}

else

{

//左右都停止

Motor_LIN1=Motor_RIN1=1;

Motor_LIN2=Motor_RIN2=1;

}

Delayms

(1);

L_LAMP=1;//关闭左侧车灯

}

注释:

Delayms()为延时函数,具体实现方法参考附录源代码;

Motor_XINX对应着L298四个输入端,分别控制左右电机正反转以与停止。

3.1.3串口通讯接口部分

蓝牙接收电路与单片机之间是通过UART串口方式通讯的。

STC89C52主要接收并处理来自蓝牙接收电路的数据。

首先是对UART接口的初始化工作,再通过串口中断接收数据。

UART初始化部分代码如表3-4所示。

表3-4UART初始化部分源代码

greatcar.c/UART_Init()

/*串口通讯初始化*/

voidUART_Init(void)

{

//串口工作模式1

SCON=0x50;//等效于SM1=1,SM0=0,REN=1

//Timer2初始化,作为波特率发生器

TL2=RCAP2L=(65536-(FOSC/32/BAUD));

TH2=RCAP2H=(65536-(FOSC/32/BAUD))>>8;//波特率9600

T2CON=0x34;//等效于RCLK=TCLK=TR2=1

//清除RI,串口接收中断标志

RI=0;

//串口中断使能

ES=1;

//记得主程序中要打开EA=1!

}

注释:

FOSC为系统时钟晶振,已经宏定义#defineFOSC11059200L

BAUD为串口通讯波特率,已经宏定义#defineBAUD9600

初始化UART后,在打开串口中断,用于接收来自蓝牙模块的数据。

其实现代码如表3-5所示。

表3-5串口中断处理函数

greatcar.c/UART_Handler()

/*串口通讯中断服务函数*/

voidUART_Handler()interrupt4using1//串口中断号4

{

//判断RI

if(RI)

{

RI=0;//软件方式清除RI标志

R_Buffer=SBUF;//获得蓝牙数据

}

}

注释:

串口接收中断标志RI必须软件清零。

3.1.4智能车蓝牙手动模式设计与实现

在UART接口的基础上获得来自控制端的指令。

通过全局变量R_Buffer来存储当前来自APP客户端的数据,并根据R_Buffer的值来执行相应的功能。

蓝牙指令有0x1F前进指令、0x2F倒车指令、0x3F左转指令、0x4F右转指令、0x5F加速指令、0x6F减速指令、0x7F前车灯、0x8F喇叭。

手动模式部分源代码如表3-6所示。

表3-6蓝牙手动模式部分源代码

greatcar.c/Run_Mode_Bluetooth()

/*全能车模式之蓝牙遥控*/

voidRun_Mode_Bluetooth(void)

{

//再次打开串口中断使能

ES=1;

//根据收到的R_Buffer执行该任务

switch(R_Buffer)

{

case0x1F:

//前进指令

DUTY=7;

Car_Go_Forward();

break;

case0x2F:

//后退指令

DUTY=7;

Car_Go_Back();

break;

case0x3F:

//左转指令

DUTY=7;

Car_Turn_Left();

break;

case0x4F:

//右转指令

DUTY=7;

Car_Turn_Right();

break;

case0x00:

//停止指令

Car_Stop();

break;

case0xD0:

//关闭前车灯

Car_Beep();

break;

}

}

注释:

DUTY为占空比,用于调整电机转动速度。

3.1.5智能车自主循迹模式设计与实现

通过红外对管的工作原理来判断全能车相对位置,以与做出相应的决策。

其部分源代码如表3-7所示。

表3-7智能车循迹模式源代码

greatcar.c/Run_Mode_Track()

/*全能车模式之循迹*/

voidRun_Mode_Track(void)

{

staticU8temp;//零时存放P1低6位数据,一定要写成static,保存上次的结果。

temp=P1;

temp&=0x3f;

switch(temp)

{

case0x07:

//左1、左2和左3同时

DUTY=5;

Car_Turn_Left();

break;

case0x1F:

//左1

DUTY=5;

Car_Turn_Left();

break;

//中间省略若干行,详细参照源代码

case0x3E:

//右1

DUTY=5;

Car_Turn_Right();

break;

case0x38:

//右1、右2和右3同时

DUTY=5;

Car_Turn_Right();

break;

case0x00:

Car_Stop();

break;

default:

//前行

DUTY=4;

Car_Go_Forward();

}

}

注释:

红外对管低电平表示遇到黑色线,即没有收到返回光。

3.1.6智能车自动避障模式设计与实现

通过超声波电路间接测量距离的原理,计算出障碍物距离全能车的距离。

部分代码如表3-8所示。

表3-8智能车避障模式源代码

greatcar.c/避障模式

/*超声波初始化*/

voidTimer0_Init(void)

{

Trig=0;

TMOD&=0xF0;

TMOD|=0x01;

TH0=0;

TL0=0;//定时器0寄存器清零

TF0=0;//清除定时器0溢出标志

TR0=0;//暂时不启动定时器0

}

/*启动触发*/

voidTrig_Start(void)

{

Trig=1;//产生触发信号

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

Trig=0;//关闭触发信号

TH0=0;

TL0=0;

while(!

Echo);//等待返回信号(高电平)

TR0=1;//打开定时器0

while(Echo);

TR0=0;

Distance_Cacl();

}

/*计算距离*/

voidDistance_Cacl(void)

{

U16time;

time=TH0*256+TL0;

Distance=time*1.87/100;

}

/*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1