产品选型

51 单片机 gps 单片机创意小制作,GPS记录器DIY

小编 2024-10-06 产品选型 23 0

单片机创意小制作,GPS记录器DIY

全球定位系统,小名GPS,大家一定不陌生,对于我们来说,它只有一个功能——定位,说白了,就是它能告诉我们现在所处的经纬度。

虽然功能简单,可由此衍生出来的应用可就不少了,比如车载导航仪,不光能告诉我们现在在哪,还能告诉我们怎么去想去的地方;又如某个车队要了解车辆的位置,那就给每个车子装个GPS和无线收发设备,实时了解车辆信息。

图12.1 GPS 记录器的显示界面

除此之外,还有些另类的应用:比如 GPS授时,所谓授时,就是告诉我们现在几点钟了。虽然这有点大材小用的意思,不过这时间是相当准确的,可以精确到毫秒级,可以作为许多应用的标准时钟。再有就是今天我们要DIY的这个“GPS 记录器”(见图12.1)了,简单来说,就是把我们所经过的位置记录下来的装置。有人要问了,这有什么用呢?假如有驴友旅行过程中发现一段非常漂亮的路径,路上湖光山色,风景秀丽,他就可以利用这个装置将路径记录下来和朋友们分享;假如探险家外出探险,也可以利用这个装置将路径记录下来,探险结束后按原路安全返回。这,就是路径回溯功能。

接下来让我们了解一下必备的基础知识。

GPS原理简介

GPS应用已经非常普及,现在很多手机都集成了GPS导航的功能,但是光有导航仪或者是GPS接收器是不行的,它还得有天上挂着的24颗卫星作为信号的来源。这24颗卫星就像草莓外面的籽一样均匀地分布在地球上空,基本上在全球任意地方都能接收到GPS卫星的信号。接收器根据卫星发送的含有报文的信号来计算处于哪个位置。除此之外,我们不能将卫星发射上去之后就不管了,所以,地球上还有地面中心对这些卫星进行监控和数据修正。所以,完整的GPS系统包括 GPS卫星、用户接收端、地面监控中心。

图12.2 解析流程

GPS 接收端与通信协议

上面讲的GPS系统包含3部分,但是我们平时能接触到的只有接收端。别看现在市面上各种牌子的导航仪和接收器数不胜数,但上面用的GPS接收处理的芯片,全球就只有几家公司有能力设计。其中,SiRF的芯片占据了民用市场七八成的份额,而目前用的比较多的是2004年发布的SiRFstar III,也就是所谓的“第3代”芯片。

接下来就是让其他产品能“听懂”从GPS芯片发出的数据是什么意思了,这时就需要有个通信协议。目前大部分GPS模块采用的是NMEA0138协议。这个协议涵盖了许多方面,GPS只是用到其中的一部分。

NMEA 协议简介

NMEA 是由美国全国海洋电子协会(The National Marine Electronics Association)制定的一套通信协议,是目前GPS最常见的通信协议。

以笔者的这个GPS 模块为例,它将接收到的GPS卫星信号解码之后,通过串口以NMEA格式输出,而用到的语句只有4个:$GPGGA、$GPGSA、$GPGSV、$GPRMC,其中美元符号($)代表前缀,表示语句开始;GP 代表对象,代表用在 GPS 上;后面的GGA、GSA、GSV、RMC等是语句类型;每条语句的各个数据字段用半角逗号(,)分开;结尾为*XX,XX 是整个语句的校验和,以检验收到的语句是否正确,代表回车和换行,表示该条语句结束。

我们所要做的就是将其接收下来,解析出我们要的数据,再进行下一步的应用。

数据解析和保存

有了从模块那里收到的数据,接下来就是解析出里面有用的数据了。图12.2所示为简单的解析流程。

由于使用的是单片机,所以最简单的保存数据的方案便是使用SPI接口的Flash。另外由于NMEA语句是为了便于传输,采用字符形式,所以“身材”比较大,基本上每次的数据量在300~500字节,由于Flash容量限制,不能将原始的NMEA 语句直接保存,所以我们自己定义了一个存储格式,将其中有用的数据摘出来以二进制的格式保存,这样每次的数据顺利地缩小了。在实际应用中,每个点的数据只需要32字节。

如何浏览路径

