湖南大学工程训练项目报告蓝牙小车.docx

上传人:b****6 文档编号:13570801 上传时间:2023-06-15 格式:DOCX 页数:19 大小:932.17KB
下载 相关 举报
湖南大学工程训练项目报告蓝牙小车.docx_第1页
第1页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第2页
第2页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第3页
第3页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第4页
第4页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第5页
第5页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第6页
第6页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第7页
第7页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第8页
第8页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第9页
第9页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第10页
第10页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第11页
第11页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第12页
第12页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第13页
第13页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第14页
第14页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第15页
第15页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第16页
第16页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第17页
第17页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第18页
第18页 / 共19页
湖南大学工程训练项目报告蓝牙小车.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

湖南大学工程训练项目报告蓝牙小车.docx

《湖南大学工程训练项目报告蓝牙小车.docx》由会员分享,可在线阅读,更多相关《湖南大学工程训练项目报告蓝牙小车.docx(19页珍藏版)》请在冰点文库上搜索。

湖南大学工程训练项目报告蓝牙小车.docx

湖南大学工程训练项目报告蓝牙小车

 

蓝牙小车报告

 

小组成员:

班级:

联系方式:

一、引言

------------------------------1

二、总体方案

------------------------------1

三、电路与程序设计

------------------------------3

四、调试方案和调试结果

------------------------------7

五、遇到的问题和解决方案

------------------------------7

六、工程管理方案

------------------------------8

七、总结和体会

------------------------------8

八、实物图

------------------------------9

九、源程序

-----------------------------10

一、引言

蓝牙作为一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。

蓝牙自从被创制以来就得到了广泛的关注与应用,现代许多移动设备和固定设备上都安装了蓝牙,进行文件传输、无线控制等。

蓝牙传输范围大,可穿透不同物质以及在物质间扩散;采用跳频展频技术,抗干扰性强;功耗小,成本低等等。

蓝牙的这些优势使得它在控制技术领域备受青睐。

本小组的选题是蓝牙控制小车,意思就是以蓝牙作为无线控制的载体,通过手机上的蓝牙APP对蓝牙芯片发出控制命令,通过串口传输指令给小车的核心STC89C51单片机,51单片机再通过对蓝牙传送的信息进行处理,控制小车各元件,LED灯、静态数码管、蜂鸣器、电机,来指导小车完成指定动作。

二、总体方案

本小组设计的蓝牙小车的控制机制是:

以STC89C51单片机作为控制核心,通过手机上的蓝牙APP对小车发出控制命令,小车上的蓝牙芯片接收到APP发出的指令后通过串口传输给STC89C51单片机,单片机通过对指令的一系列处理,控制小车上相关元件,LED灯、静态数码管、蜂鸣器、电机,来指导小车完成指定动作。

框图:

原理图:

软件流程图:

三、电路与程序设计

(1)电路设计(各单元模块功能):

1、控制器模块

采用STC89C51单片机,可完全实现ISP在线编程,直接通过USB线为小车烧录程序做开发,不用购买转换器。

作用:

蓝牙小车的控制核心,通过对单片机烧录蓝牙控制程序,检测蓝牙信号,对接收到的蓝牙信号进行处理,对小车发出控制命令,从而完成无线控制。

2.电机驱动模块

运用两块LG9110驱动芯片来分别控制左前轮和右前轮。

作用:

用驱动芯片做单片机与马达的桥梁,当芯片接收到来自单片机的命令信号时,芯片会做出相应的命令来使马达运作,当LG9110的7脚输入为高电压6脚输入为低电压时马达正转,当其6脚输入为高电压7脚输入为低电压时马达反转,从而实现控制左转与右转的功能;通过延时函数调节马达电压的占空比,实现小车的加速减速功能。

3、蓝牙模块

由手机上的蓝牙APP、安装在小车上的蓝牙接收芯片以及4条给STC89C51单片机传送命令的数据线组成。

作用:

通过手机上的蓝牙APP对小车发出控制命令,小车上的蓝牙接收器接收到APP发出的命令后传输给STC89C51单片机,单片机命令进行处理,指导小车完成指定的动作。

蓝牙模块是沟通用户与设备的桥梁。

4.电源模块

采用4节1.5V干电池供电,电压达到6V,给单片机、电机和其他芯片供电。

作用:

给小车提供能源。

