- 基于Arduino的车辆跟踪系统所需的组件:
- GSM模块如何用于跟踪位置:
- GSM和GPS与Arduino接口的电路说明:
- 使用Arduino的基于GSM和GPS的车辆跟踪系统-工作
- GAM和GPS与Arduino代码接口以跟踪车辆位置
车辆跟踪系统非常普遍地用于车队管理和资产跟踪应用中。今天,这些系统不仅可以跟踪车辆的位置,还可以报告速度,甚至可以远程控制它。通常,车辆跟踪是一个以纬度和经度 (GPS坐标)形式跟踪车辆位置的过程 。 GPS坐标是位置的值。该系统对于户外应用非常有效。这种 车辆跟踪系统项目 广泛地用于跟踪出租车/出租车,失窃的车辆,学校/大学公交车等。该 车辆跟踪系统 还可以用于 使用GPS和GSM跟踪车辆,还可以用作事故检测警报系统,士兵跟踪系统等等,只需在硬件和软件上进行少量更改即可。
我们之前也建立了许多其他类型的车辆跟踪系统,如果您有兴趣,可以查看一下
- 使用Arduino的GPS车辆跟踪和事故警报
- 使用Arduino和ESP8266在Google Maps上进行车辆跟踪
- 使用MSP430的GPS车辆跟踪和事故警报
- 使用Arduino的基于LoRa的GPS车辆跟踪
- 使用SIM800和Arduino的不带GPS的位置跟踪器
基于Arduino的车辆跟踪系统所需的组件:
要使用Arduino构建简单的车辆跟踪系统,我们将需要以下组件。
- Arduino UNO
- GSM模块
- GPS模块
- 16x2 LCD
- 电源供应
- 连接线
- 10 K锅
GSM模块如何用于跟踪位置:
GPS代表全球定位系统,用于以精确的UTC时间(协调世界时)检测地球上任何位置的纬度和经度。GPS模块是我们的车辆跟踪系统项目的主要组成部分。该设备每隔一秒钟从卫星接收带有时间和日期的坐标。
GPS模块实时发送与跟踪位置有关的数据,并以NMEA格式发送大量数据(请参见下面的屏幕截图)。NMEA格式包含几个句子,其中我们只需要一个句子。这句话从$ GPGGA开始,包含坐标,时间和其他有用的信息。该GPGGA被称为“全球定位系统修订数据”。在此处了解有关读取GPS数据及其字符串的更多信息。
我们可以通过计算字符串中的逗号来从$ GPGGA字符串中提取坐标。假设您找到$ GPGGA字符串并将其存储在数组中,则可以在两个逗号后找到“纬度”,在四个逗号后找到“经度”。现在,这些纬度和经度可以放在其他数组中。
以下是$ GPGGA字符串及其说明:
$ GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,, * 47
$ GPGGA,HHMMSS.SSS,纬度,N,经度,E,FQ,NOS,HDP,高度,M,高度,M,校验和数据
识别码 |
描述 |
$ GPGGA |
全球定位系统修复数据 |
卫生管理系统 |
时间以小时,分钟,秒和毫秒的格式表示。 |
纬度 |
纬度(坐标) |
ñ |
方向N =北,S =南 |
经度 |
经度(坐标) |
Ë |
方向E =东,W =西 |
FQ |
修正质量数据 |
NOS |
正在使用的卫星数 |
HPD |
水平精度稀释 |
高度 |
海拔高度 |
中号 |
仪表 |
高度 |
高度 |
校验和 |
校验和数据 |
GSM和GPS与Arduino接口的电路说明:
该车辆跟踪系统项目的电路连接很简单,并在图像belwo中显示。 GPS模块的Tx引脚直接连接到Arduino的10号数字引脚。通过使用此处的软件串行库,我们允许在引脚10和11上进行串行通信,并将它们分别设置为Rx和Tx,并使GPS模块的Rx引脚保持打开状态。默认情况下,Arduino的引脚0和1用于串行通信,但是通过使用SoftwareSerial库,我们可以允许在Arduino的其他数字引脚上进行串行通信。 12伏电源用于为GPS模块供电。
GSM模块的Tx和Rx引脚直接连接到Arduino的Rx和Tx引脚。GSM模块也由12v电源供电。LCD的可选数据引脚D4,D5,D6和D7连接到Arduino的引脚5、4、3和2。LCD的命令引脚RS和EN与Arduino的2号和3号引脚相连,而RW引脚直接与地相连。电位计还用于设置LCD的对比度或亮度。
使用Arduino的基于GSM和GPS的车辆跟踪系统-工作
在该项目中,Arduino用于通过GPS接收器和GSM模块控制整个过程。GPS接收器用于检测车辆的坐标,GSM模块用于通过SMS将坐标发送给用户。可选的16x2 LCD也用于显示状态消息或坐标。我们已经使用了GPS模块SKG13BL和GSM模块SIM900A。
编程后准备好硬件后,我们可以将其安装在车辆中并加电。然后,我们只需要向安装在我们车辆中的系统发送SMS,即“跟踪车辆”。我们还可以使用一些前缀(#)或后缀(*)(例如#Track Vehicle *)来正确识别字符串的开始和结束,就像我们在以下项目中所做的那样:基于GSM的家庭自动化和无线公告板
发送的消息由连接到系统的GSM模块接收,并将消息数据发送到Arduino。Arduino读取它并从整个消息中提取主要消息。然后将其与Arduino中的预定义消息进行比较。如果发生任何匹配,则Arduino将通过从GPS模块数据中提取$ GPGGA String来读取坐标(上述GPS工作原理),然后使用GSM模块将其发送给用户。该消息包含车辆位置的坐标。
GAM和GPS与Arduino代码接口以跟踪车辆位置
在编程的第一部分中,我们包括库并定义用于LCD和软件串行通信的引脚。还使用数组定义一些变量以存储数据。软件串行库用于允许在引脚10和11上进行串行通信。
#包括
在这里,数组 str 用于存储从GSM模块接收到的消息,而 gpsString 用于存储GPS字符串。 char * test =” $ GPGGA” 用于比较我们需要的正确字符串。
初始化后,我们在设置功能中初始化了串行通信,LCD,GSM和GPS模块,并在LCD上显示了欢迎消息。
void setup(){lcd.begin(16,2); Serial.begin(9600); gps.begin(9600); lcd.print(“车辆跟踪”); lcd.setCursor(0,1);………..
在循环功能中,我们接收消息和GPS字符串。
void loop(){serialEvent(); if(temp){get_gps(); tracking(); }}
函数 void init_sms 和 void send_sms() 用于初始化和发送消息。在 init_sms 函数中使用正确的10位手机号码。
函数 void get_gps() 已用于从接收的字符串中提取坐标。
函数 void gpsEvent() 用于将GPS数据接收到Arduino中。
函数 void serialEvent() 用于接收来自GSM的消息,并将接收到的消息与预定义消息进行比较(跟踪车辆)。
void serialEvent(){while(Serial.available()){if(Serial.find(“ Track Vehicle”)){temp = 1; 打破; }…………
初始化函数 “ gsm_init() ” 用于初始化和配置GSM模块,首先,通过向GSM模块发送“ AT”命令来检查GSM模块是否已连接。如果收到响应OK,则表示已准备就绪。系统会一直检查模块,直到模块准备就绪或收到“确定”为止。然后通过发送ATE0命令关闭ECHO,否则GSM模块将回显所有命令。然后最后通过“ AT + CPIN?”检查网络可用性。命令,如果插入的卡是SIM卡并且存在PIN,则给出响应+ CPIN:READY。还要反复检查,直到找到网络。可以通过下面的视频清楚地了解这一点。
在下面的代码部分中检查以上所有功能。