说到这里,就必须请出神器——Google Earth了。这是谷歌出的一款可以看卫星图的软件,可惜的是目前的6.0 版还不能直接支持 NMEA 协议。不过 Google Earth 支持另外一种语言,那就是KML。其全称是Keyhole Markup Language,基于XML,同样,它包含了很多复杂和高级的内容,在此不再赘述,我们只需要用到其中一部分——在Google Earth 中画路径。

下面是一个最简单的KML示例:

Path from GPS Logger V2

Path Name

这个KML文件被Google Earth读取后会生成:

简单来说,它告诉Google Earth,生成一个文档,名字为Path from GPS Logger V2,其中有一个路径,名字叫Path Name,路径的是“连线”的模式,颜色为黄色(ff00ffff),线宽5像素,而具体经纬度信息则包含在标签中,继而Google Earth会根据其中的经纬度信息绘制出一条折线。

所以,只要将之前保存的每个点的数据,依次填充到标签中,则生成的KML被Google Earth读取之后显示的就是我们记录的路径。

至此,我们自制记录器所需要了解的背景都全部知道了,接下来便是制作的过程了。

主要功能目标

直接显示当前日期和时间、经纬度、海拔、速度、方向等信息,显示卫星信号强度、卫星数目、分布情况等。

将位置信息记录到存储器中,并显示当前空间使用情况。板载的Flash可用保存50994个记录点,按每秒一次计,可连续记录14小时。当空间满了之后,可以将数据转存至TF卡之后重新记录。可实时浏览存储器中的数据,也可将存储器中的记录导出,或者转换成 Google Earth可以识别的KML格式。

图12.3 GPS 记录器的模块框图

GPS 记录器的设计

GPS记录器的模块框图如图12.3所示。数据通信方面,GPS模块通过串口与MCU通信,TF卡和SPI Flash则分别挂载在两个硬件SPI上,LCD通过并行方式与MCU连接。供电方面,采用锂电池(自带过充过放保护电路)供电,由于GPS内置了LDO(低压差线性稳压器),所以直接与电池连接;另外一路则经3.3V LDO输出给MCU、LCD、Flash和TF卡供电;同时,用STM32自带的ADC模数转换测出锂电池的电压,以此估算剩余电池电量。图12.4为根据框图设计出的PCB原理图。

图12.4 GPS 记录器的PCB 原理图

绘制 PCB

根据液晶显示屏的尺寸,确定了主控板的大小。元器件不多,所以PCB尺寸只有显示屏的1/2左右。制作完成的PCB图与实物如图12.5所示。

表12.1 制作所需原材料和元器件

图12.5 制作完成的PCB图与实物

图12.6 焊接完元器件的PCB

图12.7 GPS 模块通过支架来安装,电池也加以更换

焊接元器件和PCB调试

笔者的习惯是焊接完一部分立刻检测该部分是否能正常工作,这样可以尽早发现问题并快速判断出问题源。

在焊接之前,目测一下板子是否有断路或短路的情况,然后用万用表测量电源正负极之间是否短路。

首先焊接电源部分,将USB座、LDO稳压管和充电芯片及阻容元件焊上,然后供电,测量输出是否为3.3V,有条件的话,还可以接在示波器上看看输出的电压是否纯净。

在LDO输出和整版的供电之间,笔者增加了一个0Ω的电阻,这个电阻可作为跳线使用,断开后可以检测芯片部分是否有短路等情况,调试完成后可直接短接导通。

电源部分完成后,接下来焊接单片机和外围的晶体振荡器、复位电路,组成最小系统。要判断单片机是否能运行起来,可以将板上的两个LED也装上,然后编写一个测试程序,循环点亮和熄灭,如果成功,则表明单片机基本正常。

最后焊接Flash芯片、TF卡座、按键等。

至此,原来的空PCB已经比较像一块电路板了,如图12.6所示。

一般来说,使用陶瓷天线的GPS模块需要尽量使天线面向天空,这样才能尽可能地接收信号,所以安装GPS模块的时候设计了一个支架,使得模块天线与接收器成45°角,平时手持的时候刚好面向天空,即使平放或立着放都能部分面向天空,如图12.7所示。另外,还为模块换了一个备用电池。

全部元件组装完成后的样子如图12.8所示。装上电池和后盖,如图12.9所示,硬件装配至此就完成了。

