蓝牙小车作品展示.docx

上传人:b****3 文档编号:4094854 上传时间:2022-11-27 格式:DOCX 页数:19 大小:148.71KB
下载 相关 举报
蓝牙小车作品展示.docx_第1页
第1页 / 共19页
蓝牙小车作品展示.docx_第2页
第2页 / 共19页
蓝牙小车作品展示.docx_第3页
第3页 / 共19页
蓝牙小车作品展示.docx_第4页
第4页 / 共19页
蓝牙小车作品展示.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

蓝牙小车作品展示.docx

《蓝牙小车作品展示.docx》由会员分享,可在线阅读,更多相关《蓝牙小车作品展示.docx(19页珍藏版)》请在冰豆网上搜索。

蓝牙小车作品展示.docx

蓝牙小车作品展示

河南理工大学

电器开发部电子作品设计报告

题目:

手机控制的蓝牙小车

 

姓名:

学号:

专业班级:

指导人员:

所在学院:

电气学院

 

2015年4月24日

 

摘要

本设计是做成这样的一款蓝牙小车,灵感来自于《无线电》--一本偶然碰到的书,书中对车的制作勾起了我对童年的回忆。

我曾经玩过四驱赛车,也玩过遥控车,但还没有玩过通过手机便可控制的蓝牙小车,所以头脑发热从京东上买了一辆小遥控车决定自己改装一下。

当各种模块都做好之后,我先仔细研究了几天L298N电路原理,然后我下载了好几种手机蓝牙软件通过比较确定了一款好用的。

然后我对51单片机最小系统进行了简化,只留下了晶振电路,这样不仅不影响整体功能的实现,也减少了投入成本和工作量。

通过改装买来的遥控小车,将其遥控设备用手机蓝牙代替,将从360助手上下载的蓝牙小车软件作为上位机,将拥有hc06蓝牙模块的蓝牙小车作为下位机,将L298作为小车的电机驱动。

可以实现小车的前进、后退、左拐、右拐、刹车、重力感应、加速、减速等功能。

做完这件作品我的收获有很多,对单片机的一些知识有了更深一步的理解。

同时给了我一种畅想,我畅想着未来我们将会用手机控制我们所有的家用电器,不再需要那么多的遥控器了,我们的生活将会更便捷。

这也是我的梦想,用科技改变生活。

 

1概述..........................................................4

2系统总体方案及硬件设计........................................5

2.1L298N电机驱动模块........................................5

2.2HC06蓝牙模块说明.........................................5

2.3最小系统板说明............................................5

3课程设计体会...................................................6

附1:

源程序代码................................................7

附2:

系统原理图...............................................23

1概述

通过改装买来的遥控小车,将其遥控设备用手机蓝牙代替,将从360助手上下载的蓝牙小车软件作为上位机,将拥有hc06蓝牙模块的蓝牙小车作为下位机,将L298作为小车的电机驱动。

可以实现小车的前进、后退、左拐、右拐、刹车、重力感应、加速、减速等功能。

在我眼里没有完美的东西,只有更完美的东西,而快乐就在追求完美的路上。

小车能动后我发现从网上下载的程序有错误,导致小车的左拐右拐相反,并且前进后退都会拐弯,没有加速减速。

这样的作品我怎么能拿的出手?

刚好那时电开给我们培训中断,定时器等内容,再加上寒假我学了点C语言,便对程序进行了大刀阔斧的改革。

终于前进后退左拐右拐正常了,可加减速怎么办呢?

之前通过学长我稍微了解了pwm,随后我对pwm的原理深入了解了一下,我先通过借用延时函数模拟pwm让led灯渐亮渐灭随后我应用到直流电机上,结果,成功了!

当然对于目前的作品,我还是觉得不太完美,我准备再给他加上转向灯、喇叭甚至更多功能。

做完这件作品我的收获有很多,对单片机的一些知识有了更深一步的理解。

同时给了我一种畅想,我畅想着未来我们将会用手机控制我们所有的家用电器,不再需要那么多的遥控器了,我们的生活将会更便捷。

这也是我的梦想,用科技改变生活。

 

2系统总体方案及硬件设计

2.1L298N电机驱动模块

298n是直流电机驱动集成电路,内部包含4通道逻辑驱动电路,可以方便地驱动两个直流电机,或一个两相步进电机。

l298n可接受标准ttl逻辑电平信号vss,9脚vss可接4.5~7v的电压。

4脚vs接电源电压,vs电压范围vih为+2.5~46v[2]。

1脚和15管脚下的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。

l298可驱动2个电动机,此时out1,out2和out3,out4之间可分别接电动机。

5、7、10、12脚接输入控制电平,控制电机正反转;ena,enb脚接控制使能端,控制电机的停转[3]。

l298n采取输入输出并联的连接方式,即in1与in4(5脚和12脚)、in2与in3(7脚和10脚)、out1与out4(2脚和14脚)、out2与out3(3脚和13脚)分别连接在一起。

(电路图见附录2)

2.2HC06蓝牙模块说明

