APP下载

虚拟停车电子围栏设计研究

2019-05-27

计算机测量与控制 2019年5期
关键词:围栏串口百度

(广东交通职业技术学院,广东 广州 510650)

0 引言

与其他的公用自行车相比,“无桩”理念的共享单车随时取用和停车的方式给市民带来了极大便利。但由于没有固定的取车、还车地点,用户使用完之后可以随意停放,随着车辆规模的扩大,用户不按规则骑行、随意乱停放等不良行为给城市管理带来了很多问题。而政府部门目前只有相关行政手段进行管理,例如深圳市在2017年发布的《深圳市自行车停放区(路侧带)设置指引(试行)》规定:自行车不适宜停放区域包括人行天桥及通道出入口、绿化带、盲道、井盖等区域。然而目前迫于管理人员缺乏以及缺少相关技术支撑,该类《指引》只能靠市民自觉程度去执行,无法保证其得以有效实施。基于当前政府部门迫切地需要对共享自行车进行有效地统一规范管理,本文针对市民使用共享单车后乱停放的问题,将通过GPS技术实现对单车位置坐标化,利用百度地图开发平台实现对地理位置的区域划分,进而用户可以方便地设定自行车允许停放的区域,并通过自行车当前经纬度位置与停放区域的位置对比判定其是否在允许停车的区域内,从而在技术上限定了共享自行车只有在固定的区域内才允许锁车实现共享单车规范停放的问题。

1 系统总体结构设计

本系统是一个基于百度地图、单片机控制系统、GPRS无线数据通信模块、车载GPS(GPS/北斗)定位以及中心监控管理平台于一体的多技术融合系统。中心监控管理平台基于Visual Studio开发软件设计,监控界面调用百度电子地图API进行车辆实时位置的显示,由服务器、数据库等构成,主要功能为监控前自行车车辆信息的登记、车载位置信息的接收存储、电子地图区域对比处理以及数据库的管理等功能;车载GPS主要负责车辆的位置信息、经纬度数据等信息,通过单片机控制器将数据进行处理后利用GPRS无线数据通信模块将数据上传至监控平台的服务器上,从而通过Visual Studio2015监控平台可以调用百度地图直观地看到车辆的实时位置状态。并通过安装在自行车内部的车辆位置定位信息与监控平台中设置的允许停车区域坐标相对比,如车辆自身位置在允许停车区域内则允许该车辆锁车停止使用,否则系统将禁止该自行车锁车,如果用户强行锁车系统将发出报警信息并记录该用户不良行为,从而实现对已登记的自行车车辆进行有效地管理。

图1 系统结构框图

2 系统硬件结构设计

2.1 GPS/北斗定位系统设计

本方案中GPS定位系统采用BH-ATGM332D-5N-31模块进行设计,ATGM332D是由中科微电子公司设计的 GPS+北斗双模定位芯片。它具有快速搜索卫星的能力以及精准的定位效果,非常适合符合高性能、低功耗的应用场合并可以通过串口方便简单地向单片机系统和电脑输出GPS和北斗定位信息。

BH-ATGM332D-5N-31芯片与外围电路组成的定位系统硬件结构如图2所示。VCC管脚为电源线,正常电压范围为3.3~5 V,VBAT接有XH414法拉电容,参数为:3.3 V,0.07F。其功能与锂电池一样,当主电源掉电时可以为定位模块的RTC部分供电,使定位模块在下次启动时能够快速地搜索到卫星;IPX接口用于连接有源天线;PPS为时钟脉冲信号线,模块接受到GPS时间信息后,输出可调节的脉冲信号,默认为1 Hz,脉冲上升沿与UTC时间对齐;TXD1和RXD1为串口数据发送信号线,使用TTL电平[1]。

图2 ATGM332D电路图

2.2 无线数据通信模块设计