软件设计思路与调试

由于功能简单,软件不需要复杂的结构,流程如图12.10所示。开机初始化完成后,系统便进入无限主循环中,循环检查GPS是否接收完毕,是否有按键按下。

图12.8 全部元器件组装完毕的样子

图12.9 装上电池和后盖

GPS接收和解析使用了中断,当接收完成后,设置标志位,主循环检测到数据接收完成,便将数据显示在LCD上,如果设置需要记录,则再记录到SPI Flash中。

如果“菜单”按键被按下,则转到菜单函数;如果“显示模式”按键被按下,则切换显示模式;如果“记录”按键被按下,则切换是否记录到SPI Flash中。

图12.10 软件流程框图

操作方式和界面

记录器上部有4个按钮,用途分别为“菜单/退出”、“上一个/显示模式”、“下一个/记录模式”、“确定”。

常规显示时屏幕分为3个区域,顶部显示电池电量、卫星信息、时间等,中间用大字体显示当前经纬度,下半屏则根据显示模式分别显示卫星信息、速度航向和记录信息3种模式。按“显示模式”按键可以在3种模式中循环切换,如图12.11所示。

图12.11 显示屏下半部具备3种显示模式

图12.12 将数据存储到 TF 卡中

按“记录模式”键可以切换记录开始和停止模式。按“菜单”键可进入功能菜单。选择“菜单→转储→TF卡(KML)”可将存储器中的数据以KML文件的格式转存到TF卡中,如图12.12所示。选择“菜单→转储→TF卡(转储)”可将存储器中的数据以原始二进制格式存到TF卡中。

转储之后,在TF卡的GPS目录中就会有已经生成好的KML 文件,如果装了 Google Earth,就会出现如图12.13所示的图标。

图12.13 存储在TF卡中的KML文件

直接双击之后会自动打开 Google Earth,黄色的连线就是我们记录下的路径,如图12.14所示。

图12.14 GPS记录器记录下的路径可在 Google Earth 中显示

选择“菜单→浏览记录”可以实时浏览存储器中记录的路径和记录点的信息,并能直观地了解存储器空间使用情况,如图12.15所示。选择“菜单→擦除空间”,可将数据擦除,继续记录,如图12.16所示。

后记

其实市场上早已有产品化的GPS记录器,而且成本更低、功能更强,但是DIY的乐趣在于更深地了解其中的原理,以及发挥自己的想象力,根据自己的需要定制。比如,还是这套硬件,通过修改软件,还能实现GPS测面积的功能。

图12.15 实时浏览存储器中记录的路径和记录点的信息

图12.16 擦除记录

单片机实例分享,快递追踪器

如今,快递已经融入了人们的生活,收快递有时候也变成了没空的托词。国内快递品牌繁多,服务水平参差不齐,在给我们消费者带来更低廉价格的同时,也带来了不少的烦恼。快件丢失、损坏变得司空见惯,每次买东西都会习惯性地提醒店家“麻烦包装好,如今快递不靠谱”。

每次拿到快递,看到变形的包装,总会想象它到底经受了怎样了蹂躏。那我们就把自己“打包”起来,作一回快递,感受一下快递一路经受的“风风雨雨”吧!

由于我们人太大,还不经摔,所以打包的当然不是我们自己,我们设计了一个快递追踪器,包含GPS模块、加速度模块等,对快递的路线以及快递运送过程中的磕磕碰碰进行记录。这个追踪器由GPS接收模块、Flash芯片、加速度模块、51开发板以及电池盒组成,如图17.1所示。下面我们仔细了解一下这个追踪器。

图17.1 快递追踪器

各模块介绍

1. GPS 接收模块

这里使用的是一块旧的GPS接收模块,如图17.2所示,市场价在30元左右,用于接收GPS数据。接收模块原本使用的是RJ-11水晶头,为了方便和开发板上的标准9针串口连接,我自己制作了一个接头。焊接好后,把插头放进两个饮料瓶盖(经过美工刀处理后)里,并挤入热熔胶进行填充。由于九针串口没有VCC,所以模块供电就通过外接的一根面包板线完成。完工后的自制插头如图17.3所示。

图17.2 GPS 接收模块

图17.3 自制串口插头

GPS数据中包含经度、纬度信息,时间信息以及GPS卫星的有关信息。其中推荐定位信息(GPRMC)的格式如下:

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