本作品使用的是hc06从机,设置其波特率为9600

2.3最小系统板说明

经过多次修改简化本作品只使用了晶振电路,这样不仅对作品的功能没有影响而且减少了成本与工作量。

(电路图见附录2)

3课程设计及体会

做成这样的一款蓝牙小车,灵感来自于《无线电》--一本偶然碰到的书,书中对车的制作勾起了我对童年的回忆。

我曾经玩过四驱赛车,也玩过遥控车,但还没有玩过通过手机便可控制的蓝牙小车,所以头脑发热从京东上买了一辆小遥控车决定自己改装一下。

买回来的当天我就把它拆了(一副很败家的样子)。

当时我对单片机知识还是零基础,对于串口、中断、定时器什么的都不懂,于是我就去问负责我的学长,我说:

“我要做这么个车,但我对单片机还什么都不懂,你说我可以吗?

”他说:

“赶紧做吧,做好的话就可以进实验室了。

”激情再一次被点燃,本来只想自己做个玩的,没想到做好还能进实验室,下定决心getit!

从图书馆借了基本单片机入门的书,便疯狂的搞起。

做完这件作品之后我的收获有很多,首先我对单片机的一些知识有了更深一步的理解。

同时给了我一种畅想,我畅想着未来我们将会用手机控制我们所有的家用电器,不再需要那么多的遥控器了,我们的生活将会更便捷。

这也是我的梦想,用科技改变生活。

成功的道路是被无数的失败铺就的。

当各种模块都做好之后,我迫不及待的将它们连接起来,连接蓝牙之后却发现小车没像预想的那样动起来。

我XX了蓝牙模块的连接方式后发现RXD与TXD应交叉连接,交换之后,还是不能动。

我又仔细研究了几天L298N电路原理,发现原来自己的电路驱动连接有错误,改过之后小车还是没反应,再次陷入绝望。

我又怀疑是不是手机软件的是我又换了好几个软件,都不行。

持续一个星期没有任何进展。

有一天我在单片机上的txd上加了一个上拉电阻,小车奇迹般的动了,我简直欣喜若狂,赶紧跑到实验室告诉丁柯学长,可到实验室怎么连蓝牙也连不上。

沮丧地又回到宿舍研究了一下午用万用表测量到底哪的问题,可什么也没发现。

我又一次绝望。

躺在床上想既然能动一次就一定能再动一次。

我要从头再来!

我把原来的最小系统板扔掉,重新再焊一个,这次我把复位电路甩掉,只留下晶振电路,重新连接,这一次没再让我失望蓝牙连接非常顺利。

在我眼里没有完美的东西,只有更完美的东西,而快乐就在追求完美的路上。

小车能动后我发现从网上下载的程序有错误,导致小车的左拐右拐相反,并且前进后退都会拐弯,没有加速减速。

这样的作品我怎么能拿的出手?

刚好那时电开给我们培训中断,定时器等内容,再加上寒假我学了点C语言,便对程序进行了大刀阔斧的改革。

终于前进后退左拐右拐正常了,可加减速怎么办呢?

之前通过学长我稍微了解了pwm,随后我对pwm的原理深入了解了一下,我先通过借用延时函数模拟pwm让led灯渐亮渐灭随后我应用到直流电机上,结果,成功了!

当然对于目前的作品,我还是觉得不太完美,我准备再给他加上转向灯、喇叭甚至更多功能。

附1源程序代码

/***************************************************************************

******作品名称:

蓝牙小车****************************************************

*******作者:

*****************************************

*******功能:

实现通过手机蓝牙控制小车***************************************

****************************************************************************/

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharBuffer[10]={1};//从串口接收的数据

uinti,j;

sbiten1=P2^4;/*L298的EnableA*/

sbiten2=P2^5;/*L298的EnableB*/

sbits1=P2^0;/*L298的Input1*/

sbits2=P2^1;/*L298的Input2*/

sbits3=P2^2;/*L298的Input3*/

sbits4=P2^3;/*L298的Input4*/

uchart=0;/*中断计数器*/

ucharm1=0;/*电机1速度值*/

ucharm2=0;/*电机2速度值*/

uchartmp1,tmp2;/*电机当前速度值*/

/***********************************************函数功能:

微秒级精确延时

*参数范围:

1us~65535us(0.001ms~65.535ms)

*运行环境:

STC12@32.000MHz

*最大误差:

0.00%

*作者日期:

电器开发部-(2015-2-23)

**********************************************/

#pragmaoptimize(4,SPEED)

voiddelay_us(unsignedintn)

{

externvoid_nop_(void);

registerunsignedchari=n,j=(n>>8);

_nop_();_nop_();_nop_();

if((--i)|j)

{

do

{

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

if(0xFF==(i--))j--;else{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();};

}while(i|j);

}

}

/*毫秒延时函数*/

voiddelay_ms(unsignedintn){while(n--)delay_us(1000);}

/********************************************************************

*名称:

Init()//系统初始化

*功能:

初始化,晶振11.0592,波特率9600,使串口中断,同时定时器0控制PWM?

*输入:

*输出:

***********************************************************************/

