文摘
停车场是一个主要的问题在城市地区也在发达国家和发展中国家。越来越多的车辆造成停车位的问题主要集中在城市中心和周围的街道。当地政府必须与法规、反应和许多市民的现状是不愉快的。因此,本文的目的是提出一个复杂的户外智能停车场系统基于迷你电脑平台试点实施,这将为上述问题提供了解决方案。当前室外停车场管理依赖于人力人员跟踪可用的停车场或传感器系统,监控每辆车的可用性。建议的解决方案利用现代物联网的方法和技术,如迷你电脑平台、传感器和IQRF。专业和昂贵的系统相比,这是一个解决方案,该方案具有成本效益的,有可能在其扩张和与其它物联网服务的集成。
1。介绍
汽车的数量不断增加,不仅在捷克共和国,也在其他国家。根据数据从捷克共和国中央Auto-moto俱乐部,这里注册超过550万辆汽车,这意味着他们的数量自1989年以来增加了2.4倍。越来越多的车辆,停车的问题也会出现。首先,这些问题成为普遍的体育和文化活动期间,以及在行政大楼的附近或银行。停车在城镇和城市交通高峰时期也是一个重要的问题。当前数量的停车位的缺乏知识会导致司机完全占领了停车场,因此导致不得不搬到另一个位置,以及寻找另一个停车场。因此,司机不仅浪费时间,而且燃料,这一切导致恶化的交通状况和环境产生不利影响。
本文的目的是提出一个复杂的智能停车场系统基于微型PC平台,连同它的试点实施,这将为上述问题提供了解决方案。解决方案的目标是使用最新的原则在物联网领域,网状网络和工具提供的Android操作系统作为整个解决方案既实惠,又迅速部署。
建议的解决方案包含一个完整的设计和实现基于微型PC平台,IQRF技术,包括使用DPA的协议。作为一个网关,UpBoard DK-EVAL-04A通信模块使用。在解决方案本身之前,深入分析当前使用的解决方案和方法被执行。这个分析的结果提供如下。
2。相关的工作
首先,分析方法的智能停车解决方案必须执行。这篇文章IoT-Based智能停车系统[1)是一个杰出的输入在这个领域,这是类似于(2),描述了体系结构的基于物联网的智能停车系统(物联网)技术。在[1),传感器放置在停车位检测车辆的距离并将这些数据发送到云使用迷你电脑(覆盆子π)部署在停车场。作者描述的使用覆盆子πGPIO管脚,26个传感器可以连接。数量可以增加进一步使用合适的多路复用器。这个解决方案利用IBM MQTT服务器,树莓发送通过MQTT消息来自传感器的数据。用户与系统通信通过一个移动应用程序写在Apache科尔多瓦,与服务器通信,以JSON格式的消息。用户可以使用手机应用程序看到的数量上的免费景点停车场、停车位的预订,支付停车费。在[2),除了通用架构,作者关注使用椭圆曲线密码(ECC)作为一个有吸引力的替代传统的RSA公钥密码术等。有趣的算法应用于当代智能停车系统介绍(3]。最后,一个总体的概述(提供的方法和解决方案4]。
由本文的另一个问题是逻辑的优化和物联网方法用于查找和导航到停车空间本身。蔡et al。5]描述使用移动应用和物联网(物联网)技术的停车系统:找到一个停车场的过程,停车位预定,在停车场和室内导航。另一个话题是找到合适的算法来计算优先推荐特定的停车场距离的基础上司机从停车场,很多免费的停车位,停车费用,由用户的偏好设置。在选择停车场,司机有机会书停车位的应用。通过计算距离的停车场和导航,应用程序使用GPS坐标从谷歌获得API。检测车辆停车空间的存在是通过超声波传感器实现通过无线模块和传输到服务器。描述的解决方案是指定主要用于室内停车场,与提供的室内导航iBeacon蓝牙发射器。司机在停车场的存在是一个RFID芯片检测到。停车的问题讨论了专门的道路(6]。它描述了检测路边停车位使用传感器放置在车辆乘客的一侧。这些传感器被放置在公共交通车辆、出租车,有时在志愿者的车辆频繁经过测量领域。
系统使用超声波探测器探测停放车辆和空点沿着路与GPS系统,并利用地图匹配(比较发现点与地图),地图可用的停车位是不断生成和分发给用户通过移动应用程序或网站。根据执行测量,绘制相同数量的停车位,移动传感器更高效的传感器直接放置于停车位。检测的成功率是94%到76之间,这取决于GPS系统的准确性。
特此提出了复杂的解决方案,IQRF网络利用。他们讨论了通信系统(7),讨论了网络的使用的传播(8,9]。
3所示。提出的系统架构
的目的提出了停车系统是一个复杂的经济系统检测室外停车场免费停车空间,基于微型PC平台。系统部分处理的问题没有纪律的司机会使用停车场没有相应的授权。这是由使用自动门系统在停车场入口。因为预算的要求,停放车辆的变种会发现通过超声或infra-sensors已被抛弃,因此,建议的解决方案讨论了变体使用磁力的传感器连接到一个网状网络。定期的迷你电脑检查单个停车位是否占据了实时数据库中的数据并存储。司机然后通知通过Android手机应用程序,所以他们当前可用的停车位的数量信息选择的停车场。可用性可以手动或自动检查使用地理围墙服务。用户也可以订一个停车位60分钟。如果他们不到达停车场在这段时间里,预订将自动取消。
建议的解决方案使开放停车场门口直接从移动应用程序通过添加一个条目到实时数据库中。条目被添加后,迷你电脑执行相应的步骤。检查司机的存在(他们的智能手机,精确)停车场,手机应用程序比较了GPS坐标之前注册的车辆出现在停车场。如果智能手机和停车场之间的距离大于给定的限制,访问被拒绝。多亏了这个解决方案,没有必要使用射频识别芯片,并利用停车场,智能手机安装程序和连接到互联网应该足够了。执行识别的智能手机使用一个独特的64位数字,ANDROID ID。一般的模型建议的解决方案是描绘在图1。
3.1。建议的解决方案的功能图
手机应用程序监控数据库中的条目的数量空点。每一个变化的状态通知图标屏幕上应用的主要改变。利用这个图标后,当前个人占用停车位从数据库加载,并显示在手机屏幕上。点击相应的图标在主屏幕上,导航到停车场。使用Google API,应用程序开始在谷歌地图导航。节中描述的更详细的信息5。启用自动通知关于停车场在距离和可用停车位的数量,应用程序使用地理围墙的服务,这是在5.2节描述。
下面的图描述两个主要功能:显示可用的斑点在停车场和当前占用(图2)打开自动通知关于停车场(图3)
下图(图4)描述所需的逻辑步骤打开停车场门口。首先,停放车辆的应用程序检查数据库来确定车辆进出停车场。
当进入停车场时,也检查是否有可用的斑点或如果司机发送请求打开门有一个预订保存在数据库中。如果一切妥当,距离停车场检查以防止无意或故意在较高的距离停车场大门关闭。如果不满足任何条件,司机收到关于停车场的信息不可用。否则,门打开,和到达的车辆添加到停车场的数据库。同时,司机的预订有效性检查,如果无效的从数据库中删除。离开停车场时,系统将退出门和删除的记录从数据库停车场的车辆。
预订的实现过程如图5。在尝试预订,系统首先检查车辆是否目前位于停车场,其ID没有预订已经创建。然后,检查可用的斑点。如果所有的条件都满足,预订在停车场的数据库条目。否则,应用程序通知司机,不能做预订。预订的时间限制在60分钟。由于这个原因,在1分钟的间隔,停车场上的迷你电脑检查数据库是否预订已经超过这个极限。如果发生这种情况,从数据库中删除条目。
一般的沟通模式(图6),你可以看到整个系统是一个常见的存储数据库重火力点。数据库和迷你电脑之间的通信是通过TCP / IP协议采购的。数据库和手机应用程序之间的通信使用移动网络数据传输和迷你电脑之间的通信和单个传感器所获得的IQRF第三章中描述的技术。
4所示。IQRF交流平台
原理的智能停车系统建议,有必要系统本身能够检测各自的物理位置是否占用与否,它必须连接到合适的网络,与中央迷你电脑。为此,IQRF技术选择10]。
IQRF平台适用于无线数据传输,并利用无线数据传输,使用的频率868 MHz和433 MHz的沟通。IQRF平台利用特殊的接收器,相互地交换数据。IQRF收发器有一个非常低的消费率(12.3 mA在睡眠模式在通信和380 nA),感谢支持网格拓扑,在相对较长的距离通信是可能的。这些参数为物联网技术的发展似乎是一个理想的解决方案。无线IQRF网络使用IQMEST协议(11,12),它使用的原则在任何给定的领域,总有至少两个IQRF接收器内的传输范围。两个通信收发器之间的最大距离约500米在太空中没有障碍。同步收发器传输,所以他们不要打断对方在传播。的通信是由一个协调器发送数据,在到达接收的数据收发器,进一步在时间段发送数据,这样的数据逐渐传遍整个网络。多亏了这一原则,整个网络是非常可靠和数据传输的成功率很高。由于单个接收器之间复制路径,数据到达目的地即使多个通信路径同时中断。原则是描绘在图7C,协调器发送的数据收发器N2。中断的通信路径,例如,通过信号中断,由红色的十字架。数据到达目的地,绿色箭头显示,通过收发器N1, N3,陶瓷。
4.1。DPA协议
每一个收发器都有硬件配置文件(HWP)。分配HWP收发器使其控制通过消息与DPA(直接外围访问)协议(13]。因为这个协议,可以构建一个网络组成的240收发器,和收发器可以控制通过发送特定格式(表中的数据1)。
NADR(节点地址)的地址0 x00协调员和0 x01-0xef其他接收器和PNUM(外围)0 x03 eepm (SPI, 0 x0c UART,等。PCMD(外围命令)指定只有使用外围的类型;HWPID(硬件配置ID)唯一确定外围设备的功能。如果使用0 xffff号码,任何HW配置文件上执行的命令。PDATA(外围数据)是一个可选56-byte领域额外的命令参数。
4.2。自定义分区处理程序
创建自己的逻辑的收发器、自定义分区使用处理程序,即。,it uses code written in C, which can be used to define custom user periphery and set up its behavior during received a DPA command with this periphery’s ID and the ID of the respective command. Using the DPA handler, it is also possible to expand the set of the HW groups described above, and thus it enables the filtering of control message for the groups of peripheries of the respective type.
4.3。FRC
快速响应命令(FRC)是一种特殊的协调员DPA边缘,使发送一个命令,可以处理所有的接收器网络。收发处理命令的那一刻,它存储的响应消息中的特定位置和它穿过整个网络数据和收集个人收发器的响应。如果我们需要从所有的接收器获得相同的信息,那就是,在我们的例子中,输入从一个检测器的汽车停车位,FRC的使用是非常实用,因为它不需要单独发送给每一个收发器,但发送一个命令就够了。这积极的影响不仅传输的数据量,还需要得到响应的时间。英国财务报告理事会通过DPA协议(表发出命令2)。
用户数据项不需要由所有FRC的命令,如果不使用,它必须被一个2字节的值为00.00。发送命令可以被发送选择性(0 x02)命令,这使得它可以发送命令只选择收发器,这之间的数据字段定义ID和用户数据条目。
选中的收发器可以通过指定30-byte二进制信息。IQRF网络,可以有最多240个收发器,它对应于30个字节,即。,240位。如果各自的位的值为1,该命令将被发送到相应的收发器。否则(0)的价值,收发器将不计入处理命令的。
收发器的初始配置和创建IQRF网络,有必要使用CK-USB-04K程序员和IQRF IDE开发接口。这也是很有必要的硬件配置文件协调员和单个节点。
到新创建的项目中,作者必须添加的HW概要文件和DPA自定义处理程序FRC命令检测传感器的状态在停车位上。硬件配置文件属于插件部分和DPA自定义处理程序源码部分。考虑到插入DPA处理程序是用C编写格式的源文件,该文件必须被编译十六进制格式,因此它可以上传收发器。后将第一个收发器插入到程序员和电脑连接到一个USB端口,在“项目”窗口中“TR配置”一节,插入的配置设置收发器可以被打开。通信收发器,有必要设置相同的通信通道(通常是52)的“操作系统”选项卡。接下来,在“HWP”部分,选择过程FRC的命令的协调和使用自定义分区处理程序为每个节点必须启用。在“安全”选项卡中,可以设置密码和通讯加密(图8)。
编程后所有的接收器和将它们插入到DK-EVAL-04A测试模块或者通过连接自定义模块需要根据收发器连接模式(图调整9),对收发器是由正确的电压和访问重置键按钮,通过连接协调员到CK-USB-04K程序员,可以创建一个IQRF网络。
如果一个红色LED闪烁在连接电源后,它意味着没有以前的成键存储在内存中。否则,需要手动黏结按重置测试模块和用户按钮然后释放重置按钮。绿色LED闪烁后,用户按钮必须被释放。擦除数据结合的协调员,IQMESH网络管理器,这是一个IQRF IDE计划的一部分,必须使用。为此,按“清除所有债券”按钮。之后,按下“债券”按钮,协调员开始寻找一个新的节点,在十秒的框架,结合必须由用户按下按钮确认各自的测试模块。重复这个过程,所有节点必须保税协调员。在成键时,所有节点必须在通信的协调员。焊接完成后,相应的节点放在最后的位置,通过单击“发现”按钮IQMESH网络管理器,创建IQMESH网络拓扑。它可以“MapView”选项卡(图中看到的一样10)。
4.4。IQRF网关
创建的IQRF网络需要一个网关传输数据到数据库通过互联网/云。为了最好的兼容性和技术支持,一块板电脑UpBoard一直使用它,树莓π相比,提供了更好的性能在英特尔Atom处理器,以及更高的内存容量,并且不需要一个操作系统上安装一个外部记忆卡,它可以造成潜在的问题会同机械连接器。UpBoard还用于英特尔®RealSense™机器人开发工具包和具有以下特点:英特尔®Atom™x5-Z8350 SoC机载DDR3L 4 GB内存机载eMMC存储64 GB千兆局域网×1,USB 2.0×4, USB 3.0×1, HDMI×15 v直流40针GPIO×1DSI / eDP×1MIPI-CSI×1
考虑到技术支持的可用性,Ubilinux OS已经选择了智能停车系统。选择迷你电脑为控制IQRF网络和服务通过互联网连接整个应用程序和数据库。由于这些理由,IQRF协调员必须使用一个可用的连接减少UpBoard GPIO管脚,和相应的公用事业与IQRF通信网络和数据库必须安装。为UpBoard和IQRF之间的信息交换网络,MQTT代理已经使用。管理中,我们选择一个web应用程序对IQRF守护进程和环境NodeRED为编程IQRF网络维护服务。对于IQRF网关我们使用以下软件设置。MQTT代理,我们决定使用蚊子和mosquito-clients包。此外,dirmngr服务器用于证书管理。IQRF网关守护进程包作为一个开源IQRF网关解决方案被广泛应用于这一领域,它也支持通过覆盆子,Belagone,传统的PC和其他人。节点。js open-source server platform was used for code execution; for programming of IQRF network jobs, a database management, a NodeRED, was utilized.
4.5。Android地理围墙
最后一个组件用于提出的解决方案是Android地理围墙服务,是提醒司机对停车场内的移动应用程序的可用性。这个服务使用移动电话的功能来确定当前位置使用GPS,已知的WIFI网络的可用性,和距离移动运营商的BTS基于移动网络的信号强度。使用服务,首先,需要进入一个特定地方的纬度和经度(停车场)和圆的半径为中心的坐标。以这种方式创建的圈子叫做geofence,然后它检测通知或其他操作,如打开蓝牙和关闭手机的铃声。情况的通知可以设置定义的手机进入一个圆(我们使用这通知的解决方案),或者如果它离开圆或在这呆一段时间。每一个Android用户可以有100 geofences(圆圈)在所有应用程序在手机上注册。如果手机的几个geofences位于十字路口,它可以为他们每个人单独执行操作,或可用性的一个通知多个geofences(停车场),每个可以发送到中心的距离,计算差异的两个GPS坐标(电话和geofence)。
5。实现系统功能的关键
在5.1节,上面描述的解决方案,包括使用IQRF网络和NodeRED和Android应用程序的主要组件是详细记录。
5.1。车辆检测
车辆检测是实现通过微处理器- 9250磁传感器,这是通过I2C总线连接的Arduino迷你微处理器单元(图11)。
与传感器通信,MPU9250_asukiaaa。h被使用,因为它使一个简单的维护磁力的传感器。在最初的建立之后,测量值存储为一个引用,然后与当前测量值在500 -毫秒间隔(在初始化期间,停车位必须是空的)。测量值转移到串口的功能为目的的检查传感器和检查测量值。看到下面的主程序代码使磁力的传感器的通信:无效循环(){如果(start){延迟(5000);}mySensor.magUpdate ();mX = mySensor.magX ();我= mySensor.magY ();mZ = mySensor.magZ ();如果(start) {initSensor ();开始= false;}系列。println (“magX:“+字符串(mX));系列。println (“maxY:“+字符串(我));系列。println (“magZ:“+字符串(mZ));testSensor ();以(" ");/ /添加一个空行延迟(500);}
如果检测到金属物体(车辆)的距离和的价值观在任何轴超出给定的限制,数码输出发信号的存在。每次车辆检测和随后离开停车位,新的rest值保存为参照,以减少自发的或错误的检测造成的长期变化的磁场强度。车辆检测的实现通过磁场的变化描述如下。空白testSensor () {deltaMx = abs (normalMx-mX);deltaMy = abs (normalMy-mY);deltaMz = abs (normalMz-mZ);系列。println (“deltaMx:“+字符串(deltaMx));系列。println (“deltaMy:“+字符串(deltaMy));系列。println (“deltaMz:“+字符串(deltaMz));如果(deltaMx > 7 | | deltaMy > 7 | | deltaMz > 7) {系列。println(“汽车存在”);digitalWrite(13日高);检测= true;}其他的{系列。println(“汽车不存在”);低digitalWrite(13日);如果(检测){开始= true;检测= false;}}}
Arduino的数字输出模块连接到IQRF收发器,它提供了单个传感器连接到IQMESH网络。
5.2。停车场与NodeRED
因为它已经提到,数据库通信不仅在手机应用程序也通过NodeRED迷你电脑。更清晰,单个程序流分成单个IQRF_Request选项卡。命令发送到IQRF网络,来自IQRF IQRF_Response处理响应网络,重火力点与重火力点数据库,门操作入口和出口门,并保留维护用户保留。
5.3。IQRF_Request
程序流IQRF_Request(图12)使用谎言2到5项目节点,发送请求来打开或关闭入口或出口门。通过连接的请求来自其他选项卡(灰色箭头的线)。
单个请求是通过自定义函数用JavaScript实现的。DPA命令IQRF网络(代码:创建一个请求一个IQRF网络)。因为身体没有门,优化目的的应用,模拟的命令通过打开或关闭一个红色LED IQRF协调员(入口门)和绿色(退出门)。在实践中,LED将取代一个数字输出,发送命令到大门口。var data = {类型:“原始”,要求:{nadr:“0 x0000”,pnum:“0 x06”,pcmd:“0 x01”,hwpid:“0 xffff”,pdata:“”,},超时:1000}msg.payload =数据;返回味精;
5.4。门
沟通本身及其采购,门是整个建筑的一个重要组成部分。门工艺流程分为两个部分。第一部分控制入口门,其他控件出口门(图13)。
第一个流与门节点开始,那就是,事实上,一个侦听器,手表门数据库中的条目。它遵循与开关1的值(打开门)和继续GateEntranceOpen第二路径节点。下一个节点是车辆通过时间延迟(传感器检测车辆的门空间是它的一部分),然后继续流链接GateEntranceClose并设置门项目的值在数据库中为0。在这种情况下,开关确保门不开后再数据库中的值改变时添加0的值,所以需要的路径1,没有其他项目节点连接。打开入口大门后,智能手机的ID,要求门打开存储在reservationID项目。这个ID是预订的记录相比,如果找到一个有效的预订,是删除。时间延迟后,reservationID项由ResetReservID重置。
第二个流从GateID开始节点,不断检查数据库GateID项的变化。到这个项目,智能手机的手机应用程序保存ID注册在停车场(它有一个记录carInPark)和发送一个请求打开出口门。程序继续IQRF_Request链接,打开出口门通过GateExitOpen节点。延时后的车辆通过,门关闭再次通过GateExitClose链接。流继续从数据库加载CarInPark物品并将他们的JSON格式。这些数据被传递到FirebaseConvert函数(代码:寻找和传递项目ID删除),,从智能手机ID存储在GlobalContext中,搜索记录在数据库中通过DeleteValue节点和删除记录。程序的最后一个步骤是gateID项重置。
5.5。预订
在这个流的情况下,一个部门分成两部分已经完成(图14)。每一分钟,检查预定长度,第一部分,如果超过期限,预订被移除。另一部分检查司机的预订进入停车场,如果存在这样的一个条目,它被删除。
每一分钟,注入节点从数据库加载预订,并将它们转换成JSON。传递的数据FirebaseConvert(代码:查看预订超时)函数,检查每一个预定的长度,如果超过期限,并将各自的预订删除。如果找到预订,应该删除,继续第二切换路径。否则,它继续第一路径,程序结束。var响应= msg.payload;var数据= " ";var nic = 1;var data1 = response.split (“{”) .toString ();var l = data1.length;(我= 0;< l;我+ +){var = data1。substring(我+ 1);如果(s = = " \ ") {}else if (s = = " {") {}else if (s = =“}”) {}其他{data =数据+ s;}}var allmsg = data.split (−“);l = allmsg.length;(我= 1,< l;我+ +){var data1 = allmsg[我].split (“:”);var fh =方法(data1 [4]);var调频=方法(data1 [5]);var = new日期();var h = date.getHours () + 1;var m = date.getMinutes ();varδ= (h∗60 + m)−(fh∗60 + fm);如果(δ> 60){var cesta = "停车场/ parking1 /预订/−”+ data1 [0];node.send ({childpath: cesta});}其他{node.send({载荷:网卡});}}返回;
如前所述,当打开入口的屏障,手机ID是写入reservationID条目。其状态的变化由ResourceID监控节点,开始第二部分的流。手机ID存储在一个全局变量,并且所有预订从数据库读取,转换为JSON格式和传递到ReservationConvert(代码:删除司机停车)预订功能,比较数据库中的记录与存储手机ID。当找到匹配项,删除的条目。开关执行相同的功能与前面的情况。var响应= msg.payload;var reservationID = global.get (“reservationID”);var数据= " ";var data1 = response.split (“{”) .toString ();var l = data1.length;(我= 0;< l;我+ +){var = data1。substring(我+ 1);如果(s = = " \ ") {}else if (s = = " {") {}else if (s = = " {") {}其他{data =数据+ s;}}var allmsg = data.split (−“);var al = allmsg.length;(i = 1;我<艾尔,我+ +){var data3 = allmsg[我].split (", ");var androidID = data3 [1]。substring (10, data3 [1] . length);/ parking1 /预订/ var路径= "停车场”+data3 [2]。substring (data3 [2] . length);如果(androidID = = reservationID) {node.send ({childpath:路径});其他{node.send({载荷:1});}}返回;
5.6。智能手机应用程序
为了测试和验证,一个Android应用程序开发。这个程序可以在屏幕上控制所有的功能,所以控制用户友好的和简单的。函数开始,利用简单的图标,所以司机不开车时被迫阅读上下文菜单。所有的功能和意义的概述个人图标所代表的形象。
5.7。附近的一个停车场的自动检测
如章节4.5所述,附近的一个停车场的自动检测是通过地理围墙采购服务这个目的,使用常量类。它包含参数,比如创建一个geofence (GPS坐标和半径)。使用一个散列映射,可以创建几个geofences仅仅通过添加一个名称和坐标通过另一个命令。LANDMARKS.put (……));(代码:设置geofence参数)。公共类常量{公共静态最终浮GEOFENCE_RADIUS_IN_METERS = 1000;公共静态最终HashMap <字符串,LatLng >地标= new HashMap <字符串,LatLng > ();静态{/ /停车1地标性建筑。put(“1”,新LatLng (50.420860, 16.185796);}}
通过调用populateGeofenceList MainActivity()方法,创建自定义geofence(代码:创建geofence)。公共空间populateGeofenceList () {(地图。条目<字符串,LatLng >条目:Constants.LANDMARKS.entrySet ()) {mGeofenceList。添加(新Geofence.Builder ()setRequestId (entry.getKey ())setCircularRegion (.latitude entry.getValue (),.longitude entry.getValue (),Constants.GEOFENCE_RADIUS_IN_米)setExpirationDuration (Geofence NEVER_EXPIRE)。setTransitionTypes (Geofence.GEOFENCE_ TRANSITION_ENTER)build ());}}
GeofenceTransitionsIntentService类随后创建一个通知渠道,它使用通知司机与一个通知就可以进入停车场内创建geofence(图15)。
5.8。导航到停车场
运行导航,应用使用谷歌Android API和谷歌地图,使运行一个地图在以下模式:显示地图在给定的地方,给定的缩放级别寻找一个地方,在地图上显示它导航与所选择的交通工具(汽车、自行车和步行)显示在谷歌街景服务的全景视图
跑地图,首先需要创建一个“意图”对象和指定模式的地图将被打开。意图包含一个特殊的字符串(URI),准确地指定要求的动作。创建的目的后,活动开始由startActivity()方法。正如你所看到的在下面的代码(代码:创建意图和运行地图活动),目的是通过创建URI,它定义了行动的类型作为一组GPS导航坐标。随后,意图是注射包,以确保加工的谷歌地图。公共空间startNavigationButtonHandler(查看视图){Uri gmmIntentUri = Uri.parse (google.navigation: q = 50.475367, 16.179489);意图mapIntent = new意图(意图。ACTION_VIEW gmmIntentUri);mapIntent.setPackage (“com.google.android.apps.maps”);startActivity (mapIntent);}
5.9。关于停车场占用的信息
可用的信息数量和占用停车位被NodeRED到重火力点数据库中保存,在Android应用程序,创建数据库的实例:FirebaseDatabase数据库= FirebaseDatabase.getInstance(),连同参考它的个别项目:DatabaseReference myRef…= database.getReference(“停车场/ parking1 /………”)。这是紧随其后的是侦听器执行相应的操作每一次值的任何变化值监测。公共空间readFreePlaces () {myRefFplaces。addValueEventListener(新ValueEventListener () {@Override公共空间onDataChange (@NonNull DataSnapshot DataSnapshot) {.toString地方= dataSnapshot.getValue () ();int pl = Integer.parseInt(地方);int cr = (int) (pl−主义);Fplaces.setText (String.valueOf (cr));}@Override公共空虚虚(@NonNull DatabaseError DatabaseError) {地方=“错误”;}});
在每次改变可用的停车位,上面的方法(代码:设置侦听器改变很多免费的停车位)设置textView值通过setText方法主要活动,所以这个按钮总是包含当前数量的可用空间在停车场。点击这个按钮,运行一个新的活动。它包含列表视图,它通知司机对当前占用个人的停车场停车位。同样的运行活动也进入停车场后请求打开入口门,所以司机概述可用的空间。为此,应用程序使用,类似于前面的情况下,存储在数据库中的数据的变化监测的侦听器。个人的数据占用空间的形式存储在数据库中通过NodeRED字符串“0000110100110010”,其中包含16位:“1”或“0”。如果给定位置的值为“1”,这意味着空间占用。否则,可用的空间。getOccupancy()方法(基于数据库代码:填写一个文本字段数据)在这个活动充满入住率[]数组的值“免费”或“占领”。公共空间getOccupancy () {for (int i = 0;我+ +){< 8;System.out.println(的地方。substring(我+ 1));如果地方。substring(我+ 1).equals(“0”)){入住率[我]=“免费”;}如果地方。substring(我+ 1).equals(" 1 ")){入住率[我]=“占领”;}如果地方。substring(我+ 8 + 9).equals(“0”)){占用我+ 8 =“免费”;}如果地方。substring(我+ 8 + 9).equals(" 1 ")){占用我+ 8 =“占领”;}数字[我]= i + 1;}}
之后,这些值传递给个人textView适配器使用列表视图中(代码:填写文本框和设置字体颜色基于内容),如图像(图所示16)。观点看来,公众视线getView (int我ViewGroup ViewGroup) {视图= getLayoutInflater () .inflate(出来。customlayout, null);TextView tvNumbers = view.findViewById (R.id.tvNumbers);TextView tvOccupancy = view.findViewById (R.id.tvOccupancy);TextView tvOccupancy1 = view.findViewById (R.id.tvOccupancy1);tvNumbers.setText (String.valueOf(数字[我]));tvOccupancy.setText (String.valueOf(入住率[我]));tvOccupancy1.setText (String.valueOf(占用(i + 8)));如果入住率[我].equals(“自由”)){tvOccupancy.setTextColor (Color.parseColor (" # 00 ff00 "));}如果入住率[我].equals(“占领”)){tvOccupancy.setTextColor (Color.parseColor (“# ff0000 "));}如果(占用(i + 8) .equals(“自由”)){tvOccupancy1.setTextColor (Color.parseColor (" # 00 ff00 "));}如果(占用(i + 8) .equals(“占领”)){tvOccupancy1.setTextColor (Color.parseColor (“# ff0000 "));}返回视图;}}
5.10。创建一个停车位的预订
每个司机能使一个短期预定一个停车位。为此,应用程序使用的预订。java类,它有三个属性:id-item ID生成的数据库重火力点androidID-unique 64位数字生成的Android操作系统创建好长时间保留
在创建预订之前,基于Android ID,这个应用程序检查用户是否已经保存在数据库(有一个有效的预订或已经在停车场)(14)样品,如果有任何空间可供预订的停车场(很多免费的spaces-number有效预订)。如果一个预订是可能的,它要求新项目的数据库id: id = myRefRes.push () .getKey ()。然后创建一个新的预订类的实例:myRefRes.child (id) .setValue(预订;最后,这个新创建的实例存储在数据库(图17):myRefRes.child (id) .setValue(预订)(代码:确定用户的预订)的状态。公共空间onDataChange (DataSnapshot快照){主义= snapshot.getChildrenCount ();updateCountReservation ();resIndicator = false;(DataSnapshot postSnapshot: snapshot.getChildren ()) {预订后= postSnapshot.getValue (Reservation.class);字符串resCheck = post.getAndroidID ();如果(resCheck.equals (androidID)) {resIndicator = true;}}}
预订的状态也定期监控通过NodeRED迷你电脑,如果超过预定的时间限制,它是自动从数据库中删除。预订也删除如果一个司机在一个有效的预订到达停车场,发送一个请求打开入口门。从数据库中删除预订的过程描述。
5.11。打开入口/出口门
打开入口/出口门,再应用使用重火力点数据库,其中包含两个项目:门:它可以包含两个值:1和0(入口门打开/关闭)gateID:汽车在停车场存在,用户的应用节省androidID谁想打开出口门
这个应用程序包含CarInPark。java类,,同样的预订。java类,三个属性:id-item ID生成的数据库重火力点androidID-unique 64位数字生成的Android操作系统到达时间在停车场
一样的要求创建一个预订,在应用需求打开门,首先检查车辆是否目前出现在停车场(有记录在数据库)通过androidID。然后,通过比较两个GPC坐标,它检查是否最大距离不会超过智能手机的门。如果这些条件得到满足,通过输入“1”的值重火力点的门项目数据库,NodeRED促成,入口门是开着的。然后,它遵循与请求一个新的id保存数据库中的条目:字符串id = myRefCar.push () .getKey ();然后,创建CarInPark类的新实例:CarInPark = new CarInPark (id、androidID时间);最后,项目保存在数据库:myRefCar.child (id) .setValue (carInPark)(图18)。使用NodeRED关闭大门,之后,一个潜在的预订属于司机进入停车场被删除。
如果车辆在停车场(数据库中的用户androidID) androidID保存在gateID项目,基于这一行动,NodeRED打开退出门,删除相应用户的记录。打开和关闭的过程描述了停车场使用NodeRED盖茨6.3章。
6。讨论
使用磁力的飞行员操作期间,车辆检测传感器测试两个阶段。在第一阶段,自发的检测测试已经完成。在第二个阶段,各种大小的测试检测车辆之后。第一阶段的测试,一个Arduino模块程序修改计算车辆检测。段的测试进行了24小时,每秒执行检查两次。传感器被放置和固定它在任何方向移动是不可能的。172800年24小时,检查被执行,只有四个检测是错误的,与2.3%的错误率。
在第二个阶段,正确检测5个尺寸不同的车辆(丰田雅力士,Škoda外形,Škoda Octavia结合,雪铁龙神经兮兮的,和日产Navara)进行了测试。每辆车被三十次磁力的传感器。检测成功率很很高已经只有一个有缺陷的检测,这发生在最小的车辆(丰田雅力士)。
附近的停车场自动检测进行了在过去的两个星期。第一周,为选择合适的测试geofence半径,所以司机会得到一个信息一个可用的停车场在时间和能够轻松应对这些信息。一周的测试后,被选为最合适的半径1000米。因为前面描述的延迟,司机在城市交通信息500到800米在停车场。第二周之前,设置合适的半径后,在10公里的路线进行了测试。这条路线,五geofences设置。十个司机推这条路线总共十倍,这意味着500测试被执行。在三种情况下,通知没有收到,在四种情况下,司机收到通知在距离200米从停车场。这意味着1.4%的错误率。
成功采用的重要因素之一的停车场是经济效率的解决方案。传统的金融成本和复杂的解决方案,已在相关作品,肯定是高于低成本解决方案基于迷你电脑。最终的成本也受单个组件的选择,所以解决方案的最终成本并不高。近似零售价格,购买系统的各个组件,下面的列表进行了总结:微控制器- 9250 (3€)Arduino迷你(2€)IQRF tr - 72 d(€14日)电池(€19日)UbBoard-mini PC (90€)入口的屏障(€606)
7所示。结论
提出的解决方案已被用于试点部署和使用的解决方案是商业,其增强的功能需要。在当前状态中,因为时间是车辆进入停车场时保存在数据库中,应用程序能够计算停车费用如果价格关税被添加。商业使用,它将需要实现一种支付停车费用,可以直接使用停车机放置在停车场或实现一个连接到支付网关应用程序。它也会还适合开发iOS应用程序,以便iPhone用户可以使用该系统。另一个选择是开发一个web应用程序与系统进行通信。应用程序将在智能手机浏览器直接运行,因此,该系统将是跨平台的。大多数系统部分和移动应用设计的方式将允许未来发展更多的功能。结构的数据存储在数据库中可以添加额外的停车场,并自动停车场可用性检测使显示通知关于多个停车场。
因此,一些修改后,系统可以使用,例如,永久的停车场,也偶尔在大事件。考虑它的低费用,该系统不仅可以帮助司机解决他们的问题和寻找空的停车位,提高城镇和城市的交通,但它也可以帮助司机避免处理问题支付停车费,尤其是在公开停车场停车的机器。
数据可用性
测量数据用于支持本研究的发现可以从相应的作者。
的利益冲突
作者宣称没有利益冲突。
确认
这项工作是由一个特定的研究项目,信息和管理学院,大学Hradec Kralove,捷克共和国。我们要感谢h . Svecova太太,一个博士生,和j .先生殿,一个研究生,教师的管理和信息,大学Hradec Kralove,实际验证的解决方案和密切合作解决方案。