摘 要:鉴于传统儿童防走失系统使用的局限性,介绍了一种基于单片机控制的、可以工作在无线信号与移动信号两种数据传输模式下的儿童防走失系统。分析并利用GPS全球定位系统,准确获取儿童所在位置的经纬度信息,通过某种数据传输方式将数据传输给父母端设备,处理数据并图形显示儿童与父母的具体或是相对位置。
关键词:单片机;GPS;数据传输;图形显示
据公安部最新数据显示,近年来我国每年有近20万儿童失踪。传统的儿童防走失系统主要依靠无线电路实现,儿童端有一个信号发射器,父母端接收此信号并判断信号强度大小,当信号强度小于设定值时即报警。该方案的优点是结构简单、体积小,显著缺点是适用距离短,无法判别儿童方向,信号易受干扰。这往往是儿童防走失产品的致命缺点。
本系统采用的方案是根据GPS信息判断儿童具体位置并实现报警功能,报警的同时能够在第一时间向父母提供儿童的准确位置信息。系统的创新点与技术突破点主要体现在以下几个方面:
(1)双模式工作:当没有移动信号时,可通过无线方式实现点对点通信,不依靠第三方;当距离超过1 000 m时又可通过短信息传递数据,方便可靠;
(2)双重图形处理:十字坐标显示响应快速直观,第一时间指明孩子的方位;Google地图显示告知孩子的准确位置,两种方式一键切换;
(3)在Android手机操作系统下开发了一套完全适用于儿童防走失系统的软件,可移植性强。
需要注意的是,系统可以工作在两种传输模式下,且能在两种模式之间自动切换。具体体现在:开机情况下,儿童端设备默认通过无线信号的方式与父母端设备进行通信,而当接收不到信号时,儿童端设备将会立刻切换到通过短信息的方式与父母端设备通信。
1 系统架构与功能
本儿童防走失系统采用子母机形式。其中儿童端为子机,主要用来获取自身经纬度数据,同时监听父母端发送过来的指令,并将自身经纬度数据返回给父母端设备;父母端设备为母机,采用了两种模式:自主开发的手持终端模式与智能手机模式,分别通过无线信号和移动网络信号进行数据传输,两种模式可自动切换。系统整体框架如图1所示。
系统实现的主要功能有:(1)防走失报警:当孩子与父母之间的距离超过任意设定的安全值时父母端设备报警,同时在父母端设备上自动弹出孩子当前的位置信息(以坐标信息或Google地图的形式);(2)父母主动查看孩子的位置:在父母端手持设备上主动操作可以获得孩子的位置信息;(3)孩子主动求助:当孩子发现找不到父母时,可以按下子机的傻瓜式按键,父母就收到孩子的求助信号,同时弹出孩子当前的位置信息。
2 系统功能单元设计
2.1 GPS数据获取与分析
GPS(Global Positioning System)全球定位系统是新一代的精密卫星导航定位系统,利用人造地球卫星确定测站点位置[1]。在本儿童防走失系统中,定位分为两种:父母手持终端上的定位和智能手机上的定位。
智能手机上的定位主要依靠手机内部的GPS芯片完成。由于Google开发的Android操作系统完全开源,可以获得其所有API函数,通过调用API函数并编写相关代码,可以启动手机的GPS硬件,获得基于位置的服务。这些服务当中包括查询手机内部存储的最新位置信息、获得当前位置以及更新当前位置信息等。在本文编写的程序当中,使用到了查询手机内部存储的最新位置信息和更新当前位置信息等功能,部分程序代码如下:
LocationManager locationManager = (LocationManager)getSystemService(context);
Location location = locationManager.getLastKnownLocation(provider);
updateWithNewLocation(location);
其中LocationManager locationManager=(LocationManager)getSystemService(context)用来添加实例变量来存储对LocationManager的引用,启动手机基于位置的服务,基于位置的服务的目的是确定设备的物理位置;Location location=locationManager.getLastKnownLocation(provider)语句通过对实例变量locationManager的引用获得手机内部最新的GPS数据,并存储在location变量中;最后一条语句updateWithNewLocation(location)用来对手机内部存储的GPS数据信息进行更新,以获得最新的位置信息。
在儿童和父母端的手持监护终端上分别内置了一个GPS信号接收机。由于GPS卫星发送的导航定位信号是一种可供无数用户共享的信息资源,对于陆地、 海洋和空间的广大用户,只要拥有能够接收、跟踪、变换和测量GPS信号的接收设备(即GPS信号接收机),就能够获取当前的位置信息。利用GPS信号接收机将接收到的GPS信号转化为GPS经纬度数据,并以TTL电平格式输出,然后由单片机I/O口对其进行读取并进行进一步的处理。GPS模块的电源引脚连接到单片机的VCC与GND引脚上,用以给GPS模块进行供电;GPS模块的通信引脚连接到单片机的40与41引脚上,也就是单片机的异步串行接口RXD0、TXD0,GPS模块通过这两个引脚进行数据的收发,电平传输格式为TTL电平格式。
当系统获得子机与母机的GPS数据后,通过一系列算法求得子机与母机之间的实际距离与方位角。具体算法是:由于地球表面无比巨大,将地表看作是一个平面,将地球的经度当做这个平面的Y坐标,将纬度看做是X坐标。当获得了子机与母机的经纬度数据时,实际上就获得了它们的横纵坐标,通过勾股定理计算距离,通过三角函数关系计算方位角。为求出两点之间的实际距离与相对角度,首先需要求出其中一点相对于另外一点在经度方向上和纬度方向上的距离,也就是两条直角边的长度。而这两条直角边的长度可以通过两点之间的经度差和纬度差分别乘以两点相对于地球轴心和地球球心半径来获得,当获得了两条直角边的长度后,两点之间的实际距离也就是斜边的长度。具体的计算过程如下:
其中,α1、α2、β1和β2分别是两点的纬度值和经度值,α为两点的平均纬度值,OA、R分别为两点到地球轴心和球心的半径,AC、BC为两点在经度方向和纬度方向上的距离。
2.2 数据传输
子机与母机之间的通信可以通过两种模式进行,分别是GSM短信息传输模式与无线信号传输模式。相应地,为了与母机完成通信,在子机上分别使用了SIM300C GPRS带协议模块与APC240无线模块。
在父母端的智能手机上开发了一个儿童防走失系统配套软件,当父母使用手机查询孩子的位置时,将会发送一条含查询指令的短信到子机,子机上的SIM300C模块接收到短信后会向单片机发送一条指令,单片机接收到指令后会对短信进行读取,然后根据短信内容作出相应动作。短信发送程序代码如下:
SmsManager smsManager=SmsManager.getDefault();
smsManager.sendTextMessage(mobile,null,content,null,null);
其中SmsManager smsManager=SmsManager.getDefault()用来添加一个实例变量来存储对SmsManager的引用,启动手机基于短信功能的服务;smsManager.sendTextMessage
(mobile,null,content,null,null)语句引用SmsManager下的发送短信功能来发送指令,其中括号内第一个参数为要发送到手机的电话号码,第三个参数为发送的具体内容。
儿童手持终端中GSM通信部分电路图如图2所示。其中左半部分为通信指示灯部分,右半部分为SIM300C模块与SIM卡的引脚定义。
当父母使用手持终端机时,将通过普通无线通信的方式进行数据传输。首先由单片机读取所需的各种信息,包括GPS数据信息与指令信息等,再通过其I/O口将数据信息传递给无线模块,由无线模块进行数据传输。图3所示为儿童端电路板上的无线发射部分电路图(左侧仅画出发送部分电路使能图,接收部分未画出)。由于整个板子上共有三处需要使用到串行接口,分别是无线通信部分、GSM通信部分和GPS数据收发部分,而ATMEGA64单片机只有两个串行接口,所以将RXD1与TXD1作为了复用串口,通过使能端EN_A或EN_B来选择使用无线通信或是GSM通信。
2.3 父母端手机软件开发
正如之前所说,在父母端的智能手机上开发了一个儿童防走失系统配套软件。父母可以将采用Android操作系统的手机与子机配套使用。Android是一个开源的软件栈,它包含了操作系统、中间件和关键的应用程序,以及一组用于编写移动应用程序的API库。Android通过提供一个以开源的Linux内核为基础而构建的开放的开发环境。通过一系列API库,所有应用程序都可以对硬件进行访问,并且可以在严格受控的条件下完全支持应用程序之间的交互[2]。
当父母使用智能手机与子机通信时,将会通过GSM短信息的方式与子机进行数据传输。利用手机内置的GPS芯片获取自身的GPS数据,通过处理子机传送过来的GPS数据与自身的GPS数据来判断孩子是否处于安全范围以内并显示两者之间的相对位置关系,或是采用Google地图的形式来显示两者的具体位置。
手机软件部分的主要功能有:(1)主动查询孩子当前位置;(2)距离可控定时查询报警;(3)图形显示孩子当前位置;(4)修改默认号码等。使用时,首先进入主界面,在主界面上可以完成设置默认号码、查询子机位置、设置自动报警参数等功能。其中,默认号码一旦设定成功,以后每次开机或是打开软件将不必重新设定目标电话号码;自动报警模式设置成功后手机将会自动每隔一段时间查询一次子机位置,并根据设定好的安全距离判断孩子是否在安全范围以内;当点击查询按键时,首现出现的将会是十字坐标形式的显示模式,显示儿童相对于自己当前的位置,同时可点击切换Google地图按键,切换到Google地图显示模式,显示具体街道信息。并显示具体距离和相对方位,手机部分具体的功能流程图如图4所示。
正如之前刚刚提到的,儿童的位置信息有两种显示方式,分别是十字坐标显示和Google地图显示。在十字坐标显示中,以父母的位置为原点建立十字坐标系,将孩子对父母的相对位置标注在坐标系上,同时用文字标注出孩子相对于父母的方位角与实际距离,方便父母寻找孩子;而在Google地图显示当中,首先在屏幕中添加一个.MapView控件,用以调用Google地图,然后在地图上加一透明的覆盖层,将手机本身和子机的经纬度数据传入地图,在实际的位置上标注出孩子与父母的位置,帮助父母更直观地了解到孩子的位置。
正如之前所列出的一样,两种图形显示各有其优缺点:十字坐标显示响应快速直观,能够在第一时间指明孩子方位,而Google地图的显示需要更大的数据量,所以在响应速度方面会有一些滞后;但是Google地图显示能够告知父母孩子的准确位置,这是坐标显示所无法相比的。
3 实验结果及分析
实际测量时有很多因素都会影响到GPS的准确率,以下列举一些引入GPS误差的因素:(1)卫星时钟误差:0~1.5 m;(2)卫星轨道误差:1~5 m;(3)电离层引入的误差:0~30 m;(4)大气层引入的误差:0~30 m;(5)接收机本身的噪音:0~10 m;(6)多路反射:0~1 m。
理论分析GPS定位误差最大约为28 m。
实际情况下,在某一点做长时间连续测量记录,并分析在同一点上经纬度数据的变化量,如表1所示。
选取上述数据的两个极限值,然后由两点经纬度计算出两点距离,计算结果如表2所示。
由表2可以看出,在某一点做长时间测量,其误差的最大值为8.5 m,远小于上述总定位误差28 m,而且实际测量值应该落在以实际测量点为圆心,以8.5 m为半径的圆内,所以GPS的定位误差是可以接受的。
经过大量试验验证,系统的各项功能均满足设计要求,系统整体性能稳定。但与此同时,系统在GPS定位精度、外观等方面还存在不足,有待于进一步提高。
基于单片机控制的多功能儿童防走失系统的大部分操作属于被动操作,便于儿童使用;另外系统通过GPS信号进行处理,不但能够判断距离的远近,同时还可以指出具体的方向,且系统误差小于8 m;同时,双模式的工作方式使得系统适合多样的场合,适应性更强,有很好的市场推广价值。
参考文献
[1] 李天文.GPS原理及应用[M].北京:科学出版社,2010.
[2] MEIER R.Android高级编程[M].北京:清华大学出版社,2010.