无线通信系统需要稳定的性能、功耗低、抗干扰能力强等特点,而GPRS系统就能够很好地满足以上要求。在此选用SIMCOM基于MT6261芯片平台设计的新一代GSM/GPRS工业模块SIM800A。SIM800A是SMT封装的双频GSM/GPRS模块,其性能稳定,外观小巧,性价比高,能满足客户的多种需求。SIM800A工作频率为GSM/GPRS 900/1800 MHz,能够在极低的功耗下进行语音、SMS和数据信息的传输。并且SIM800A尺寸较小,仅为24*24*3 mm,可以适用于各种紧凑型产品设计需求[2]。

SIM800A支持TTL电平标准的串口通讯标准,可以非常方便地使用单片机系统进行控制。单片机系统VCC、GND、串口RXD、TXD引脚分别与SIM800A模块的SIM900A_VCC、SIM900A_GND、SIM900A_TXD、SIM900A_RXD引脚相连,即可通过单片机系统向模块通过串口发送AT控制指令。

2.3 电源模块

该系统中应用于共享单车平台,故必然要求其工作电源长期保持有效状态,传统的锂电池随工作时间长但也会有电量用完的一刻,因此该系统中亦注重电池的长期工作有效性。在此,选用凹凸科技(中国)有限公司研发的OZ1C105C高性能充电管理芯片作本系统的锂电池进行充电管理。OZ1C105C其内部构架复用,具有高效率、精度高、瞬态响应快等特点,可实现最高3 A的充电电流,并能够提供5~16 V的宽电压。太阳能板模式下支持在各种天气环境:阴天、雨天、弱光、强光等极端条件下的充电,正常环境下可支持达到十几毫安至700毫安的充电。同时支持适配器2A左右下的充电,从而在共享单车生产出厂或者是维修时能够快速地给锂电池充满电能。

图3 ATGM332D电路图

3 车载平台软件设计

3.1 主程序设计

系统主程序主要是单片机控制器对程序进行I/O初始化处理、串口初始化、车辆地理位置经纬度上传等,数据初始化之后对GPRS模块进行信息查询,若查询失败则一直查询直至成功。单片机还对车载GPS模块进行检测,当检测到GPGGA帧头时单片机开始接收GPS数据,其中接收到的数据通过单片机分离出来后将形成车辆的经度、纬度、时间和高度等信息。单片机再将分离出的信息通过GPRS模块传输至监控管理平台,其中位置信息将与平台划定的停车坐标向对比,以确定是否允许停车,程序流程如4所示。

图4 主程序工作流程图

3.2 GPS数据处理

BH-ATGM332D模块默认采用NMEA-01834.0 协议,通过TTL串口输出定位数据信息。NMEA 是美国国家海洋电子协会(National Marine Electronics Association )为海用电子设备制定的标准格式。其为一套定义接收机输出的标准信息,有几种不同的格式,每种都是独立相关的ASCII 格式,使用逗号隔开数据,数据流长度从30-100 字符不等,通常以每秒间隔选择输出,最常用的格式为"GGA",它包含了定位时间,纬度,经度,高度,定位所用的卫星数,DOP 值,差分状态和校正时段等,其他的有速度,跟踪,日期等[3]。

单片机系统通过串口与BH-ATGM332D 模块通讯,通过USART 串口获取GPS 模块输出的原始信息,并把解码结果使用USART1 输出。在控制器在处理数据的同时,串口会源源不断地接收GPS 数据,需要协调好接收数据和解码数据的关系,使用DMA 串口缓冲区解决。当因坐标系不一致产生定位偏差时,需要调用“原始坐标转化为百度坐标的”API,并输入WGS-84坐标系的经纬度才能进行坐标纠错[4]。其程序段如下:

var gpsPoint = new BMap.Point(Longitude, Latitude);//gps 坐标纠偏

BMap.Convertor.translate(gpsPoint, 0, translateCallback); //真实经纬度转成百度坐标

3.3 GPRS数据处理