voidInit()

{

TMOD=0x22;//T/c方式寄存器

PCON=0x00;//电源控制寄存器

SCON=0x50;//UART串口控制寄存器,此处为10位异步收发

TH0=0x9b;//高八位

TL0=0x9b;//低八位

TH1=0xFd;//设置波特率9600

TL1=0xFd;//T/c1计数寄存器低八位

TR1=1;/*启动定时器1

ET0=1;/*ET0时定时计数器0溢出中断允许控制位

ET1时定时计数器1溢出中断允许控制位*/

TR0=1;

ES=1;//开串口中断

EA=1;//开总中断

}

voidmotorL(charspeed)

{

m1=abs(speed);//取速度的绝对值(返回数字的绝对值)

if(speed>0)

{

s1=0;

s2=1;

}

elseif(speed==0)

{

s1=1;

s2=1;

}

else

{

s1=1;

s2=0;

}

}

voidmotorR(charspeed)

{

m2=abs(speed);/*电机2的速度控制*/

if(speed>0)

{

s3=0;

s4=1;

}

elseif(speed==0)

{

s3=1;

s4=1;

}

else

{

s3=1;

s4=0;

}

}

 

voidGO(void)

{

motorL(50);

motorR(0);

}

voidBACK()

{

motorL(-20);

motorR(0);

}

voidTR(void)

{

motorL(20);

motorR(-20);

}

voidTL(void)

{

motorL(-20);

motorR(20);

}

voidSTOP(void)

{

s1=1;

s2=1;

s3=1;

s4=1;

}

 

voidSPEED1(void)//通过不同的速度,实现加减速

{

s2=1;s3=1;s4=1;

s1=0;delay_us

(1);

s1=1;delay_us(10000);

}

voidSPEED2(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(100);

s1=1;delay_us(1000);

}

voidSPEED3(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(200);

s1=1;delay_us(1000);

}

voidSPEED4(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(300);

s1=1;delay_us(100);

}

voidSPEED5(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(400);

s1=1;delay_us(100);

}

voidSPEED6(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(500);

s1=1;delay_us(100);

}

voidSPEED7(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(600);

s1=1;delay_us(100);

}

voidSPEED8(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(700);

s1=1;delay_us(100);

}

voidSPEED9(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(800);

s1=1;delay_us(100);

}

voidSPEED10(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(900);

s1=1;delay_us(100);

}

voidSPEED11(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(1000);

s1=1;delay_us(100);

}

voidSPEED12(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(1100);

s1=1;delay_us(100);

}

voidSPEED13(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(1200);

s1=1;delay_us(100);

}

voidSPEED14(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(1300);

s1=1;delay_us(100);

}

voidSPEED15(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(1400);

s1=1;delay_us(100);

}

voidSPEED16(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(1500);

s1=1;delay_us(100);

}

voidSPEED17(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(1600);

s1=1;delay_us(100);

}

voidSPEED18(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(1700);

s1=1;delay_us(100);

}

voidSPEED19(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(1900);

s1=1;delay_us(100);

}

voidSPEED20(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(2000);

s1=1;delay_us(100);

}

voidSPEED21(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(2100);

s1=1;delay_us(100);

}

voidSPEED22(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(2200);

s1=1;delay_us(100);

}

voidSPEED23(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(2300);

s1=1;delay_us(100);

}

voidSPEED24(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(2400);

s1=1;delay_us(100);

}

voidSPEED25(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(2500);

s1=1;delay_us(100);

}

voidSPEED26(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(2600);

s1=1;delay_us(100);

}

voidSPEED27(void)

{

s2=1;s3=1;s4=1;

s1=0;delay_us(2700);

s1=1;delay_us(100);

}

 

voidmain(void)

{

delay_ms(100);

Init();//初始化

while

(1)

{

switch(Buffer[0])

{

case1:

STOP();break;

case4:

GO();break;

case5:

TL();break;

case7:

BACK();break;

case6:

TR();break;

case0x7D:

SPEED1();break;

case0x82:

SPEED2();break;

case0x87:

SPEED3();break;

case0x8C:

SPEED4();break;

case0x91:

SPEED5();break;

case0x96:

SPEED6();break;

case0x9B:

SPEED7();break;

case0xA0:

SPEED8();break;

case0xA5:

SPEED9();break;

case0xAA:

SPEED10();break;

case0xAF:

SPEED11();break;

case0xB4:

SPEED12();break;

case0xB9:

SPEED13();break;

case0xBE:

SPEED14();break;

case0xC3:

SPEED15();break;

case0xC8:

SPEED16();break;

case0xCD:

SPEED17();break;

case0xD2:

SPEED18();break;

case0xD7:

SPEED19();break;

case0xDC:

SPEED20();break;

case0xE1:

SPEED21();break;

case0xE6:

SPEED22();break;

case0xEB:

SPEED23();break;

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

当前位置:首页 > 小学教育 > 小学作文

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

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