基于STM32的智能儿童防拐系统的研究与设计

2018-04-24 05:01古丹方忠文胡敏王旭龙胡俊杰
无线互联科技 2018年4期
关键词:GPS定位

古丹 方忠文 胡敏 王旭龙 胡俊杰

摘 要:随着近年来儿童走失事件频发,国家、学校及家庭都越来越重视儿童出行安全问题,因为每个失踪事件背后都有一个破碎家庭。文章研究并设计了一款以STM32为控制平台,结合GPS模块、GSM模块、LCD模块等元器件,以及Android客户端APP为一体的智能儿童防拐追踪定位系统。系统分防拐器端和APP端,防拐器端提供了一键发送定位、一键拨打电话、显示信息、记录移动路径等功能。APP端则可通过点击一键追踪按钮获得防拐器端的经纬度坐标,并将坐标在百度地图上定位并导航。通过此系统能降低儿童在无大人陪伴时外出走丢的风险,为他们提供更为全面的监护。

关键词:STM32;GPS定位;GSM通信;儿童防拐;Android客户端

据公安部最新数据显示,近年来我国每年有近20万儿童失踪。尽管从新中国成立以后,我国对拐卖妇女儿童现象进行了几次专项打击,但拐卖儿童现象却是越来越严重,具体分析起来有以下几个特点:从个人分散作案,到集团化拐卖儿童。从一个人拐了孩子后直接找买家到现在拐运销一条龙,甚至出现了一些专门批发被拐儿童的人贩子,从境内作案发展到跨国作案,从单纯的拐孩子传宗接代到强迫孩子做非法盈利活动,拐卖手法也从单纯的偷,发展到明抢明夺,甚至为了拐卖儿童出现杀害儿童亲人的恶性案件[1]。

现今整合GPS与GSM的追踪定位装置在国内外也逐渐成为风潮,针对儿童的智能手表、老人的防丢手环之类的产品也层出不穷。若发生协寻事件时,家人透过GSM联系追踪器,追踪器会自动由发射器送出 GPS定位讯号,于手机或网络地图上得知走失对象位置[2]。本项目正是顺应这社会发展需求而开展的,通过智能儿童防拐系统的研究与设计解决以上社会问题,实现家长和孩子间的双向通信,进而避免孩子的丢失。

1 总体方案设计

1.1 系统工作方式

该系统防拐器端正常工作时,GSM模块处于激活状态,GPS模块持续搜索卫星并获取定位信息,通过STM32单片机编程处理,在LCD屏幕上顯示GPS定位信息及时间、GSM状态等信息。当一键求助按键被按下时,经STM32单片机处理,将防拐器当前GPS定位经纬度信息通过GSM模块发送短信到系统内置指定号码,APP端通过提取短信经纬度数据,调用百度地图SDK进行定位并导航至防拐器所在位置。当APP端手机点击一键追踪按钮时,防拐器端接收指令,并经STM32单片机判断指令是否为系统设定指令,是则将防拐器当前定位经纬度信息发送至APP端。防拐器端还按指定时间间隔自动保存其移动的位置信息至SD卡中,后期可通过PC端查看防拐器所经过的路径,方便查看儿童的活动轨迹。

1.2 系统总体设计

本设计所使用到的模块和辅助工具有STM32主控制器、GPS模块、GSM模块、SD卡模块、LCD液晶屏、电源、PC机、Android手机软件开发平台Android studio等。系统工作方式分析设计总体结构框如图1所示。

2 系统硬件设计

2.1 STM32主控制器模块

本系统主控制器使用了正点原子公司的MiniSTM32开发板,核心芯片为STM32F103RCT6,具有专门性、高性能、低成本、低功耗的特点,是嵌入式应用专门设计的ARM Cortex-M3 32位处理器。为使运行效率更高,总体协调性更好,设计中也使用到了直接内存访问(Direct Memory Access,DMA)处理技术和多个中断处理。内部结成2个SPI协议模块,12通道DMA控制器;多达11个定时器,其中高级定时器有两个;STM32F103RCT6工作频率为72 MHz,具有单周期乘法和硬件除法,内置高速存储器(高达256 kB的闪存和48 kB的SRAM),有丰富的增强I/O端口[3-4]。

2.2 GPS模块

