产品概述

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

小编 2024-11-24 产品概述 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 擦除记录

单片机小制作,七彩“魔法瓶”

一看题图,你可能会想,不就是一个普通的玻璃瓶吗?但是这个瓶子的功能却不简单,瓶子会感知周围光线的强度而改变内部的LED流动花式。当你的手背着光源的位置向前靠近时,口里再喃喃几句“魔法咒语”,神奇的现象出现了,本来的花式突然改变了,时而变蓝,时而变红。当你的手继续靠近时,然后可以关灯,这时瓶子闪烁得更加耀眼,更加激烈了,哇,太神奇了,竟然可以“隔空控制”!如果将此作品放在家里客厅或宿舍,一定会吸引很多客人或同学的眼球,而且可以活跃气氛。

“七彩魔法瓶”的奥秘是运用光敏电阻探测出周围光线的强弱,再根据光度由强到弱分成8个区间,每个区间都有一种不同的LED流动花式,第一个区间(也即是光照最强时)“魔瓶”不断显示红、绿、蓝的颜色;第二到第四个区间分别是显示由红色、绿色和蓝色的3种不同颜色的不同显示主题,不同的颜色能改变人的心情,因此随着主题的改变,心情也改变了;第五个区间(光照较暗时)瓶子会逐渐变化出类似彩虹的七彩颜色,因为红、绿、蓝三原色进行不同的组合就会得到不同的颜色;第六个区间是我们熟悉的流水灯,先由前排逐个流动,然后后排逐个流动;第七个区间是我最喜欢的,先逐渐显示单数和双数排的LED灯,同时,在瓶子内部的黄色和绿色草帽高亮LED灯交替亮起,发射出的光线经过洞洞板和玻璃瓶透射出来,显得特别好看;最后一个区间是光照最暗的时候,内部的高亮LED都亮起,同时左右排的LED灯交替亮,之后全部闪烁,达到最激烈的程度。相信在场观众的心情此时会达到高潮,很有创意吧,下面让我们一起来制作!

电路原理

所需器件列表:

◆ 20脚的STC12C2052AD单片机1个(或者选用同类有AD功能的单片机)

◆红、绿、蓝贴片LED各4个

◆绿色和黄色的高亮草帽LED各1个

◆ 470Ω贴片电阻6个

◆ 1kΩ贴片电阻2个

◆ 10kΩ贴片电阻1个

◆光敏电阻1个

◆ 7.5cm×7cm的玻纤洞洞板1块(玻纤板透光效果好)

◆排针若干

◆瓶口大小合适的空玻璃瓶子1个

01 用裁刀把7.5cm×7cm的玻纤洞洞板裁成3块的2.5cm×7cm大小的形状,玻纤板有一种半透明感,能把内部的光更好地透射出来,显示的效果更加美观。当然,如果材料有限也可以用其他的洞洞板,只不过效果没那么酷罢了。

02 然后在其中的一块洞洞板背面分别焊接上贴片LED和470Ω的贴片电阻,此作品要求越小越好,因此元器件都选用了贴片封装以减小体积,LED从左往右的排列为红、绿、蓝、红、绿、蓝(对应单片机的P3.0~P3.5引脚)。为了显示出七彩的效果,一定要按照红、绿、蓝的排列顺序,这三原色能组合出多种不同的颜色。注意要在中间间隔两个焊盘的位置,因为这块板子是放在左边的位置,也就是单片机P3组引脚的一边,为了更好地方便后面的对应焊接,中间跳过晶体振荡器引脚部分而焊接,焊接完成后如图所示。

03 在另一块板子,如图所示,连续焊接上贴片LED和470Ω的贴片电阻,此处6个LED灯对应P1.2~P1.7引脚,LED灯按照电路图所示的蓝、绿、红、蓝、绿、红的顺序排列。注意上面两块板子要对应好单片机的引脚位置。

04 分别剪出10针和7针的排针,并且用钳子把其弯曲成120°,如图所示,然后分别焊接在上面两块板子上,10针的对应电路图的左边,7针的对应电路图的右边。注意,要对应好LED灯位置,多出来的排针用于电源之间的连接。

05 在剩下的一块板子上焊接20脚的IC插座,然后把黄、绿两个高亮草帽LED灯的顶部弯曲成90°,如图所示,分别摆放在两端位置,黄、绿两个LED灯的顺序根据个人喜好摆放。

06 在背面焊接上光敏电阻的10kΩ贴片上拉电阻和两个高亮LED的1kΩ限流电阻,焊接完成后如图所示。