<1> UTC时间,hhmmss(时分秒)格式。

<2> 定位状态,A=有效定位,V=无效定位。

<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)。

<4> 纬度半球,N=北半球,S=南半球。

<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)。

<6> 经度半球,E=东经,W=西经。

<7> 地面速率(000.0~999.9节,前面的0也将被传输)。

<8> 地面航向(000.0°~359.9°,以正北为参考基准,前面的0也将被传输)。

<9> UTC日期,ddmmyy(日月年)格式。

<10>磁偏角(000.0°~180.0°,前面的0也将被传输)。

<11>磁偏角方向,E=东,W=西。

<12>模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)。

例如“$GPRMC,024519.214,A,3315.7712,N,11954.9589,E,0.00,,240812,,*1E”对应翻译后可以得出当前定位信息为北纬33°15.7712′、东经119°54.9589′(不知道是不是谷歌地图的误差,这个坐标离我家实际位置有500m左右的误差),日期为2012年8月24日。

另外,从其他语句中可看出当前可视卫星数为7颗,其微信号分别为03、87、277、29、19、55、206,可见当前信号还是不错的。想了解更多关于GPS数据的内容请自行查找,这里不多介绍。

2. 加速度模块

MMA7361是一款低成本微型电容式加速度传感器,可用于测量加速度及角度,如图17.4和图17.5所示。借助这一模块,可以对快件在运送过程中所受的碰撞以及摆放姿态进行记录。

图17.4 MMA7361 模块

图17.5 转接板(左)及加速度模块(右)

通过单片机AD转换,量化x、y、z三轴电压并进行计算,便可获得加速度以及角度信息。另外,由于这一模块的量程较为有限,从1m高跌落产生的加速度就会超出量程,我们记录超出量程的次数,也就可以计数快件运送过程中发生较大碰撞的次数。

3. Flash 芯片

图17.6 焊接在转接板上的W25Q32

W25Q32为华邦(Winband)开发的一款基于SPI的闪存芯片,如图17.6所示。我们使用的单片机为STC12C5A60S2,不支持SPI接口,需要通过I/O口模拟SPI进行数据读写。另外W25Q32的工作电压为2.7~3.6V,单片机使用5V供电,要注意电压的不同。我们通过加速度模块上自带的5V转3.3V电路为W25Q32芯片供电。W25Q32的其他引脚可与单片机直接连接,数据读写不会受电压的影响。具体引脚定义及读写时序请参考相关数据手册。

4. 51 单片机开发板

XQ_L2A 51是一款很常见的51单片机开发板,如图17.7所示,价格也很低廉。我们使用板载的12864液晶屏插口作为模块接口,连接单片机4个P1引脚,正好用于加速度模块的AD转换。其他引脚连接P0口,用于模拟Flash芯片的SPI接口。

图17.7 XQ_L2A 51 单片机开发板

5. 自制连接板

为了方便连接,我们专门设计制作了一块连接板,如图17.8所示。其正面是加速度模块的连接座,背面为W25Q32贴片位置。

图17.8 转接板(正面、ARES 图纸)

模块装箱

开发板、电池盒、GPS接收模块都通过双面胶粘贴在包装内,固定后包裹上保护膜,如图17.9所示。包装内还放有污损比对卡以及一张记录卡,用于记录快件的一些信息,如图17.10所示。外包装上贴有3个测试标签,用于检查外观污损情况,如图17.11所示。

图17.9 开发板、电池盒、GPS 接收模块都通过双面胶粘贴在包装内

图17.10 包装内还放有污损比对卡以及一张记录卡

图17.11 包装外部

数据提取与处理

1. 数据提取

由于开发板只有一个串口,所以提取数据时必须拔去GPS模块,接上USB转串口模块。为了区分数据提取和数据采集这两种工作模式,我们在编写程序时定义了一个按键用于区分这两个模式。单片机上电时,会自动检测这个按键是否被按下,如果被按下,则打开串口等待数据读取指令。如果未被按下,则进入数据采集模式。

进入读取模式后,将模块连接电脑,打开串口助手,设置波特率后,发送“#READ”指令,单片机会自动从头读取Flsah芯片中的数据,并通过串口发送给计算机,如图17.12所示。另外我们在程序中写入了“#CLEARALL”指令用于芯片清空。