5.发光二极管和蜂鸣器

采用普通发光二极管和蜂鸣器分别发出光声进行提示。

作用:

两个发光二极管一直亮着表示小车处于前进状态;发光二极管闪烁和蜂鸣器鸣叫表示小车后退;左边的发光二极管亮而右边的发光二极管灭表示小车左转;右边的发光二极管亮而左边的发光二极管灭表示小车右转。

6.静态数码管

静态数码管用来显示小车的速度。

(2)程序设计:

1、

软件设计原理:

蓝牙芯片检测蓝牙信号,通过串口将蓝牙信号传递给STC89C51单片机。

51单片机接收到蓝牙信号后,经过一定的处理计算,控制小车各部分元件。

1)借助设定全局变量s,并通过改变占空比来模拟PWM控制小车行驶速度

2)借助计时器中断,配合速度变量s来实现流水灯及流水灯速度变化

3)利用延时函数实现LED灯闪烁及蜂鸣器蜂鸣

2、设计所用工具:

KeiluVision4

3、主程序流程框图:

N

Y

4、中断服务子程序:

//串口中断用于接收蓝牙信号

voidUsart()interrupt4{

switch(SBUF){

case0x40:

//前进

case0x41:

//后退

case0x42:

//左转

case0x43:

//右转

dat=SBUF;break;

case0x46:

if(s>1)s--;

LED=date[s];break;//减速

case0x45:

if(s<3)s++;

LED=date[s];break;//加速

default:

dat=0x00;

}

RI=0;//清除接收中断标志位

}

//定时器中断用于流水灯

voidTimer0()interrupt1{

TH0=0x3C;//设置初始值

TL0=0xB0;

Time++;

if((Time==(4-s))||(Time>3)){//满足条件时移动流水灯

WATER=_crol_(WATER,1);

Time=0;

}

}

5、通信协议

1)主从关系:

蓝牙技术规定每一对设备之间进行蓝牙通讯时,必须一个为主角色,另一为从角色,才能进行通信,通信时,必须由主端进行查找,发起配对,建链成功后,双方即可收发数据。

理论上,一个蓝牙主端设备,可同时与7个蓝牙从端设备进行通讯。

一个具备蓝牙通讯功能的设备,可以在两个角色间切换,平时工作在从模式,等待其它主设备来连接,需要时,转换为主模式,向其它设备发起呼叫。

一个蓝牙设备以主模式发起呼叫时,需要知道对方的蓝牙地址,配对密码等信息,配对完成后,可直接发起呼叫。

2)呼叫过程:

蓝牙主端设备发起呼叫,首先是查找,找出周围处于可被查找的蓝牙设备。

主端设备找到从端蓝牙设备后,与从端蓝牙设备进行配对,此时需要输入从端设备的PIN码,也有设备不需要输入PIN码。

配对完成后,从端蓝牙设备会记录主端设备的信任信息,此时主端即可向从端设备发起呼叫,已配对的设备在下次呼叫时,不再需要重新配对。

已配对的设备,做为从端的蓝牙耳机也可以发起建链请求,但做数据通讯的蓝牙模块一般不发起呼叫。

链路建立成功后,主从两端之间即可进行双向的数据或语音通讯。

在通信状态下,主端和从端设备都可以发起断链,断开蓝牙链路。

3)数据传输:

蓝牙数据传输应用中,一对一串口数据通讯是最常见的应用之一,蓝牙设备在出厂前即提前设好两个蓝牙设备之间的配对信息,主端预存有从端设备的PIN码、地址等,两端设备加电即自动建链,透明串口传输,无需外围电路干预。

一对一应用中从端设备可以设为两种类型,一是静默状态,即只能与指定的主端通信,不被别的蓝牙设备查找;二是开发状态,既可被指定主端查找,也可以被别的蓝牙设备查找建链。

四.小车的调试方案和调试结果

(1)各模块调试方案和结果:

1、控制器模块:

打开小车开关,观察小车在初始程序下是否工作正常。

通过测试,控制器模块工作正常。

2、电机驱动模块:

烧录电机控制程序,观察两个电机正反转是否正常。

通过测试,电机驱动模块工作正常。

3、蓝牙模块:

下载手机蓝牙APP,并给单片机烧录蓝牙控制程序,通过APP发送命令,若小车做出指定动作,则蓝牙模块正常工作。