GPS模块使用的是ME2530A模块,该模块采用MTK GPS单芯片MT3329,内置陶瓷天线增强其信号接收能力,支持NMEA-0183通信协议,模块通过TTL电平或者是同波特率的串口与外部系统连接通信,常用和支持的串口波特率有4 800、9 600(默认)、19 200、38 400、57 600、115 200等几种,兼容绝大多数的单片机系统。该模块接收到的GPS信息用过TTL电平输出,单片机处理方便,在单片机设置相同波特率的串口即可接收模块传送的数据,利用NMEA-0183协议解析处理,从而得到想要的数据,如定位数据、海拔、时间等。NMEA-0183协议采用ASCII 码来传递GPS 定位信息, 帧格式形如:$aaccc,ddd,ddd,…,ddd*hh(CR)(LF),“$”为帧命令起始位、“aaccc”为地址域、“ddd…ddd”为数据、“*”为校验和前缀(也可以作为语句数据结束的标志)、hh:校验和,$与*之间所有字符ASCII 码的校验和、(CR)(LF):帧结束,回车和换行符。

2.3 GSM模块

GSM模块采用果云公司生产的GA6模块,该模块通信范围广,基本上在手机可以打电话的地方均可实现通信,性价比高,相对于SIM系列的模块价格只有其一半,大大降低使用成本。模块有完整的AT指令集接口,GSM无线接口,支持中英文短信的发送。它可以快速、安全可靠地实现系统的数据传输、语音通话和短信息的发送接收。本系统主要采用此模块的语音传输和短消息服务功能。GSM系统的短消息通信需要通过SIM卡来实现,SIM卡卡座有两种,一种为8引脚,一种为6引脚。这里选用了最常见的6引脚SIM卡卡座。SIM卡卡座的接口电平由GSM模块内部电压稳压器提供,正常电压值为3.3 V,复位后所有引脚为低电平[5]。本设计通过单片机设置相同波特(模块默认波特率115 200)串口与GA6模块实现通信,GA6模块具有标准AT指令接口,可以提供GSM 语音、TTS、短消息以及TCP/IP 数传。

2.4 LCD模块

本设计加入了一个2.8寸LCD显示模块,为方便使用者查看时间、定位是否成功、数据是否正确接收与发送。该模块为正点原子公司开发的TFTLCD液晶显示器,分辨率为320×240、16位真彩显示、自带触控。其驱动芯片为ILI9341,该控制器自带显存,显存大小172800。本设计主要是通过STM32的普通IO口模拟8080总线来控制LCD的显示。该LCD模块采用16位并口方式与单片机连接,本设计中主控制器为64引脚的STM32单片机,虽然LCD模块16位并口方式占用着单片机大部分IO口,但在本设计中并不需要大量IO口输出,并且彩屏输出数据量较大,16位比普通8位处理速度快了一倍以上,有较好的显示效果的同时,保证了数据更新的响应速度。

3 系统软件设计

3.1 防拐器软件设计

整个系统软件设计编程均在Keil uVision5开发环境下使用C语言编写。首先对STM32内部进行初始化设计,GPS模块、GSM模块分别使用了串口1和串口2,串口初始化后检查是否单片机与模块间是否正常通信,等待至正常通信后进入主循环程序。正常情况下,系统持续接收更新GPS定位数据,并将数据按照设定好格式存储至SD卡中,LCD屏幕也会一直显示GPS定位数据和定位时间以及GSM信号质量等信息,如果定位未成功,经纬度数据为0。之后判断求助按键是否按下或是否接收到短信,若按下求助按键则发送当前位置信息至系统预设手机号码中,若接收到短信,则判断是否为系统预设指令,是则发送位置信息至发送短信方的手机号码中[6]。防拐器总程序流程如图2所示。

3.1.1 GPS定位解码

GPS模块接收的并非只有经纬度,还有海拔、速度、时间、卫星状态等数据,如果直接从串口接收数据判断解码数据流过大,所以使用了GPS模块的NMEA-0183协议解码。NMEA-0183协议标准的输出数据采用的是ASCII码,GPS数据具有6种不同的数据类型,包括 $GPGGA,$GPGSA,$GPGSV,$GPRMC,$GPVTG,$GPGLL,$GPZDA等。本设计主要使用了$GPRMC命令,即推荐定位信息命令,其中主要解码使用了UTC时间、经纬度、GPS状态、定位卫星数等。

根据$GPGGA语句基本格式,通过简单地判断“,”位置,即可将语句每个数据提取出来,并將字符串转换为整型数字,方便经纬度计算转换。纬度提取的程序如图3所示,其他数据提取类似。