图17.12 计算机通过串口收到的数据

2. 数据处理

串口所收到的原始数据是单片机将各模块所收到的信息进行简单处理后存储到Flash芯片的数据。格式定义如下:

#*GPRMC,024518.214,A,3315.7653,N,11954.9529,E,240812*10,0,1*10&

#:开始标记

*:段落标签

GPRMC:GPS数据标签

024518.214:时间,2点45分18.214秒(UTC时间)

A:定位标记,A=有效定位,V=无效定位

3315.7653:33°15.7653′

N:北半球

11954.9529:119°54.9529′

E:东半球

240812:2012年8月24日

10:x轴瞬时读数

0:y轴瞬时读数

1:z轴瞬时读数

10:加速度取模值

&:结束标记

后期处理

我们总共选取了5家快递公司往返深圳与恩平之间寄送这个快递追踪器。通过保存在Flash芯片中的数据,我们对快递在运送过程中经历的“坎坷”有了一些了解。表17.1是我们整理后的结果,大家可以看看价格和服务是否匹配。(由于我们进行实验的次数较少,不具有普遍性,所以我们未公布快递公司的具体名称,请谅解。)

注:

(1)取件员着装一栏标为“不取件”是由于不上门取件所以无法填写。

(2)超量程记录是指加速度模块超出量程的次数,即有较大碰撞的次数。数据丢失是由于设备损坏而引起数据丢失。

(3)污损标签是贴在包装上的白色贴纸,用于衡量外包装污染情况。数字是与标准色卡比对的结果。

(4)GPS模块在室内和车厢内都无法定位,收集到的数据大部分都是在中转站的数据。但是由于无相关测绘软件,所以数据无太大实用价值,因而没有公布。

(5)结果存在偶然性,请勿对号入座。

相关问答

5VC 51单片机 如何实现与3.3VGPS模块的串口通信?

用电平转换电路用电平转换电路

51单片机 编程有什么用?

51单片机作为学习单片机的过程中必须要经过的一个过程来讲是非常重要的,原因在于51单片机从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象...

怎么用PLC读取 GPS 模块的定位信息-ZOL问答

PLC都支持串口读取、下载和上传简单的数据信息,要实现PLC读取,需要GPS模块支持串口(UART)通信才行,比如天工测控(*KYLA*)的智能穿戴GPS模块SKG09A就...

车载 GPS 用的是什么网?

GPS卫星定位车载终端设备是GPS车辆监控管理系统的前端设备,安装在被监控的车辆上。GPS卫星定位车载终端还可以非常隐秘地安装在各种车辆内部,同时与车辆本身的...

python可以 单片机 编程吗,怎么样?

MicroPython以微控制器作为目标,从而使得Python可以用来控制硬件。说到MicroPython,也许有人会感到陌生。而说到和它密切相关的Python,是否会恍然大悟呢?Pyt...

royaltek rta 1000 gps 天线怎么用

一、想用D600导航吗?如果想,先做准备:1、买个GPS蓝牙模块,淘宝上大把,400元左右的就是超级实用啦,200多的当然也能解决问题,不过一分价钱一分货嘛。...

如何干扰车辆 Gps 信号?

可以在汽车上安装一个GPS定位盾。当打开屏蔽照工作时,他就会屏蔽GPS的信号,从而使车辆安装好的gpS定位系统无法使用。当然安装GPS系统的车辆基本上为贷款车辆...

GPS 车辆管理系统哪家正规?

[回答]1)硬件设备:GPS模块、GSM模块、备用电池、单片机及各类元器件等;2)通信软件系统:SIM卡资费、服务器费用,日常维护费用等;3)其他费用:硬件研发、软件...

新开普主营业务?

是无线数字通信设备。因为新开普公司是一家专业从事无线数字通信设备领域的高科技企业,主要产品包括无线数传模块、GSM/GPS模块等,是行业领先的厂商之一。除了...

经纬度转换怎么转?为何我的 GPS 显示跟你们的不一样啊-ZOL问答

1.实现将一组GPS模块获取的经纬度数据在百度地图上绘制轨迹2.标准的GPS经纬度坐标直接在地图上绘制会有偏移,这是测绘局和地图商设置的加密,要转换成百度地图坐...

猜你喜欢