通过测试,蓝牙模块工作正常。

4、电源模块:

安装电池,打开小车开关,观察小车电源灯是否亮。

电源灯亮,电源模块工作正常。

5、发光二极管、蜂鸣器和静态数码管:

打开小车开关,观察发光二极管和蜂鸣器在初始程序下是否工作正常。

通过测试,控制器模块工作正常。

(2)系统功能调试方案和结果:

在keil软件上编写程序之后,生成.hex文件,并将它烧录到单片机内,通过手机蓝牙APP给小车发送命令,观察小车是否完成了指定的命令动作,如不能则再次修改程序、检查电路,直至发现错误或测试成功。

五.遇到的问题和解决方案

(1)硬件制作:

1、由于初步接触三极管,不能清楚分辨引脚,未能直接进行焊接,通过询问老师,上网查找资料等方法,顺利焊接成功;

2、实际焊接元器件与电路图有些许出入,通过参照模板及询问老师,将所有的元器件都焊接正确;

3、组员对各类元器件焊接经验不足,焊接时经常出现各类细节问题处理不当,有时需拆下并重装相关部件。

(2)程序编写:

由于小组选定的课题是红外遥控小车,但在红外遥控小车的实现过程中遇到了无法解决的问题。

当小车的电机工作时,小车的红外模块就不能正常工作,即当电机工作时,红外接收始终输出高电平,在更换红外接收及多次修改程序后,断定为小车电路结构问题,向老师反应这个问题后得到相同的答复。

于是在老师的同意之后改为蓝牙控制小车;由于有了红外遥控的调试历练,再加上蓝牙遥控与红外遥控在原理上并无太大区别,所以很快便实现了蓝牙控制小车的所有功能。

(3)功能调试:

功能调试中共遇到两个问题。

一个是电机调速问题,在通过查阅资料和询问老师之后,确定了利用延时函数改变占空比来模拟PWM控制小车行驶速度的方案。

第二个问题是流水灯问题,在实现过程中发现用延时函数实现效果不佳,后经过多次试验,改为利用计时器实现流水灯,效果良好。

六、工程管理方案

(1)人力资源配置:

组长黄金朋:

主要负责小车各部分电路焊接与调整,以及MV拍摄及后期加工。

组员李晓宇:

主要负责小车软件部分,负责编程以实现小车各项功能。

组员许炜娴:

主要负责撰写终期检查报告,以及协助小车MV拍摄。

(2)项目进度计划:

首先完成了主板和各部件的焊接以及机械组装;接着,小组成员先通过图书馆借阅相关图书及网络查找相关资料等方式,了解并学习单片机编程及蓝牙遥控、电动机、LED灯、蜂鸣器等部分的工作原理;在充分学习之后,制定实现蓝牙遥控小车相关功能的方案,并进行编程,实现各项功能;最后对小车进行一定的调试,完善方案,并最终完成蓝牙小车的制作。

七、总结与体会

通过蓝牙小车设计与制作,小组成员都受益匪浅,得到了很大的锻炼,无论是在理论知识方面,还是动手能力方面,都得到了极大的提高,所以,总体上来说本次电子实习任务还是具有很大的意义的。

首先,在蓝牙小车硬件部分的制作中,小组成员通过合理的分工合作,互相帮助,更加扎实了焊接的基本功,此外也掌握了P型三极管和N型三极管的判别方法等等电子元件知识。

然后在软件制作部分,根据本次设计要求,本小组系统地阅读了大量的资料,并认真分析了设计课题的需求,还系统学习了51系列单片机的工作原理及其使用方法,并独立设计蓝牙小车的整个项目。

但是由于原本小组的课题是红外遥控,却因为小车的设计有问题,导致红外遥控无法实现,所以在编程过程中小组成员遇到的失败是很多的,但失败是成功之母,失败也是一种宝贵的财富,所以在失败中,小组成员学会了如何面对,如何寻找失败的原因。

通过本次课题设计,加强了小组成员对专业知识的运用能力,同时也增强了自学能力、收集资料能力、动手能力以及分析解决问题的能力。

当然,最重要的就是小组成员掌握了一种新的工具——keil,通过keil对单片机进行编程可以实现很多的控制功能。

总之,在课题设计的过程中,无论是对于学习方法还是理论知识,我们都有了新的认识,受益匪浅,这将激励我们在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。