本系统MCU除了需要接收处理GPS数据的同时还需要将位置信息通过GPRS发送至上位机系统中,因此MCU需要选用具有双全公串口且有较大的数据存储器来缓存GPS数据,在此选用STM32系列单片机作为控制器。WF-SIM800A支持TTL电平标准的串口通讯标准,非常方便使用STM32单片机系统来控制。

主程序通过对串口读中断服务和写操作,实现对模块的控制;对串口读中断服务实现定位信息的提取,主程序首先初始化串口和定时器,实现对GPS和GPRS模块的控制。系统启动后SIM800A进行网络注册及连接GPRS,并发送测试信息确保连接GPRS网络。GPS模块上电工作后首先处于冷启动阶段,在此阶段进行搜星、下载星历等过程(BH-ATGM332D冷启时间≤32 s),此时输出的定位信息是无效的。冷启完成后进行TCP连接,将经、纬度数据信息发送到网络中心服务器。

4 监控中心设计

4.1 监控中心

监控平台基于Visual Studio2015平台进行开发,Visual Studio2015是目前最流行的Windows平台应用程序的集成开发环境,它是由微软集团推出的开发工具,可以利用通用的代码库在 Win/Mac/Linux 大操作系统上快速开发自己的应用软件。本项目中使用C#语言编程,快速可视化搭建监控平台,建立C/S程序框架,监控中心即为服务器,同时可以作为PC客户端可视化监控数据,使用C#提供的Socket接口,通过GPRS与单片机系统客户端进行实时通讯;PC客户端主要使用了button、textbox、panel、treeview、label、timer、checkbox、dataset等相关控件[5]。

图5 监控系统登陆界面

4.2 百度地图API设置

监控管理平台显示界面调用百度地图显示车辆位置信息,在次使用百度地图JavaScript API进行设计。百度地图JavaScript API是一套由Java Script语言编写的应用程序接口,可在浏览器网站中构建功能丰富、交互性强的地图应用,免费对外开放,接口无使用次数限制,但使用时需申请一个密匙(ak)才可使用[6]。

由于虚拟电子围栏可随意划定,其形状具有不规则性,因此需采用百度地图API来实现不规则多边形地理围栏,可使用百度API中的GeoUtils库来实现。GeoUtils库除了能够用于地理围栏设置之外还可以用于测距、求面积等用途[7]。在此监控人员可以在Visual Studio2015监控平台使用鼠标任意勾画出允许停车区域(可以为不规则图形),并定时获取车载GPS经纬度位置信息,如果车载位置不在勾画出的多边形区域内则发出相应的监控警告信息,其中利用监控平台进行任意区域的勾画程序如下所示:

添加多边形(地理围栏)

var polygon = new BMap.Polygon([

new BMap.Point(113.359219,23.187118),

new BMap.Point(113.359003,23.187483),

new BMap.Point(113.358608,23.188364),

new BMap.Point(113.358374,23.189078),

new BMap.Point(113.357943,23.189859),

new BMap.Point(113.357943,23.190589),

new BMap.Point(113.358338,23.190838),

new BMap.Point(113.358841,23.190772),

new BMap.Point(113.359542,23.190589),

new BMap.Point(113.360351,23.190108),

], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});//创建多边形

map.addOverlay(polygon);

该程序对应监控平台勾画出的地图区域如图6所示。

图6 自定义虚拟地理围栏图

划定虚拟地理围栏后可通过setInterval定时两秒刷新一次的方式获得车辆的最新位置信息,调用BMapLib.GeoUtils.isPointInPolygon方法判断用户是否在预设区域,如果在则返回true,控制输出:“在地理围栏内”;如果不在预设区域则返回false,弹出警告框:“非地理围栏内”。判断用户是否在地理围栏内,相关程序如下:

var geolocation = new BMap.Geolocation();

