《【精编】基于51单片机的蓝牙遥控小车.pdf》由会员分享,可在线阅读,更多相关《【精编】基于51单片机的蓝牙遥控小车.pdf(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于 51 单片机的蓝牙遥控小车作者:日期:单片机大作业“基于单片机的蓝牙遥控小车”姓名:班级:通信工程卓越214-1 学号:在班编号:基于单片机的蓝牙遥控小车目录第一章绪论1?1.1 研究背景和意义.第二章系统框架及软硬件结构设计.22.1 系统要求 2?2.系统整体算法流程 2?2.3 总体任务设计.32.4 整体硬件结构设计.42.整体软件结构设计 4?第三章模块的详细设计 .错误!未定义书签。3.1 93D 电机驱动模块.53.1模块介绍?.12 PW脉冲控制原理?31.3 脉冲控制代码 6?3.2HC5 蓝牙模块 .73.1 模块简介?32.蓝牙串口程序说明 .83.23 模块引脚说
2、明 8?3 USB 转 TTL 模块9?第四章 系统功能设计与实现 .114.1 安卓手机蓝牙遥控的设计与实现.14.1 设计基本思路 11?4.12 遥控任务分配 1?423 蓝牙遥控操作流程 .错误!未定义书签。第五章软硬件调试 14?1 硬件调试.15.2 软件调试?4第一章绪论1.1 研究背景和意义智能化无处不在。各种智能化设备在不同的领域中发挥着自己的特长,而在家用方面的智能有着相当重要的意义。本次所设计的智能小车系统包含着对周围环境的检测、舵机控制以及短距离无线遥控等的功能,它需要实现微控制器、多传感器技术、蓝牙遥控、机械结构原理、数字逻辑、自动控制等各学科技术内容的渗透融合。智能
3、小车通过其上部搭载的 C52芯片作为核心控制器,通过多种传感器来获取周围环境信息并将采集到的信息输送给 U,然后由 PU来给各个部分下达相对应的指令。智能小车不仅价格低廉,而且甚至能够担任人类难以从事的任务,它在工业、农业以及社会生产生活等许多领域都起到了重要作用。本次课题设计中所采用到的短距离无线遥控、单片机控制原理、多传感器技术、自动避障技术等等。现在在工业制造、农业生产、国家安全、军事武器,医疗保健、太空探测等许多领域都日益发挥着其作用,在军事侦察、反恐、防暴、防核化等高危任务方面、环境污染检测方面和在恶劣环境中均有着非常好的发展前景,从这些方面可知本课题研究意义非凡。第二章 系统框架及
4、软硬件结构设计21 系统要求在综合考量了单片机的使用性能、成本和时间等问题,本次课题主要旨在实现以下性能指标:1)根据力学结构完成小车整体框架的搭建,稳固其整体重心;2)完成底层运动系统的搭建,保证小车能够正常行进;3)完成小车自主避障功能,能够在简单地形避开障碍物;4)完成小车的简单路径规划;5)完成手机遥控功能,通过手机控制底层小车的工作方式。整体小车车身采用深圳欧鹏公司设计生产的金属框架,通过自己的设计和搭建,完成底层硬件系统的搭载,再通过上层安卓手机AP遥控,通过无线蓝牙通信协议,实现小车能够遵从指令实现在室内的自主避障的巡航功能与手机遥控功能,整体电路图如图所示图 2-1 系统整体电
5、路设计2.2系统整体算法流程整个系统的算法结构具体流程如图2-1 所示。图 2-系统整体算法流程图2.3总体任务设计小车总体任务分配如下图22 所示。按键前进按键 2 后退按键左转按键 4 右转按键 5 第一档按键第二档按键第三档按键停止蓝牙遥控按键任务选择 C89C52 图 2-3 小车任务分配24 整体硬件结构设计智能小车系统整体硬件结构以89C51 单片机为中心主要分为以下几个部分:1)运动结构,即舵机模块是整个系统的基础,通过对舵机性能参数的测定对舵机进行标定、控速;2)供电结构,采用分压式供电。由于各,模块对电压的要求不同,所以需要通过分压以适应不同模块对电压的需求。其中舵机需要8电
6、压的供应,而单片机、传感器、蓝牙等模块则需要较低一点的电压供电;3)无线通信结构,通过对蓝牙模块与单片机通信电路的设计与单片机串口功能的调试,做到小车与手机的无线通信。小车实物图如下图23 所示。图 2-4 小车实物图2.5整体软件结构设计当启动电源系统初始化完成后,小车进入等待的任务模式,等待上层安卓终端手机的PP 客户端发送任务指令。小车接收到上层手机发送的小车行进方向的指令后相对应的前进(forwa )、后退(ackward)、左转(lef)、右转(igt)、停止(stop)等。第三章 模块的详细设计.1 L293 电机驱动模块3.11 模块介绍 3采用 16 引脚 DIP 封装,其内部
7、集成了双极型-桥电路,所有的开量都做成 n 型。这种双极型脉冲调宽方式具有很多优点,如电流连续;电机可四角限运行;电机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区:低速平稳性好等。L293D 通过内部逻辑生成使能信号。-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(WM)。另外,L293将 2个 H-桥电路集成到 1 片芯片上,这就意味着用 1 片芯片可以同时控制 2 个电机。每个电机需要3 个控制信号 EN12、IN1、IN,其中 E12 是使能信号,IN1、I2 为电机转动方向控制信号,N1、I2 分别为 1,0 时,电机正转,反之,电机反转。选用一
8、路PW连接 N12 引脚,通过调整 PWM 的占空比可以调整电机的转速。选择一路口,经反向器 7HC14 分别接 IN1 和 I2 引脚,控制电机的正反转。实物图如下图3-所示。图 3-1模块实物图31.2 PM 脉冲控制原理所谓 PM 就是脉宽调制器,通过调制器给电机提供一个具有一定频率的脉冲宽度可调的脉冲电。脉冲宽度越大即占空比越大,提供给电机的平均电压越大,电机转速就高。反之脉冲宽度越小,则占空比越越小。提供给电机的平均电压越小,电机转速就低。PWM 不管是高电平还是低电平时电机都是转动的,电机的转速取决于平均电压。3.1.3 脉冲控制代码?oid T_ti()in err1/定时器 1
9、 中断程序?Mnt1+;?P Cnt2+;i(PWMCn=200)?PWMCnt 1;?f(WMCn1=c PM1)?/230?PW1=1;lse?WM1=;?if(P Cnt=20)PMCnt2 1;?f(PWMCn=cn WM2)?/230?PM=;?else?PWM=0;?TH0=(6553-)256;T0=(65 360)%256;3.2 HC 5 蓝牙模块3.2.1 模块简介HC-05 蓝牙无线通信模块有两种工作方式,一个是命令响应工作模式,另一个是自动连接工作模式。在命令响应工作模式下,使用者通过向模块发送AT 工作指令来对模块的控制参数进行设定和下达控制指令。而在自动连接工作模式
10、下,模块又有三种工作模式,分别为主机(astr)、从机(Save)和回环(L opck)三种工作模式,选定工作模式后,模块就自动按照提前设定好的方式进行数据传输。通过调节模块外部引脚的输入电平来动态转换模块的工作状态。模块实物图如图-5 所示。图 3-HC5 实物图3.2.2 蓝牙串口程序说明 id usa receive(void)in rrpt 4/串口中断程序if(RI=)/收到字符 RI 0;/软件清零bletooth a=SBUF;/读取数据f(T=1)/发送数据TI;/清零 3.23 模块引脚说明模块引脚说明及电路原理图如下图3-6、37 所示。图 3-3 模块引脚说明图-HC0原
11、理图33 USB 转 TTL 模块本次课题需要通过使用串口调试软件使得上位机与底层小车进行通信达到调试小车的目的,但是目前笔记本电脑因为空间的限制和其他方面考虑的原因都没有串口,所以需要使用到这一个UB 转串口模块。模块与单片机需要按下图3-8 所示相连接。图 3-5 USB转 T L模块与单片机的连接示意图图 3-6 U转 TL串口模块实物图。HC05 单片第四章系统功能设计与实现4.1 安卓手机蓝牙遥控的设计与实现4.11设计基本思路遥控功能的实现基于蓝牙通信协议的建立,需要从依次实现以下几个步骤:1)检测 HC5 蓝牙模块是否能够正常工作,将蓝牙模块按要求接上5或 3 v 电压,等待一段
12、时间后,使用安卓终端搜索,查看蓝牙模块是否能够被搜索并与其相连接;2)单片机串口能否正常通信,编写好串口通信程序并将其烧录字单片机中,将单片机通过开发板与电脑串口连接,打开电脑端串口调试工具查看是否能够正常通信;3)查看蓝牙模块是否能够正常发送和接收数据,将蓝牙模块通过USB 转 T模块与电脑 B口相连,打开电脑串口调试助手。安装好手机PP,与蓝牙模块连接好后,使用手机端 APP查看是否能够正常发送和接收数据;4)将蓝牙模块的串口与智能小车上的单片机串口相连,并编写好遥控选择功能代码,使用手机发送数据,查看智能小车能否执行相应的的指令。下图为电脑端的串口调试助手。图 4-串口调试工具4.1.2
13、 遥控任务分配通过无线蓝牙通信的实现,上层安卓终端主要可以实现以下小车的行进方向,进入的工作模式等,具体功能如下表所示。表蓝牙遥控按键及选择功能表按键B S 1 2 3 功能前进后退停止左转右转第一档第二档第三档23 蓝牙遥控操作流程蓝牙遥控操作流程示意图如下。图-蓝牙遥控流程图首先将智能小车正常上电工作,待小车初始化完成后,打开安卓终端的AP进行连接,连接成功后即可选择功能。可按 oid 键进入自主避障模式,如需进入遥控模式则仅需按bac键返回上一层。图 4-4蓝牙模块连接示意图图 4-5 安卓终端AP界面第五章 软硬件调试5.1 硬件调试硬件调试采用从整体到部分的考量方法。1)智能小车整体
14、框架的搭建,确保各模块能够搭载在其上面而相互没有影响;2)完成整体电源电路、工作电路的设计,保证各模块之间供电正常使用和与单片机之间的合理连接;3)烧录测试程序,保证单片机能够正常进行烧录和擦除程序,同时还需要测试其串口功能,实现单片机与手机之间的正常通信;4)小车底层运动系统的完成,测试舵机的基本性能,保证其能正常工作;5)对 C0蓝牙模块进行基本性能测试,保证其在正常工作电压下能够正常工作。再通过上位机的测试,确保其能够正常的收发数据。.软件调试1)通过编写代码实现对底层小车的驱动,包括舵机参数的测定,电机的标定,对电机进行速度调控,实现小车的方向控制;2)避障算法的设计,通过考量个传感器
15、将出现的种情况(000、001、10、011、00、101、110、111),考虑每一种情况出现时的应对方式,设计出较为合理的避障算法,并将传感器采集的数据与舵机控制结合起来,实现智能小车的避障功能;3)蓝牙模块与单片机、上位机、上层安卓终端的正常通信。先使用上位机端的串口调试工具测试蓝牙模块是否能够正常与上位机之间进行正常通信,然后编写串口调试代码烧录至单片机,使用手机发送数据确保单片机能够接收指令并命令小车作出相应反应;4)选择功能算法设计,设计出简洁合理的算法,使得小车在初始化完成后操作者使用PP能够选择相应功能,进入自主避障模式或者是手机的蓝牙遥控模式;5)将舵机驱动代码、小车避障算法
16、和选择功能算法有机结合起来,使得小车的功能完善,各个模块能够独立工作完成各自任务,并且有效率的执行小车的工作。代码#includ bi M1=P0;/PWM 波产生的端口si P 2=P 1;sbt otor cotrol_1 P7;左轮控制bit motor_con rol_2 P26;/bt mo r_cn ol_3=P 5;i or_con ol_4 24;/unigned inPWCt1=;un ned it ntPW=60;unignd nt P MCnt2=0;unsigned nt cnt WM2=6;nignd char bluetooth aa;void itial myse
17、lf();id iti l_interrup();o sart_ser e(v d);vod delay_long(unsigned inttim);v id o_forwa d(vi);/void sto();vturn rght();oid turn_ et();void back();void ai()i tial_myself();elay_log(100);initi linterr pt();sto();whil(1)u rt_ er ce();voiduart_ervic()wi c(buetoot a)?case :go_ rar();?ela_lo(10);SBUF=f;/返
18、回数据到手机?blueoothd a=a;?b ak;?ae :s p();?delay_long(00);?SBUF=s;?buetoothdata=a;?reak;cae r:urn right();?deay_l ng(100);?SBUF=r;?l etoohdata=a;?brak;?c e:urn let();dlay_ong(0);?UF l;?blet thaa=a;?r k;?cab:back();?dea_long(100);SBU=b;?bluet thdata=a;?break;c e 1:nPW1 60;?c WM2=6;?ely_lo(100);SBUF=1;?bl
19、 toohdt=a;be;?ca2:PM1=100;?ntPWM2=1 0;?delay_long(100);SB=2;?bluet thdata=a;?br k;?c:c PWM1=40;?tPW2=140;?lay_lng(100);?BUF=3;?blutoo d a ;?beak;void ar eeive(v d)i errupt4 /串口中断程序 i(RI=1)/收到字符 I=0;/软件清零blueotda=UF;/读取数据if(TI=)发送数据 TI=0;/清零 voidT0tie()i erut /定时器 1 中断程序WCn1+;?PWMCnt2+;f(PWMC t1=200)
20、?PWMnt=;?f(PWMCt1 tPM)/0?PWM1=1;?else?PW1=0;?(PMn200)?PMCnt2;?(PW nt1 cnPM2)?20?PW2=;?e?PWM=;?TH0=(36 50)/56;TL=(6553-50)%256;oid nitia mysel()TMOD 0 x1;/TH(553 50)/25;/定时 50 微秒L=(6536-0)%256;/?CON=0 x50;TMOD=0 x21;T1=L1=xd;设置波特率9600 IP 0 x10;/设置串口中断为高优先级 v i nitial_in er upt()A=1;/开总中断ES=1;/开串口中断ET
21、0=1;/开定时器0 中断?R0 1;/开定时器0 R 1;/开定时器 1 void elay_long(usined inttie)signd int ;un gnd int j;fr(=0;i tie;i+)?or(j=0;j=0;i-)?if()?mo or_c trl_ ;?otr_co ro_2=;?mo r_conrl_3=;?otor_control_4 1;?lse?mot r_cntrol 1=0;?otor control 2=0;?m tr_otrl_3=;?motor c l_4=;?void turn_right()in i=5000;?or(;i=;i-)?if()?motor cotro_1=0;?moo_contol_2=;?motor_contr=0;?moor_o trl4=0;?else?o r_ontr _=0;?m or_cntrol_2=0;?oto_conto_3=;?otor_co rol_4=0;?v id bck()motor_control=1;oto_conto_2=0;motor_ ntr l_3=1;m o_contr l_=0;