07 把左边部分的板子引出的排针对应好单片机的左边引脚位置,一一对应,注意板子背面朝外,大约弯曲成60°,然后用焊锡焊接固定好。

08 再把另一边的板子也按照上一步骤焊接上,也要注意排针对应好单片机的引脚位置,并且把光敏电阻从左边板子穿插进电路板内部,把光敏电阻的两端分别连接在单片机P1.0口和电源负极,这部分完成后如图所示。于是,一个由洞洞板组成的小型“金字塔”就制作完成了。

09 用一条大约1m长的两排排线把电源正、负极引出来,如图所示。你也可以多加两条排线把单片机的两个数据口引出来,方便程序的更新,由于我之前已经调试好了程序,因此在这里没有把数据线引出来。

10 接上电源,用手电筒在较暗的地方不断靠近光敏电阻,看看LED灯的花式显示结果是否如自己编写的程序一致,如图所示。

11 调试好程序后,就可以把它放进一个空玻璃瓶子里了,在底面板子的两端边上粘贴上双面胶,然后用镊子轻轻放进瓶子内部,在适合的位置上粘上去固定好,作品就可以宣布完成了,如图所示。电子爱好者也要加强环保意识,尽量利用废弃的物品来完成我们的电子制作,减少垃圾量,做到以废变新,这是一个不错的主意吧!而且LED灯发出的光在玻璃瓶的内壁折射又反射,显示出来的效果会比想象中要好多了!

12 插上电源,把“魔法瓶”放进较暗的地方,立即会显示出更加灿烂的炫彩闪耀效果,你一定会喜欢的。

程序部分说明

本作品最主要的部分是利用STC单片机内部的A/D转换功能,读取光敏电阻的阻值变化,进而控制LED灯的流动花式。STC12C2052AD内部置有8位AD转换功能,读取到的数为0~255的数值,然后把读到的数值分为几个范围区间,每个区间分别显示不同的LED流动花式。这里要注意的是,编写不同范围程序时,不能直接写成如“if(4040)&&(m<=60))”。

相关问答

目前常用的 单片机 型号有哪些?都有什么优缺点?

现在市场上的单片机型号可以说是非常多的,其中有通用型的单片机,还有专用型的单片机。专用型单片机一般我们不常见到。今天我们结合这个问题来介绍一下目前常...

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

以上就是python可以单片机编程吗的详细内容想了解更多Python相关,百度搜索圈T社区www.aiquanti.com,免费视频教程。纯干货板载重力传感、温湿度、加速度传感...

悬赏: 单片机 机器人怎么选?

[回答]少儿编程教育:1.强化孩子的逻辑思维能力。编写程序最重要的就是如何把大问题不断分割成小问题的过程。其中,孩子必须去思考如何把代码合理的安排在...

微博CEO转发的那款支持3D全息显示的“LED电扇”用的是什么技术?

5,可以借助App与之智能互动6,价格上可以承受7,创意感十足这是一种基于时尚风向、感官体验和心理倾向的综合需求,是一种全球趋同的消费指向。如果认真收集...

4岁的孩子适合玩什么积木玩具?想锻炼他的动手能力?

4-5岁是孩子的敏感期,是孩子安全感的最早来源年龄,他们在日常生活中会对身边人的身份,性别敏感,萌生性别意识,需要家长们正确的引导和科普。这是我们可以选...最...

光立方项目概述?

光立方设计项目说明书《单片机技术》课程设计说明书光立方学院:电气与信息工程学院学生姓名:周剑波指导教师:贾雅琼职称副教授专业:电气工程及...

arduino产品前景?

前景不错,Arduino开发的产品更倾向于创意类型的产品,它不需要开发者深入了解硬件的操作,它的函数和语法都非常简单,所以Arduino上手比较容易,只需要知道C++...

arduino是什么东西?

arduino是一种开源的电子原型平台,用于快速构建各种交互式项目。它由一个单片机和一组可编程的输入输出引脚组成,可以通过编写简单的代码来控制和操作各种传感...

,麻烦问一下,佛山制作 创意 高端演出话筒ZPsound美轮美奂,...

[回答]有趣!你要做数字无线话筒呀!够高级的,一般的无线话筒,由驻极体话筒搭配一个,高频调频发射电路就可以构成了,还用什么单片机呀!如果要用单片机来做,...

东北大学,西北大学,西南大学,东华大学,中北大学,江南大学,长安大学咋排?

简介一点儿我所了解的东北大学秦皇岛分校,与大家分享:在所有985分校、由分校改名而来的校区、分校区、新建校区(非985校本部院系整体搬迁过去的)中,东北大...

猜你喜欢