南 阳 理 工 学 院
本科生毕业设计(论文)
学院(系):计算机与信息工程学院
专 业: 物联网工程
学 生: 乔蒙蒙
指导教师 : 周国运
完成日期 2019 年 5 月
南阳理工学院本科生毕业设计(论文)
基于单片机&GPS的导航系统设计
Design of Navigation System Based on Single-chip
Microcomputer & GPS
总 计:34页
表 格:4个
插 图:23幅
南 阳 理 工 学 院 本 科 毕 业 设 计(论文)
基于单片机&GPS的导航系统设计
Design of Navigation System Based on Single-chip
Microcomputer &GPS
学 院(系): 计算机与信息工程学院
专 业: 物联网工程
学 生 姓 名: 乔 蒙 蒙
学 号: 1506955060
指导教师(职称): 周国运(教授)
评 阅 教 师: 王海琳(讲师)
完 成 日 期: 2019年5月
南阳理工学院
Nanyang Institute of Technology
基于单片机&GPS的导航系统设计
物联网工程 乔蒙蒙
[摘 要] 该设计实现了基于单片机&GPS的定位及导航功能.。系统硬件方面主要由51单片机,GPS模块以及蓝牙模块组成;系统软件由单片机主控制器程序和手机APP定位导航程序组成:单片机主控制器使用c语言编程,使用keil uVision5编程工具,编写了GPS位置信息接收、解析以及传输的程序。手机APP定位导航使用易语言编程,使用E4A编程开发工具,编写了定位程序和导航程序。系统的主要原理是51单片机作为主控制器负责接收来自GPS模块的位置信息,进行解析,之后发送给蓝牙模块,最后编写手机程序负责接收位置信息并进入地图实现导航功能.。系统主要应用于车辆导航定位、户外探险定位以及其他领域。但是现实生活中的定位导航工具比这些精进很多,所以该设计需要做更深入地研究。
[摘 要] 51单片机;导航;GPS;蓝牙;手机程序
Design of Navigation System Based on Single-chip Microcomputer &GPS
Internet of Things Engineering Major Qiao mengmeng
Abstract:This design realizes the positioning and navigation function based on single chip microcomputer &GPS. The hardware of the system is mainly composed of 51 single chip microcomputer, GPS module and bluetooth module. The system software is composed of MCU main controller program and mobile phone APP positioning and navigation program: the MCU main controller USES c language programming and keil uVision5 programming tool to write the program for receiving, analyzing and transmitting GPS position information. Mobile phone APP positioning and navigation using easy language programming, using E4A programming development tools, wrote the positioning program and navigation program. The e main principle of the system is 51 single-chip microcomputer as the main controller is responsible for receiving position information from the GPS module, to analyze, and then sent to the bluetooth module, finally write a mobile phone program is responsible for receiving position information and entering the map to achieve navigation function. The system is mainly used in vehicle navigation and positioning, outdoor adventure positioning and other fields. However, real life location and navigation tools are much more sophisticated than these, so the design needs to be further studied.
Key words: 51 single-chip microcomputer; navigation; GPS; bluetooth; mobile phone program
目 录
1 绪论 1
1.1设计背景及研究现状 1
1.2设计内容 1
1.3设计意义 2
2 方案选择及总体设计 2
2.1 方案选择 2
2.1.1 主控制器方案选择 2
2.1.2 GPS模块方案选择 2
2.1.3 通信模块方案选择 3
2.2 系统功能总体设计 3
2.2.1 系统总体实现的功能 3
2.2.2 系统总体设计原理图 3
3 开发工具简介 4
3.1 单片机程序开发软件keil uVision5 4
3.2 手机程序开发软件易安卓 4
4 系统硬件设计 5
4.1 51单片机 5
4.2 GPS定位模块 7
4.3 蓝牙传输模块 9
5 系统软件设计 10
5.1 51单片机主控制程序流程 10
5.2 51单片机主控制器程序设计 11
5.2.1 GPS数据接收程序设计 11
5.2.2 串口配置程序设计 12
5.2.3数据传输控制程序设计 12
5.3 手机接收定位信息程序设计 14
5.4 手机导航程序设计 16
6 系统调试运行及测试 18
6.1 GPS模块定位测试 18
6.2 蓝牙传输模块测试 19
6.3 51单片机串口调试 21
6.4 手机APP接收GPS数据测试 22
6.5 定位信息解析 22
7 总结 25
参考文献 25
致谢 27
1 绪论
1.1设计背景及研究现状
20世纪50年代,考虑到自身经济利益以及军事效益,美国开始研究设计卫星导航系统,经过30多年的努力,终于建成了全球定位系统。1994年4月,24颗工作卫星发射完毕,导航系统进入全面运行阶段,主要应用于军事。此外,该系统还可以实现各种交通工具的导航定位,国家部队的调用,军事目标的定位等等,尤其是在沙漠风暴和对科索沃的轰炸这两场典型高技术战争中,由于其精确定位的优势应用于制作巡航导弹,从而打击敌军,甚至是地面士兵也会随身携带该装置,利于作战。总之,GPS应用领域本来挺广泛。
在国际公认的八项重大无线产业之中,卫星导航是非常具有代表性的。对于GPS定位技术的卫星导航应用,我国的发展速度较为迅速。北斗卫星导航系统的逐渐应用,就是一个非常有力的证明。随着无线通讯的发展,GPS技术更是以精度高,自动化,效率高,全天候,定位导航,精确测量等优势受到很多领域的欢迎,应用范围更广泛。
总的来说,无论是发展速度还是发展阶段,在国内GPS技术在国内还是有非常乐观的局势的。对于GPS技术的模型化,即GPS接收机的设计已经进入到了一个比较成熟的阶段,甚至可以与计算机的发展相比。尽管如此,由于GPS技术起步较晚,GPS还是存在一些问题的 。以前,在国内,GPS导航技术应用最广泛的是渔业,但随着时间的推移,GPS导航技术越来越多地应用在车辆定位上。值得欣慰的是,我国的无线通信工程技术的高速发展,对于位置信息的定位服务也将走上快速上升的坡道上并高速前进。单从北斗三号,我们就可以知道对于我国的导航系统建设来说一个非常大的进步。但我们仍需不断的努力,进一步研究GPS技术,从而解决GPS技术出现的问题,争取将导航系统建设做到极致并为全球的用户服务,将它的用途发挥到极致,适用范围更大。
1.2设计内容
本设计主要分为以下几个部分:第一部分,设计定位接收装置系统,由51单片机控制GPS模块以及蓝牙模块从而实现位置信息的接收。第二部分,接收GPS模块的位置信息并对GPS数据进行解析和处理,通过蓝牙模块建立51单片机和手机的通信,第三部分,编写手机APP程序,首先,有类似蓝牙串口APP的功能,用于接收单片机通过蓝牙发送的位置信息,最后,实现定位和导航的功能:即对接收到的位置信息的定位,定位之后的搜索路线和路线模拟场景以及实时场景的路线规划。
1.3设计意义
本次设计使用51单片机为主控制模块,对定位系统综合进行硬件部分的设计以及对其进一步地开发,以及使用E4A开发APP客户端。
GPS定位功能适用于许多领域,商业价值很高,但是从某种层面上来说,GPS定位系统还是有一些需要解决的问题比如(1)对于成本的提高,最有现实性的直接影响的就是,消费者们的购买意愿。(2)无线通信技术与GPS定位芯片相配套的技术文件的缺少(3)如何使卫星导航技术在国民经济建设社会发展中发挥更大的作用已经成为人们关注的问题。尽管如今GPS技术一直在不断地完善,但是对于以上产生的问题还是不容忽视的,要想使GPS继续的更加前进一步的发展,对于那些问题是急需解决的。因此,设计一个定位导航系统还是非常必要的。由于GPS应用范围广泛,潜在商业价值高,所以需要我们去对其更加的深入研究。
2 方案选择及总体设计
2.1 方案选择
2.1.1 主控制器方案选择
本次设计采用51单片机中的90系列的STC90C516RD+型号的单片机作为本次设计的主控制器,由其控制GPS全球定位模块的定位,对位置信息的解析以及蓝牙模块的位置信息的传输。
STC90C516RD+型号的单片机是功耗比较低,速度超高的90系列的单片机,相比89系列,版本的更新方面,生产工艺方面,安全性方面,稳定性方面等都有更好的优势。其内部有专门的复位电路,时钟频率等必备的电路设计。而且STC90C516RD+型号的单片机有一个串口(P3.0和P3.1)可以实现与串口外部设备相连接,并实现对串口外设的控制,并且可以通过串口调试助手看出来接收区的数据从而对硬件的程序进行进一步的修改以及完善。
2.1.2 GPS模块方案选择
本文研究定位导航的的功能,定位是及其重要的。定位不成功或者有差错,则会导致后续导航路线的严重错误,可见定位无法忽视,对定位的精度及其严格。不过需要注意的是,最好采用配有SMA天线的GPS模块。将天线置于窗户附近即可,很容易就可以搜索到定位的位置信息,如果使用陶瓷天线则定位效果不是很好。
本次设计采用NEO-6M模块作为定位模块接收位置信息,内配有3m天线与之连接搜索信号。NEO-6M模块具有很高性能的定位装置。他们结构紧密,适合电池驱动,但是有成本和空间方面上的限制。NEO-6M模块由于其专用采集引擎的量大,能够进行在最大范围的空间内进行特别精确的搜索,使其能够以最快速度找到卫星。不仅如此,该模块还能减少干扰,即使处在有挑战性的天气情况下,也能有很精确的定位功能。
2.1.3 通信模块方案选择
对于该设计来说,51单片机主控制器的SBUF接收了来自GPS定位模块的位置信息之后,对其进行解析(将原始数据解析成我们平时能一看就懂的位置信息或者说是高德地图可以直接使用的位置信息),那么之后的工作就是传输了,该设计的通信模块使用的是HC-05 蓝牙串口通信模块,它是一个最常用的通信模块,配置简单,并且容易上手。需要注意的是,使用之前要查询该型号的蓝牙模块的AT配置指令集并查询其名称,配对码,MAC地址,主从模式等重要信息,如果想修改则可以使用AT配置语句对其进行修改。该蓝牙模块配置的条件很简单,只要上电以及蓝牙模块的EN置于高电平即可。使用起来非常的灵活,方便,是个很好的通信传输模块的选择。
2.2 系统功能总体设计
2.2.1 系统总体实现的功能
(1)GPS模块实现定位功能;
(2)51单片机实现对各个模块的控制功能和位置信息的信息解析;
(3)易安卓APP实现位置信息(经纬度)显示功能;
(4)易安卓实现定位以及导航(路线规划)功能;
2.2.2 系统总体设计原理图
该定位导航系统的硬件设计:以51单片机为主控制器,控制GPS模块和蓝牙模块的硬件系统。对单片机编程,读取GPS模块的定位数据,并通过蓝牙通信模块把定位信息发送给手机APP,通过所编写的手机导航程序,在手机上规划行驶路线,并把接收的位置进行定位以及按照已搜索的路线进行导航。该设计的综合性的系统原理如图2-1所示:
3 开发工具简介
3.1 单片机程序开发软件keil uVision5
该设计使用keil uVision5,即集成开发单片机的编程工具。通常对于硬件的编程,也就是STC90C516RD+的编程都是使用C语言或者汇编语言的,只要有一点C语言基础,使用该程序开发软件便可以学习的很快,因为除了硬件本身以外的些许语句还是一样的。比起Keil 4,keil uVision5更加精进和丰富。它是一个KEIL公司开发的集成开发环境,一直在不断的更新和发展着。该软件有特别丰富的函数库,包括各种型号的单片机的初始化函数,而且,此软件具有很丰富的库文件。keil 5编译工具界面如图3-1所示.
图3-1 keil 5编译工具界面图
3.2 手机程序开发软件易安卓
易安卓也叫E4A,即易语言FOR安卓,可以说是专门为写安卓APP的一个类似易语言的轻松开发安卓应用APP的开发工具。因其语言是中文,使其复杂性降到了比较低的一个层面,就算没有易语言的扎实基础,只要学过计算机编程语言,短时间内胜任一个没有学过的陌生编程语言也是没有问题的。E4A的开发环境和易语言是一样的,不仅有各种核心的E4A类库,还有各种安卓手机开发方面的库。纯中文编写代码,对于里面自带的例程比起英文编程,E4A可能更容易看懂,核心原理方面所有编程都是很类似的,不过对于初次看见例程来说,E4A可能会方便很多,也会省下很多时间。虽说E4A还处于初级阶段,但是对于开发一个具有基本的常用功能安卓手机APP还是完全没有问题的。打开该开发软件,左侧是丰富的E4A类库,介绍有属性和方法等,可以随时查看自己编写安卓APP所需的类库的方法以及注释,不仅如此,还自带有E4A的各种级别的例程,没有接触过的开发能够快速学习从而快速编码开发安卓手机APP。易安卓开发界面如图3-2所示。
图3-2 易安卓开发界面图
4 系统硬件设计
4.1 51单片机
51单片机是所有可以兼容Intel 8031指令系统的单片机的统称。该系列的单片机在发展上有了很大的进展。51单片机不仅是基础入门,而且是应用最广泛的单片机。该设计的主控制器使用stc90c516rd+最小系统,包括CPU,存储器,并行和串行接口,定时器/计数器以及中断。单片机有40个引脚大致分为4类:电源,时钟,控制和四个并行IO口。
(1)单片机主芯片内部电路图如图4-1所示:
图4-1 单片机内部电路原理图
STC90C516RD+一共有四个并行I/O口,32个I/O端口。需要注意的是,P3口不仅仅做I/O口使用,还具有第二功能,比如P3.0为串口输入口,即串口通信中的RXD引脚,P3.1为串口输出口,即串口通信中的TXD引脚。
(2)供电&下载&串口模块通信电路如图4-2所示:
图4-2 供电&下载&串口模块通信电路图
(3)复位电路
阻容复位时,电容为10uF,电阻为10K,RESET脚内部没下拉电阻,必须用此10K电阻。复位电路图如图4-3所示:
图4-3 复位电路图
4.2 GPS定位模块
该定位模块使用U-BLOX NEO-6M,原理图如图4-4所示,模块如图4-5所示。
图4-4 NEO-6M原理图
图4-5 NEO-6M模块
主要参数:
1、模块采用U-BLOX NEO-6M,是GPSmini版,和GPS标准版功能没有大的差别,而且具有体积更小的优势。
2、模块添加放大电路,方便快速搜索卫星。
3、模块的参数可以修改设置,并可保存在EEPROM。
4、模块自带SMA接口,可以连接各种有源天线。
5、模块因其电源可为3.3V也可为5V而可适用于各种单片机。
6、模块配置可充电后备电池,可以保存因断开电源丢失的位置信息。
引脚说明如表4-1所示:
表4-1 GPS模块引脚说明表
其中,PPS引脚连接指示灯,该指示灯的输出状态以及输出特性是可以通过程序自行设置的。但是我们无须再重新去设置,使用默认的即可。PPS指示灯默认状态:有2个状态:(1) 常亮,证明该GPS模块可以正常工作(可用),但是不能证明该GPS模块已经实现了位置信息的定位。(2)闪烁,证明该GPS模块不仅仅可以正常的工作还可以对位置信息进行成功地定位。
所以,我们可以通过 PPS 指示灯亮的状态去判断,我们的定位工作进行到哪一个步骤或者说是是否可以正常工作。
NEO-6M与51单片机引脚的连接方法如表4-6所示:
表4-2 NEO-6M与51单片机引脚连接表
4.3 蓝牙传输模块
蓝牙HC-05如图4-6所示
图4-6 HC-05模块
蓝牙传输模块使用HC-05蓝牙模块,该模块是蓝牙串口通信模块,带 EDR 蓝牙协议的透传模块。该模块支持AT 指令,用户可根据自己需求更改角色(主、从模式)以及串口波特率、设备名称等必要参数,使用灵活。对于蓝牙模块的传输,使用的是透传。从蓝牙模块这功能特性方面来说,使用起来特别方便,因为开发者并不需要特别的了解蓝牙协议内部实现的具体过程。只需蓝牙模块正常工作便可以开发看叶无线传输产品。串口蓝牙模块具体的工作机制就是不需要对单片机传输的数据做任何处理,也不需要自己深入学习什么协议,适合初学者学习使用。
使用这个蓝牙模块之前,要先使用AT指令对其进行配置,比如名字,密码等,以及查询蓝牙Mac地址,设置主从模式。该设计需要提取单片机收到的位置信息,然后将其通过蓝牙模块发送给手机,具体来说,是发送给手机APP,需要注意的是,连接之前需要把设置里面的蓝牙打开,搜索到该蓝牙模块时候,输入PIN,即密码,将手机自带蓝牙(设置里面自行打开蓝牙)与蓝牙模块进行配对,此时,就可以用手机APP与蓝牙模块连接。因此,需要手机作为主机去主动连接蓝牙模块,所以将蓝牙模块设置成从模式从而实现主机(手机)对蓝牙模块进行的主动连接,这个模式同时也是默认的,如果经AT指令查询就是这个模式,则不用对其进行修改。否则,需要将主模式修改为从模式。
该设计需要51单片机通过蓝牙模块与安卓手机通信,模块与手机的联接通讯图如图4-7所示:
图4-7 单片机与蓝牙模块连接图
5 系统软件设计
5.1 51单片机主控制程序流程
首先,进行串口初始化配置,清空接收GPS数据的数组,方便接收位置的最新数据信息,判断原始数据(未解析的位置信息)是否获取成功,如果成功,则通过原始数据中的A或者V继续判断位置信息是否有效,如果是字符A,就代表该位置信息有效,如果是字符V,则代表该位置信息无效。接着,判断数据是否正确,如果正确,则进行解析数据,即对获取到的位置信息进行时间、维度以及经度等信息和换算GPS数据格式的解析。解析完成,往51单片机串口发送解析过的GPS数据,实现数据传输。主程序流程图如图5-1所示:
图5-1 主程序流程图
5.2 51单片机主控制器程序设计
5.2.1 GPS数据接收程序设计
数据的接收是采用中断的方式的,一旦有定位数据需要接收,查询RI的值,如果RI=1,则清除串行口中断接收中断,即软件设置RI=0(如果接收中断成功,硬件会自动将RI设置为1,那么我们需要通过软件编程清除掉中断标志)。接着,从SBUF缓存区读取GPS数据,将符合$GPRMC语句的数据流存储在idata寄存器中,结束本次定位,对存储的位置信息清空,方便接收更新的GPS定位数据。
下图是中断接收GPS数据的程序:
5.2.2 串口配置程序设计
51单片机与GPS模块,51单片机与蓝牙模块都是通过串口进行通信的。可见,串口通信对于单片机与外部设备通信是极其重要的。
在此之前,需要对串口进行初始化配置(初值以及波特率设置)。下面是串口初始化的配置程序:
5.2.3数据传输控制程序设计
对于蓝牙模块传输的过程,比较简单。进行数据传输过程之前,需要使用AT指令配置蓝牙模块,从而真正地实现蓝牙模块的透传功能,即单片机给蓝牙发送什么信息,那么蓝牙模块接收到信息之后,就会原封不动地将蓝牙模块接收到的信息发送给手机APP。单片机通过串口将解析过的位置信息发送给蓝牙模块。使用查询的方式发送数据,在查询发送之前,必须关闭串行口中断(ES=0),并且设置TI=1,如果TI为0,则查询TI,当TI为1时(前一次发送结束)才往下执行。另外,往51单片机串口发送的是解析过的数据,即将GPS模块接收到的经纬度格式换算成高德地图可以直接使用的经纬度格式。
数据传输流程图如图5-2所示:
图5-2 数据传输流程图
下面是51单片机往串口发送解析过的GPS数据的程序:
5.3 手机接收定位信息程序设计
手机APP要接收蓝牙模块传送过来的位置信息,在此之前,要先通过手机设置里自带的安卓蓝牙与配置好AT命令的HC-05蓝牙模块配对,并输入即配对密码。用代码取已配对设备即可,取配对设备的代码如下:
手机APP定位信息接收界面的代码如下:
将代码编译过后的APP界面的界面如图5-3所示:
图5-3 APP位置信息接收界面图
5.4 手机导航程序设计
手机APP接收位置信息之后,对当前所在位置的进行定位,对当前位置进行坐标查询地址,查询完毕之后,以当前位置作为出发地,代码设计中,将目的地默认为南阳火车站(可修改),接着,执行搜索路线的功能,从而开始执行模拟导航功能,并进行实时导航。从而实现完整的实现该系统的定位和导航功能。
手机APP导航程序设计代码如下:
编译过后的手机APP导航界面如图5-4所示:
图5-4 APP导航界面图
点击开始搜索路线,由起点到终点的路线规划会在高德地图中显示出来,效果图会如图5-5所示:
图5-5 路线规划效果图
点击开始驾车实时导航,会进入导航界面,该导航是按照之前搜索的路线开始进行导航的,地图导航界面效果图如图5-6所示:
图5-6地图导航界面图
6 系统调试运行及测试
6.1 GPS模块定位测试
GPS模块的引脚有五个,可以将GPS模块与USB-TTL工具相连接,在此之前,要记得给电脑安装相应的驱动,可以在电脑的设备管理器看到对应COM端口按照如下过程测试GPS定位情况:
(1)连线
表6-1 GPS模块与USB-TTL模块连接表
GPS模块 USB-TTL模块
VCC VCC
GND GND
TXD RXD
RXD TXD
PPS -
(2)测试
选择好端口号(和设备管理器里面一致),点击打开串口按钮,如果串口接收区的信息是无效的,把天线放置窗户旁边,有利于信号的接收。串口调试助手的接收区(GPS原始数据)效果图如图6-1所示:
图6-1 GPS数据接收图
将串口调试助手接收区收到的经纬度,经过坐标转换,输入GPS经纬度地图定位工具中的GPS坐标(转换过的),定位效果图如图6-2所示:
图6-2 定位效果图
6.2 蓝牙传输模块测试
对于蓝牙模块的测试,将蓝牙模块与USB-TTL工具相连,其中连接方式和GPS模块类似。这里需要注意的是,在蓝牙模块测试之前,使其进入AT指令模式,对其通过AT指令进行配置。AT配置指令如下:
表6-2 AT指令配置表
在通信之前要将手机设置里面的蓝牙打开,与刚刚配置好的蓝牙模块相配对,手机蓝牙与蓝牙模块配对图如图6-3所示:
图6-3 手机蓝牙与蓝牙模块配对图
从stc串口调试助手发字符串“123”给手机APP,效果图如图6-4所示:
图6-4 蓝牙模块与手机APP通信效果图
从手机APP发送字符串“哈哈哈”给stc串口调试助手,效果图如图6-5所示:
图6-5 手机APP与蓝牙模块通信效果图
从以上效果图可以看出,实现了蓝牙模块和手机APP的相互通信。
6.3 51单片机串口调试
该设计一个很重要的部分就是串口通信,我们可以电脑端控制发送什么,串口接收什么,将写好的串口通信程序通过stc-isp软件烧录到51单片机中,打开串口,将波特率设置为9600,最后,通过stc-isp中自带的串口助手数据接收区查看接收的数据是否与电脑端发送的字符串一致,如果一致,证明51单片机的串口完好,即该串口通信程序可用。如果不一致,从下面几个方面查看排查问题:(1)查看串口通信程序是否写错(2)检查晶振频率是否为11.0592MHz(3)查看波特率是否9600。
51单片机串口通信图如图6-6所示:
图6-6 51单片机串口通信图
6.4 手机APP接收GPS数据测试
手机自带蓝牙与蓝牙模块配对成功后,将手机蓝牙与蓝牙模块连接。对于蓝牙透传模块发送过来的解析过的位置信息,手机端编写的相应的程序来负责接收HC-05模块发送的数据,并对接收到的数据调用高德地图api接口,并设计了目的地和与定位地点所处的城市,从而更精确地搜索行驶路线。APP接收定位数据图如图6-7所示:
图6-7 APP接收定位数据图
6.5 定位信息解析
首先,要了解到GPS接收信息是遵循一个统一标准的协议的,即NMEA-0183 协议。目前已经成了GPS定位导航设备默认的统一的一个行业内的标准协议。 NMEA-0183协议传递GPS的位置信息是通过数据帧来进行传递的。
帧格式形如: a a c c c , d d d , d d d , … , d d d ∗ h h ( C R ) ( L F ) 1 、 “ aaccc,ddd,ddd,…,ddd*hh(CR)(LF) 1、“ aaccc,ddd,ddd,…,ddd∗hh(CR)(LF)1、“”:帧命令起始位
2、aaccc:地址域,前两位为识别符(aa),后三位为语句名(ccc)
3、ddd…ddd:数据
4、“”:校验和前缀(也可以作为语句数据结束的标志)
5、hh:检验和,中间所有字符ASCII码的检验和
6、(CR)(LF):帧结束,回车和换行符
了解到,数据帧一共有七种基本的语句格式,选择接收其中一种数据格式,再对其进行解析即可。
$GPRMC,055037.00,A,3258.29117,N,11232.54636,E,0.236,260419,A7A
$GPVTG,T,M,0.236,N,0.437,K,A24
$GPGGA,055037.00,3258.29117,N,11232.54636,E,1,06,2.49,125.2,M,-17.5,M,7A
$GPGSA,A,3,07,16,27,30,08,28,2.90,2.49,1.480F
$GPGSV,2,1,07,07,64,308,47,08,71,015,36,16,22,078,39,18,45,147,77
$GPGSV,2,2,07,27,37,041,40,28,08,285,39,30,30,315,464C
G P G L L , 3258.29117 , N , 11232.54636 , E , 055037.00 , A , A ∗ 6 C 比 如 GPGLL,3258.29117,N,11232.54636,E,055037.00,A,A*6C 比如 GPGLL,3258.29117,N,11232.54636,E,055037.00,A,A∗6C比如GPRMC,这个是比较常用的。 G P R M C 语 句 中 一 共 有 十 二 个 信 息 , 分 别 用 逗 号 隔 开 。 可 以 解 析 几 个 比 较 重 要 的 即 可 。 比 如 , U T C 时 间 , 定 位 状 态 , 经 度 , 纬 度 等 。 可 以 将 G P S 模 块 直 接 接 在 U S B − T T L 上 , 可 以 看 出 来 未 解 析 的 原 始 数 据 。 对 GPRMC语句中一共有十二个信息,分别用逗号隔开。可以解析几个比较重要的即可。比如,UTC时间,定位状态,经度,纬度等。可以将GPS模块直接接在USB-TTL上,可以看出来未解析的原始数据。对 GPRMC语句中一共有十二个信息,分别用逗号隔开。可以解析几个比较重要的即可。比如,UTC时间,定位状态,经度,纬度等。可以将GPS模块直接接在USB−TTL上,可以看出来未解析的原始数据。对GPRMC格式的数据进行解析:
$GPRMC,055037.00,A,3258.29117,N,11232.54636,E,0.236,260419,A7A
可以看得出来,经纬度的格式与我们平时看到的经纬度的格式是不一样的,需要进一步换算。我们需要将解析过而且转化过的经纬度信息将位置信息传给蓝牙模块。
红线里面的是北纬32度58.29117分,东经112度32.54636分,可以知道在地图中的经纬度的单位是度,所以将其换算成度,例如:
北纬32度58.29117分换算过程如下:
58.29117分=0.9715195度(58.29117/60),把之前的度加起来是32.9715195度。
东经112度32.54636分换算过程如下:
32.54636分=0.542439333度(32.54636/60),把之前的度加一起是112.54243933度。
所以对于GPS数据的解析不只是把时间,经度,维度等信息分别解析分离出来并保存,还需要将经纬度换算成我们日常生活中能够使用的经纬度才可以,即要将换算过的经纬度信息发送给蓝牙模块,然后进行传输,传给手机APP。
7 总结
本次毕业设计,我的课题是基于GPS&单片机的导航系统设计,刚开始知道自己的课题是这个题目的时候,说实话,对于一个对单片机只是有一点皮毛的我来说,根本不知道该从何处做起。大学期间虽说,学过单片机这门课,但是只是了解一些皮毛而已,要想完成一个小课设都是很艰难的,更别说是完成综合性这么强的毕业设计了。从一开始选题后,就一直在学习单片机,看的学习视频就是结合的学校实验室的普中的51单片机开发仪,整个过程学习结束对单片机有了很深的了解。在进行毕业设计的过程中主要出现了两个比较重要的问题:(1)在对单片机的串口通信进行调试的时候,结果发现串口助手接收区一直出现乱码现象。于是搜了很多的串口通信的例子,发现几乎都不能用,全都会出现乱码的现象。最后经过查阅博客,了解到串口通信对于单片机晶振的波特率要求特别严格,如果是12MHZ的晶振,使用4800的波特率可以使误差降到最低,如果使用9600的波特率,误差可以高到百分之八点多。但是如果使用11.0592MHZ的晶振并且串口的波特率为9600,误差可以达到0,也就是0误差。(2)对于STC90C516RD+单片机来说,只有一个串口,那就是P3.0和P3.1,那么如何连接两个串口外部设备呢?一开始想的方案是用STC15系列的单片机,这种系列的单片机有两个串口可以用,也就是说串口肯定是够用的,可是后来突然想到,这个设计,并不需要双向通信,即当GPS模块和单片机通信时,只需要GPS的发送引脚(TXD)和单片机的接收引脚(RXD)连接,单片机的发送引脚(TXD)和蓝牙模块的接收引脚(RXD)连接接口,这样一来,单片机串口不够的问题便可以解决了。之所以这么去想问题解决的方法是,是因为GPS模块和单片机不需要互相通信,单向通信就可以实现单片机接收GPS模块发送的位置信息了,而蓝牙模块和和单片机也不需要互相通信,单向通信就可以实现单片机发送数据给蓝牙模块了。
虽说整个过程有煎熬,但是也有开心,每每解决一个小问题,就觉得特别的开心。总的来说,对于这个课题的毕业设计,我从中真的是受到了很大的启发,尤其是出现问题之后的心态,不是放弃,而是对于解决问题的那种渴望。从不会到会,从不擅长到做出来,内心充满了成就感。而且,我们这次毕设,不仅仅有硬件还有软件。虽说有难度,但不得不说特别锻炼对于理论知识在现实实物中的实践与应用方面上的能力。
对于我们工科来说,最重要的不是理论的理解,而是对理论的实践。实践也是检验理论学习情况,对理论理解深度的的很重要的硬性条件。在实践中不断的成长,在问题中不断的进步,进而解决一个个出现的问题,最终完成设计。
参考文献
[1] 袁博. 梁怡林 STM32主控的GPS/GPRS移动终端定位跟踪系统[J], 2018.
[2] 周国运等. 单片机原理与接口技术(C语言版)[M]. 清华大学出版社, 2014.
[3] 霍玲玲.易语言入门与提高[M].国防工业出版社2012.
[4] 关东升,赵志荣 .Android开发案例驱动教程[M].机械工业出版社,2011.
[5] 袁东等.51单片机应用开发实战手册[M].电子工业出版社,2011.
[6] 谭浩强.c语言程序设计[M].北京:清华大学出版社,2011.
[7] 刘基余.GPS 卫星导航定位原理与方法(第二版)[M].北京:科学出版社有限责任公司, 2016.
[8] 谢扬,潘子豪.易安卓开发平台可视化界面在智能家居领域的应用[J].单片机与嵌入式系统应用.2015.
[9] 宋戈.51单片机应用开发范例大全[M].人民邮电出版社,2012.
[10] 徐爱钧.Keil C51 单片机高级语言应用编程技术[M].电子工业出版社,2015.
致谢
本次毕业设计,我要感谢我的毕业指导老师周老师和我的同组同学,特别是周老师。就这次毕业设计来说,老师和同学帮助了我很多。从起初的定毕业设计课题,到后来的带我们一组人借硬件设备,比如51单片机,GPS模块,以及蓝牙模块,再到最后的论文细心批阅,周老师一直在帮助我们。
在这次毕业设计的过程中,无论是硬件还是软件编程方面都出现了许许多多的问题。很多硬件和软件的问题,也是老师耐心帮助我们解决的。每每遇到一些自己和同学都无法解决的问题的时候,我们都会寻求周老师的帮助,周老师每次都会很认真地对于我们出现的问题进行一次次地解决。就算是一开始的开题报告,对于不合适的地方也是做了修改和批注,并退回来重新做了部分的删减和修改。对于硬件模块所需要的资料以及原理图,防止我们找的不全或者不对,会帮我们整理好并发给我们。对于一些比较简单的问题,同学也帮助了我很多。要是没有老师和同学的帮助,我可能不能按时地完成该设计。
再一次真心地感谢我的毕业设计指导老师和同学。