如今,车辆追踪系统变得非常重要,尤其是在车辆被盗的情况下。如果您的车辆中装有GPS系统,则可以跟踪“车辆位置”,它可以帮助警察跟踪被盗车辆。以前,我们已经建立了类似的项目,在该项目中,车辆的位置坐标是通过手机发送的,请在此处检查基于GPS和GSM的基于Arduino的车辆跟踪器。
在这里,我们正在构建车辆跟踪系统的更高级版本,您可以在其中使用Google Maps跟踪车辆。在此项目中,我们会将位置坐标发送到本地服务器,您只需要在计算机或移动设备上打开“网页”,即可在其中找到带有车辆位置坐标的Google地图链接。当您单击该链接时,它将带您进入Google地图,并显示您的车辆位置。在使用Google Maps的车辆跟踪系统中,GPS模块用于获取位置坐标,Wi-Fi模块用于通过Wi-Fi保持向计算机或移动设备发送数据,而Arduino用于使GPS和Wi-Fi相互通信。
这个怎么运作:
要跟踪车辆,我们需要使用GPS模块查找车辆坐标。 GPS模块与卫星连续通信以获取坐标。然后,我们需要使用UART将这些坐标从GPS发送到Arduino 。然后Arduino从GPS接收的数据中提取所需的数据。
在此之前,Arduino将命令发送到Wi-Fi模块ESP8266,以配置和连接到路由器并获取IP地址。之后,Arduino初始化GPS以获取坐标,并且LCD上显示“页面刷新消息”。这意味着,用户需要刷新网页。当用户刷新网页时,Arduino将获取GPS坐标并将其通过Wi-Fi发送到网页(本地服务器),其中包含一些其他信息和Google地图链接。现在,通过单击此链接,用户将使用坐标重定向到Google Maps,然后他/她将在Google Maps的红色位置获得“车辆当前位置”。整个过程在视频末尾正确显示。
所需组件:
- Arduino UNO
- Wi-Fi模块ESP8266
- GPS模块
- USB电缆
- 连接线
- 笔记本电脑
- 电源供应
- 16x2 LCD
- 面包板
- Wi-Fi路由器
电路说明:
“使用Google Maps项目进行车辆跟踪”的电路非常简单,我们主要需要Arduino UNO,GPS模块和ESP8266 Wi-Fi模块。有一个可选的16x2 LCD用于显示状态。该LCD连接到Arduino的14-19(A0-A5)引脚。
GPS模块的Tx引脚直接连接到Arduino的10号数字引脚。通过使用此处的软件串行库,我们允许在引脚10和11上进行串行通信,并将它们分别设置为Rx和Tx,并使GPS模块的Rx引脚保持打开状态。默认情况下,Arduino的引脚0和1用于串行通信,但是通过使用SoftwareSerial库,我们可以允许在Arduino的其他数字引脚上进行串行通信。 12伏适配器用于为GPS模块供电。通过这里学习“如何在Arduino上使用GPS”并获取坐标。
Wi-Fi模块ESP8266的Vcc和GND引脚直接连接到3.3V,而Arduino的GND和CH_PD也连接到3.3V。 ESP8266的Tx和Rx引脚直接连接到Arduino的引脚2和3。这里还使用软件串行库来允许在Arduino的引脚2和3上进行串行通信。我们已经详细介绍了ESP8266 Wi-Fi模块与Arduino的接口,并且在执行此项目之前,请先阅读“如何使用WiFi将数据从Arduino发送到网页”。以下是ESP8266的图片:
ESP8266有两个LED,一个是红色,用于指示电源,另一个是蓝色,即数据通信LED。当ESP通过其Tx引脚发送一些数据时,蓝色LED闪烁。另外,请勿将ESP连接到+5伏电源,否则设备可能会损坏。在此项目中,我们为所有UART通信选择了9600波特率。
用户还可以在串行监视器上以9600的波特率查看Wi-Fi模块ESP8266与Arduino之间的通信:
另外,请查看该项目结尾处的视频,以获取详细的工作过程。
GPS度分到坐标的小数度收敛:
GPS模块接收来自坐标卫星度分格式(ddmm.mmmm)在这里,我们需要的十进制度为搜索的位置格式谷歌地图。因此,首先我们需要使用给定的公式将坐标从度分钟格式转换为十进制度格式。
假设2856.3465(ddmm.mmmm)是我们从GPS模块接收的纬度。现在,前两个数字是度,其余的是分钟。
所以28度是56.3465分钟。
现在在这里,无需将度数部分(28)转换,而仅需通过将60除以将分钟数部分转换为十进制度数:
小数度坐标=度+分钟/ 60
十进制度坐标= 28 + 56.3465 / 60
十进制度坐标= 28 + 0.94
十进制度坐标= 28.94
经度数据将执行相同的过程。我们已使用Arduino Sketch中的上述公式将坐标从度数转换为小数度:
float minut = lat_minut.toFloat(); minut = minut / 60; 浮动度= lat_degree.toFloat(); 纬度=度+分钟;minut = long_minut.toFloat(); minut = minut / 60; degree = long_degree.toFloat(); 对数=度+分;
编程说明:
在此代码中,我们使用SerialSoftware库将ESP8266和GPS模块与Arduino接口。然后,我们为两者定义了不同的引脚,并以9600波特率初始化UART。还包括用于与Arduino接口LCD的LiquidCrystal库。
#包括
之后,我们需要为不同的目的定义或声明变量和字符串。
字符串网页=“”; int i = 0,k = 0; int gps_status = 0; 字符串名称=“
1.姓名:您的姓名
“; // 22字符串dob =”2. DOB:1993年2月12日
“; // 21字符串number =”4.车辆编号:RJ05 XY 4201
“; // 29字符串cordinat =”座标:
“; // 17字符串latitude =”“;字符串logitude =”“;字符串gpsString =”“; char * test =” $ GPGGA“;然后,我们针对不同目的做了一些功能,例如:
获取具有坐标的GPS数据的功能:
void gpsEvent(){gpsString =“”; while(1){while(gps.available()> 0){char inChar =(char)gps.read(); gpsString + = inChar; if(i <7){if(gpsString!= test){i = 0;……………….
从GPS字符串中提取数据并将该数据从十进制分钟格式转换为十进制度格式的功能,如前所述。
voidordinate2dec(){字符串lat_degree =“”; for(i = 18; i <20; i ++)lat_degree + = gpsString; 字符串lat_minut =“”; for(i = 20; i <28; i ++)lat_minut + = gpsString;……………….
向ESP8266发送命令以配置和连接WIFI的功能。
无效connect_wifi(String cmd,int t){int temp = 0,i = 0; while(1){Serial.println(cmd); Serial1.println(cmd); while(Serial1.available()> 0)……………….
void show_coordinate() 函数用于在LCD和串行监视器上显示坐标,而 void get_ip() 函数用于获取IP地址。
无效的Send() 函数用于创建要使用ESP8266发送至网页的信息字符串,而 无效的sendwebdata() 函数用于通过UART将信息字符串发送至网页。
在 空循环 功能中,Arduino持续等待请求表单网页(刷新网页)。
无效loop(){k = 0; Serial.println(“请刷新您的页面”); lcd.setCursor(0,0); lcd.print(“请刷新”); lcd.setCursor(0,1); lcd.print(“您的网页。”); while(k <1000)……………….
检查下面的完整代码。