var dingwei=setInterval(function () {

geolocation.getCurrentPosition(function(r){

if(this.getStatus() == BMAP_STATUS_SUCCESS){

map.panTo(r.point);

if( BMapLib.GeoUtils.isPointInPolygon(r.point,polygon)){

console.log("在地理围栏内")

}else{

alert("非地理围栏内")}

}

},{enableHighAccuracy: true})

},2000);

5 测试结果

系统硬件搭建完成及软件平台编写好后,经过调试进行了现场测试。将监控模块安装于自行车上待车载GPS模块进行位置的不断变化,可以通过监控平台地图位置清楚地看到自行车对应的位置,结合虚拟电子围栏区域可以准确地判断自行车的位置是否所在虚拟地理围栏区域位置以内。数据处理过程为:

1)初始化监控平台数据。在Visual Studio2015平台启动时,初始化监控平台数据,主要作用为查询自行车实时的GPS坐标串,登记待监控自行车车辆信息。

2)开启定时中断。操作人员可通过Visual Studio2015监控平台在允许的区域内划定虚拟地理围栏区域,Visual Studio2015监控平台在定时中断中对自行车监控模块即车载GPS模块中的坐标进行判断,判断当前自行车否进入允许停车的区域之内。

3)在Visual Studio2015监控平台软件系统界面显示出围栏内的自行车车辆信息,并向已登记并且未进入允许停车区域内的自行车发出禁止锁车的通讯控制信号,此外Visual Studio2015监控平台还有记录车辆进、出区域内的数据,区域内停放的车辆数据等。

在此监控处理过程中,技术难点在于判断自行车车辆实时位置(GPS坐标)是否属于Visual Studio2015监控平台上勾画的虚拟地理围栏内。此外,通过GPS模块获得的经纬度如果不进行处理直接用于百度地图API的话将会出现较大的误差。因此需要将自行车GPS实时坐标转化为百度地图坐标,其方法为利用Web界面读取原始坐标然后通过百度地图提供的BMap.Convertor.transMore函数进行坐标位置的批量转换[8],相关转换程序如下:

include

include

struct ZuoBiao

{double JingDu; //经度坐标

double WeiDu;}; //纬度坐标

double transformWeiDu(double x,double y); //将GPS坐标转换为google纬度坐标辅助函数

double transformJingDu(double x,double y); //将GPS坐标转换为google经度坐标辅助函数

ZuoBiao transform(ZuoBiao gps);//将GPS坐标转换为google地图

ZuoBiao bd_encrypt(ZuoBiao gg);//将谷歌坐标转换为百度坐标

在判断车辆实时坐标是否在虚拟电子围栏时监控系统中利用网格化的设计思路,在地图中设置1000 *1000 米,100 *100 米,10 *10 米三个等级的地图网格。此时车载GPS所在位置通过坐标比较就可以确认出落在哪个网格内,从而判断是否属于虚拟停车区域[9]。例如:车载GPS位置为“113.358841,23.190772”,通过简单的计算可以得出该位置位于“113352319”的千米网格、位于“11335823190”的百米网格和“1133588231907”的十米网格内。

图7 系统监测界面

6 结语

本系统使用GPS、GPRS、MUC等电子硬件结合百度地图、Visual Studio软件进行开发,实现了一种在电脑监控平台上可以方便划分一个区域虚拟电子围栏的方式,并利用地图网格比较法在监控平台上实现了共享单车中的车载位置信息是否属于虚拟电子围栏中的停车区域内。并可通过监控平台实现对超出区域内的共享单车进行监测并报警等处理,从而利用该系统可以用于当前我国共享单车市场的管理,从而解决乱停车引起的社会管理问题,具有较强的应用价值和市场前景。

猜你喜欢

围栏串口百度
TBS围栏灭鼠技术
Robust adaptive UKF based on SVR for inertial based integrated navigation
围栏
基于API函数库实现串口数据通信的分析与设计
基于EM9000工控板高性能双串口通信模型设计与实现
动物园
洗澡围栏
百度年度热搜榜
不懂就百度
MCS—51单片机中的多串口通讯技术的应用