八、实物图

九、源程序

#include

#include

#defineLEDP2//静态数码管

#defineWATERP1//流水灯

sbitIB1=P0^0;//LG9110引脚

sbitIA1=P0^1;

sbitIB2=P0^2;

sbitIA2=P0^3;

sbitLEDR=P2^0;//D11

sbitLEDL=P0^7;//D10

sbitBeep=P0^6;//蜂鸣器

sbithit=P3^5;//V3

voidIrInit();//初始化函数

voidConfiguration();//初始化中断

voidbeep(unsignedcharc);//蜂鸣函数

voiddelay(unsignedchari);//延时函数

voidadvance();//前进函数

voidback();//后退函数

voidleft();//左转函数

voidright();//右转函数

unsignedchars=3,dat=0x00,Time=0;//s用于调节速度,dat用于存储接收到的蓝牙信号,Time用于流水灯计时

unsignedcharcodedate[4]={0x00,0x9f,0x25,0x0d};//存储静态数码管输出

 

voidmain(){//主函数

IrInit();

Configuration();

while

(1){

switch(dat){

case0x00:

LEDL=LEDR=1;break;//停车

case0x40:

advance();break;//前进

case0x41:

back();break;//后退

case0x42:

left();break;//左转

case0x43:

right();break;//右转

}

}

}

//初始化函数

voidIrInit(){

P1=0xff;//熄灭静态数码管

LED=date[s];//显示当前速度

IA1=IA2=IB1=IB2=0;//停止电机

LEDL=LEDR=1;//熄灭前灯

WATER=0Xfe;//流水灯初始

Beep=1;//初始化蜂鸣器

}

//初始化中断

voidConfiguration(){

TMOD=0x21;//选择计时器工作方式

TH0=0x3C;//设置初始值,定时50MS

TL0=0xB0;

ET0=1;//打开定时器0中断

TR0=1;//启动定时器0

SCON=0X50;//设置为工作方式1

TH1=0XFD;//计数器初始值设置,注意波特率是9600的

TL1=0XFD;

ES=1;//打开接收中断

EA=1;//打开总中断

TR1=1;//打开计数器

}

//串口中断用于接收蓝牙信号

voidUsart()interrupt4{

switch(SBUF){

case0x40:

//前进

case0x41:

//后退

case0x42:

//左转

case0x43:

//右转

dat=SBUF;break;

case0x46:

if(s>1)s--;

LED=date[s];break;//减速

case0x45:

if(s<3)s++;

LED=date[s];break;//加速

default:

dat=0x00;

}

RI=0;//清除接收中断标志位

}

//定时器中断用于流水灯

voidTimer0()interrupt1{

TH0=0x3C;//设置初始值

TL0=0xB0;

Time++;

if((Time==(4-s))||(Time>3)){//满足条件时移动流水灯

WATER=_crol_(WATER,1);

Time=0;

}

}

//延时函数

voiddelay(unsignedchari){

unsignedchara,b;

for(;i>0;i--)

for(b=38;b>0;b--)

for(a=130;a>0;a--);

}

//前进函数

voidadvance(){

LEDL=LEDR=0;

if(hit==0)return;//防碰撞

IA1=IA2=1,IB1=IB2=0;

delay(s+1);

IA1=IA2=IB1=IB2=0;

delay(3-s);

}

//后退函数

voidback(){

unsignedchari,j;

for(i=0;i<2;i++){

for(j=0;j<6;j++){

IA1=IA2=0,IB1=IB2=1;

beep(s+1);

IA1=IA2=IB1=IB2=0;

beep(3-s);

}

LEDL=!

LEDL,LEDR=!

LEDR;//使前灯闪烁

}

}

//左转函数

voidleft(){

LEDL=0,LEDR=1;

IB1=IA2=1,IA1=IB2=0;

beep(s+1);

IA1=IA2=IB1=IB2=0;

beep(3-s);

}

//右转函数

voidright(){

LEDL=1,LEDR=0;

IA1=IB2=1,IB1=IA2=0;

beep(s+1);

IA1=IA2=IB1=IB2=0;

beep(3-s);

}

//蜂鸣函数

voidbeep(unsignedcharc){

unsignedchara,b;

for(c=c*10;c;c--){

Beep=!

Beep;

for(a=10;a;a--)

for(b=45;b;b--);

}

}

 

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2