NMEA-0183协议下的数据提取还是相对容易实现的,NMEA_GPRMC为提取$GPRMC语句函数,先通过字符串处理函数strstr函数提取包含GPRMC的语句到p1指针,从$GPRMC语句基本格式可得知纬度数据在语句的第3个位置,通过判断逗号位置并返回指定位置数据,最后将纬度数据返回到posx变量中。

3.1.2 GSM远程通信

GSM模块软件设计上主要是通过AT指令控制数据的收发,GA6的AT指令种类繁多,本设计主要使用拨号、短信、查询等相关的AT指令。短信发送指令,也能明确指令发送成功后返回的信息,先是设置短信模式,通过AT+CMGS=“ “(引号内为接收方手机号码) 指令发送短信,GA6模块返回“>”符号后即可键入短信内容,发送成功则返回“+CMGS:”。所以通过串口发送指令,再判断GA6返回的信息即可完成短信的发送,发送短信程序设计如图4所示,其他AT指令类似。

3.1.3 定位数据存储

本设计定位数据存储在SD卡中,主要是用文件系统FatFs来实现的。使用FatFs文件系统的好处就是使用者并不需要了解其复杂的编程协议,FatFs Module库提供了ff.c,ff.h,使用时直接将头文件写进源程序中即可调用应用接口函数,如f_write,f_read,f_open,f_close等函数,操作也相对简单,但在操作之前需做好SD卡的驱动工作及初始化。

系统设置为3 s左右存储一次经纬度数据,先f_open打开创建Gps.txt文件,指定为写入数据。使用sprintf函数强制转换数据格式,把数据格式放入缓冲区buff,之后使用f_lseek移动写入指针,保证数据不被覆盖掉,然后利用f_write函数将文件写入SD卡中,最后f_close关闭文件。具体数据存储程序设计如图5所示。

3.2 Android客户端软件设计

客户端APP主要完成接收到经纬度信息后,软件能够完成提取防拐器发来的短信。提取短信使用content Resolver类监听数据库的内容发生的变化。Content Resolver类我们称之为内容解析器,目的是为了根据特定的Uri查找系统的信息,进而做出相应的处理。Uri是标识、定位资源的字符串。当我们发送一条短信到该手机上时,手机会自动调用内容解析器中的指定方法,通知我们的代码,短信发生变化,然后读取短信的内容,将我们需要的短信内容提取出来。然后软件调用百度地图SDK,使用百度地图服务应用接口,实现定位导航功能。百度地图SDK使用Java语言,为用户提供了丰富的功能接口,有免费使用、开发周期短、维护成本低等优点,非常适合防拐器手机APP的设计与开发。

4 结语

经系统测试,基本完成了预期的目标,使用者带着远程追踪器外出时,监控者只需发送给系统预设的短信指令,就可接收到使用者当前位置链接,并在手机内置地图中显示。并且该系统针对儿童操作方便,一键拨号、一键发送定位功能均可实现。并且系统自动保存路径数据至SD卡中,监护者通过电脑上的MissionPlanner软件即可查看到使用者经过路径。

虽然基本上完成了预期目标,但该设计还存在很多不足的地方,如定位数据存在一个固定偏差,虽然在软件设计上已经做了定点漂移矫正,但还存在不足。定位误差大概在10 m左右,但在同一个地方定位时间越长或地理位置较为宽阔的情况下,定位更加精确,而且数据的变化不是线性的,这就需要更加合适的算法去解决这样的偏差问题。

[参考文献]

[1]石破.张宝艳:盼宝贝都回家[J].南风窗,2011(1):57-60.

[2]李勇.我国车载GPS系统的应用现状与发展前景[J].合肥学院学报(自然科学版),2008(1):67-69.

[3]宋维.一种基于STM32的SMS短消息收发系统[J].电脑知识与技术,2012(20):4800-4802.

[4]董建勋.基于GPS和GSM短消息的定位装置的设计[D].太原:中北大学,2011.

[5]姜日凡.基于STM32单片机和GSM技术的门禁系统[J].大连工业学报,2015(2):67-69.

[6]龚虹瑞,黄小莉.具有闹钟和短信提醒功能的智能药盒设计[J].西华大学学报(自然科学版),2014(5):91-94.

猜你喜欢
GPS定位
移动轨迹挖掘算法设计与系统实现