毕业设计- 基于单片机与GPS+GSM的车辆定位跟踪系统

news/2024/5/14 16:52:12/文章来源:https://blog.csdn.net/m0_71572576/article/details/127101673

文章目录

  • 0 前言
  • 1 简介
  • 2 主要器件
  • 3 实现效果
  • 4 硬件设计
    • Maduino Zero A9G GPRS/GPSk开发板这款低功耗A9G
    • 使用SIM800/900和NEO-6M GPS模块的基于Arduino的GPS跟踪系统
  • 5 软件说明
    • 使用Arduino的基于GPS+GSM的车辆跟踪系统
    • GPS+GSM的车辆跟踪系统的代码
  • 6 最后


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 基于单片机与GPS+GMS的车辆定位跟踪系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md


1 简介

本项目使用Arduino开发板制作基于GPS和GSM的车辆跟踪系统。市场上大多数车辆跟踪系统的价格都比较高。所以,我决定自制一套跟踪系统。车辆跟踪系统会将位置连同谷歌地图坐标一起发送到手机,您可以随时请求位置并在手机上的谷歌地图上查看具体位置。

与双向GPS通信系统相比,这是一种更便宜的解决方案,双向GPS通信系统通过GPS卫星进行双向通信。本文仅使用一个GPS设备,然后使用GSM调制解调器实现双向通信。GSM调制解调器使用2G网络,用于设备和手机之间的通信。

2 主要器件

该项目使用了GSM/GPRS/GPS模块A9G。该设备非常小,可以安装在任何地方,并且可以使用3.7V锂离子电池进行操作。该电路板基于Atmel的32位ATSAMD21控制器,可以使用Arduino IDE进行编程。

还可以使用Arduino UNO开发板和Neo-6M GPS模块以及SIM800/900 GSM模块来制作这个项目。但这会使设备尺寸变大。如果您想使用4G连接,您可以使用SIM7600 4G LTE调制解调器模块。

第一种方法使用的组件列表

  • Maduino Zero GPRS/GPS开发板
  • 3.7V、1000毫安锂离子电池

第二种方法使用的组件列表

  • Arduino UNO开发板
  • 1602 LCD显示屏
  • SIM800/900 GSM模块
  • Neo-6M GPS模块
  • 10K电位器
  • 连接跳线
  • 面包板

3 实现效果

可以发送短信以获取位置。因此,在您的手机上打开短信,然后输入Arduino Zero开发板中使用的SIM卡的电话号码。之后,输入“Location”一词,然后发送。

在这里插入图片描述

稍后,串口监视器将显示短信接收状态,并告知日期时间和手机号码。然后,您将在手机上收到一条带有纬度经度坐标的短信。同时您还将收到一个指向谷歌地图的链接。您可以单击该链接并使用谷歌地图打开。
在这里插入图片描述

在这里插入图片描述

4 硬件设计

Maduino Zero A9G GPRS/GPSk开发板这款低功耗A9G

GSM+GPS+GPRS模块集成了32位Atmel的SAMD21微控制器。开发板的正面和背面如下图所示。
在这里插入图片描述

A9G GSM GPS开发板是由Ai-Thinker制造。该模块可通过Micro USB端口进行编程,并可通过3.7V锂离子电池供电。它有一个开关来打开和关闭。数字输入输出引脚可用于连接任何其他模块或传感器。

Arduino使用的是8位控制器,但该开发板使用的是32位Atmel ATSAMD21G18控制器,因此使得设备运行速度更快。它有一个电压调节器IC来调整电压。同样,有两根天线,一根是GSM天线,另一根是GPS天线。该模块一个2G调制解调器,因此根据频段只能使用2G的SIM卡。它还有一个Micro-SD端口。您还可以使用SD卡以文本格式保存数据。

使用SIM800/900和NEO-6M GPS模块的基于Arduino的GPS跟踪系统

使用Arduino UNO开发板、SIM900或SIM800 GSM模块以及NEO-6M GPS模块也可以完成相同的项目。电路中还新增了一个LCD用于显示状态。
在这里插入图片描述
以下是使用SIM800/900 GSM模块和NEO-6M GPS模块的跟踪系统的代码。这段代码稍微小一点,需要稍微修改一下,比如更换手机号。

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
// The TinyGPS++ object
TinyGPSPlus gps;
int temp=0,i;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
String stringVal = "";
void setup(){Serial.begin(9600);ss.begin(GPSBaud);lcd.begin(16,2);pinMode(13,OUTPUT);digitalWrite(13,LOW);lcd.print("Vehicle Tracking");lcd.setCursor(0,1);lcd.print("    System      ");delay(2000);gsm_init();lcd.clear();  Serial.println("AT+CNMI=2,2,0,0,0");lcd.print("GPS Initializing");lcd.setCursor(0,1);lcd.print("  No GPS Range  "); delay(2000);lcd.clear();lcd.print("GPS Range Found");lcd.setCursor(0,1);lcd.print("GPS is Ready");delay(2000);lcd.clear();lcd.print("System Ready");temp=0;
}void loop()
{ 
serialEvent();while(temp){while (ss.available() > 0){gps.encode(ss.read());if (gps.location.isUpdated()){temp=0;digitalWrite(13,HIGH);tracking();} if(!temp)break;  }}digitalWrite(13,LOW);
}
void serialEvent()
{while(Serial.available()>0){ if(Serial.find("Track Vehicle")){temp=1;break;}else{temp=0;}}
}
void gsm_init()
{lcd.clear();lcd.print("Finding Module..");boolean at_flag=1;while(at_flag){Serial.println("AT");delay(1);while(Serial.available()>0){if(Serial.find("OK"))at_flag=0;}delay(1000);}lcd.clear();lcd.print("Module Connected..");delay(1000);lcd.clear();lcd.print("Disabling ECHO");boolean echo_flag=1;while(echo_flag){Serial.println("ATE0");while(Serial.available()>0){if(Serial.find("OK"))echo_flag=0;}delay(1000);}lcd.clear();lcd.print("Echo OFF");delay(1000);lcd.clear();lcd.print("Finding Network..");boolean net_flag=1;while(net_flag){Serial.println("AT+CPIN?");while(Serial.available()>0){if(Serial.find("+CPIN: READY"))net_flag=0;}delay(1000);}lcd.clear();lcd.print("Network Found..");delay(1000);lcd.clear();
}
void init_sms()
{Serial.println("AT+CMGF=1");delay(400);Serial.println("AT+CMGS=\"850xxxxxxx\"");   // use your 10 digit cell no. heredelay(400);
}
void send_data(String message)
{Serial.print(message);delay(200);
}
void send_sms()
{Serial.write(26);
}
void lcd_status()
{lcd.clear();lcd.print("Message Sent");delay(2000);lcd.clear();lcd.print("System Ready");return;
}
void tracking()
{init_sms();send_data("Vehicle Tracking Alert:");Serial.println(" "); send_data("Your Vehicle Current Location is:");Serial.println(" "); Serial.print("Latitude: ");Serial.print(gps.location.lat(), 6);Serial.print("\n Longitude: ");Serial.println(gps.location.lng(), 6);// https://www.google.com/maps/@8.2630696,77.3022699,14zSerial.print("https://www.google.com/maps/@");Serial.print(gps.location.lat(), 6);Serial.print(',');Serial.print(gps.location.lng(), 6);Serial.print(",14z");send_sms();delay(2000);lcd_status();
}

5 软件说明

使用Arduino的基于GPS+GSM的车辆跟踪系统

除了连接电池外,您不需要任何外部硬件部件。上面解释了所有的理论部分,现在让我们设置Arduino IDE。

Arduino IDE没有预装对SAMD开发板的支持。因此,您需要先将开发板添加到Arduino IDE。所以,转到板管理器查询Arduino Zero。

在这里插入图片描述
然后安装32 bit ARM Cortex Board。在硬件部分,将Micro USB电缆连接到Maduino Zero开发板,电缆的另一端连接到计算机的USB端口。

现在转到Tools菜单,在这里你会找到Arduino SAMD开发板。然后从列表中选择对应的串口号。
在这里插入图片描述

GPS+GSM的车辆跟踪系统的代码

与其他GSM GPS模块的Arduino代码相比,它有点不同。AT命令AT+GPS=1打开电路板的GPS功能。AT+LOCATION =2命令检索GPS位置作为纬度和经度。

#include<string.h>#define DEBUG trueint PWR_KEY = 9;
int RST_KEY = 6;
int LOW_PWR_KEY = 5;String msg = String("");
int SmsContentFlag = 0;
String mob;
String loct;
void setup()
{pinMode(PWR_KEY, OUTPUT);pinMode(RST_KEY, OUTPUT);pinMode(LOW_PWR_KEY, OUTPUT);digitalWrite(RST_KEY, LOW);digitalWrite(LOW_PWR_KEY, HIGH);digitalWrite(PWR_KEY, HIGH);//      String msg = String("");//    int SmsContentFlag = 0;SerialUSB.begin(115200);Serial1.begin(115200);//modulePowerOn();delay(2000);SerialUSB.println("Checking Module...");int i = 1;String res;while (i) {Serial1.println("AT");while (Serial1.available() > 0) {if (Serial1.find("OK"))i = 0;}delay(500);}SerialUSB.println("Module Connected");//GprsTextModeSMS();SerialUSB.print("Text Mode: ");i = 1;while (i) {Serial1.println("AT+CMGF=1\r");while (Serial1.available() > 0) {if (Serial1.find("OK"))i = 0;}delay(500);}SerialUSB.println("ON");Serial1.println("AT+GPS=1");SerialUSB.println("GPS Intializing...");delay(5000);SerialUSB.println("GPS Initialized");SerialUSB.flush();i = 1;String str;while (i) {Serial1.println("AT+LOCATION=2");delay(100);while (Serial1.available() <= 0);if (Serial1.find("AT+LOCATION=2")) {str = Serial1.readString();//SerialUSB.println(str);i = 0;}delay(500);}loct = str.substring(4, 23);SerialUSB.print("Location: ");SerialUSB.println(loct);//while(1);SerialUSB.println("Send sms to get the location");
}void loop()
{char SerialInByte;if (Serial1.available()){//char SerialInByte;SerialInByte = (unsigned char)Serial1.read();if ( SerialInByte == 13 ) //0x0D{ProcessGprsMsg();}if ( SerialInByte == 10 ){}else{//EN: store the current character in the message string buffermsg += String(SerialInByte);}}if (SmsContentFlag == 1) {int i;SerialUSB.println("Flag Cleared");SerialUSB.print("Message: ");SerialUSB.println(msg);if (msg.indexOf("Location")) {SerialUSB.println("Message Received");i = msg.indexOf("+91");//SerialUSB.print("index: ");//SerialUSB.println(i);//SerialUSB.println(msg[i+1]);i = i + 3;for (int j = 0; j < 10; j++, i++) {mob += msg[i];}SerialUSB.print("Mobile: ");SerialUSB.println(mob);String cmd = "AT+CMGS=\"";cmd += mob;cmd += "\"";cmd += "\r";Serial1.println(cmd);delay(100);Serial1.print("Your Vehicle Current Location ");Serial1.print(loct);Serial1.print("\n");Serial1.print("Check Map: \n");Serial1.print(" https://www.google.com/maps/@");Serial1.println(loct);Serial1.println((char)26);delay(1000);}ClearGprsMsg();SmsContentFlag = 0;msg.remove(0);mob.remove(0);}delay(100);
}// EN: Request Text Mode for SMS messaging
void GprsTextModeSMS()
{Serial1.println( "AT+CMGF=1" );
}void GprsReadSmsStore( String SmsStorePos )
{// Serial.print( "GprsReadSmsStore for storePos " );// Serial.println( SmsStorePos );Serial1.print( "AT+CMGR=" );Serial1.println( SmsStorePos );
}// EN: Clear the GPRS shield message buffer
void ClearGprsMsg()
{msg = "";
}// EN: interpret the GPRS shield message and act appropiately
void ProcessGprsMsg()
{SerialUSB.println("");//  Serial.print( "GPRS Message: [" );SerialUSB.print( msg );//    Serial.println( "]" );if ( msg.indexOf( "Call Ready" ) >= 0 ){SerialUSB.println( "*** GPRS Shield registered on Mobile Network ***" );GprsTextModeSMS();}//EN: unsolicited message received when getting a SMS messageif ( msg.indexOf( "+CIEV" ) >= 0 ){SerialUSB.println( "*** SMS Received ***" );}//EN: SMS store readed through UART (result of GprsReadSmsStore request)if ( msg.indexOf( "+CMT:" ) >= 0 ){// EN: Next message will contains the BODY of SMSSmsContentFlag = 1;// EN: Following lines are essentiel to not clear the flag!//ClearGprsMsg();return;}// EN: +CMGR message just before indicate that the following GRPS Shield message//     (this message) will contains the SMS bodyif ( SmsContentFlag == 1 ){SerialUSB.println( "*** SMS MESSAGE CONTENT ***" );SerialUSB.println( msg );SerialUSB.println( "*** END OF SMS MESSAGE ***" );//ProcessSms( msg );}/*ClearGprsMsg();//EN: Always clear the flagSmsContentFlag = 0; */
}

6 最后

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_15995.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA中使用Git

目录 一、IDEA中使用Git 配置Git settings ——>Version Control——>Git 点击Test测试版本号 下载gitee插件 配置账户 第一种方式&#xff1a;账号密码 第二种方式&#xff1a;通过Token令牌 分享单个项目 组员需要拿到项目的SSH地址 二、总结 一、IDEA中使用G…

万物互联时代到来,猿代码领衔先计算机赋数据化转型

社会经济的高速发展推动着各行各业进行转型升级&#xff0c;而数字经济则是当前社会经济发展的强大驱动。根据相关报道显示&#xff0c;早在多年前我国数字经济规模总量便达到万亿元规模&#xff0c;占2016年全年GDP比重的30&#xff05;。数字经济的飞速发张需要强劲算力的支撑…

wxpython设计GUI:grid控件实现显示表单数据功能,同时实现界面的上下翻页以及跳转功能

grid控件实现显示表单数据功能&#xff0c;同时实现界面的上下翻页以及跳转功能。 1. 效果展示 2. 代码实现 #!/usr/bin/env python # -*- coding: utf-8 -*- # Author: Logintern09########################################################################### ## Python …

【图像分割】基于matlab直方图的自适应阈值方法分割前景与背景【含Matlab源码 2144期】

一、一种基于直方图的实时自适应阈值分割方法简介 1 引言 在交通管理中&#xff0c;为了获得车辆的运动数据&#xff0c;需要对交通视频进行实时监测&#xff0c;从监测图像序列中检测出运动对象&#xff0c;并对运动对象进行分析处理&#xff0c;从而获得车辆和行人的运动数据…

EMQX Cloud 影子服务:便捷数据缓存服务,加速 IoT 应用开发

全托管 MQTT 消息云服务 EMQX Cloud 可以帮助用户轻松将各类物联网设备连接上云&#xff0c;提供与各类第三方服务的数据集成&#xff0c;助力用户进行高效的数据处理、存储与分析。 为了实现更加便捷的物联网数据处理&#xff0c;进一步简化用户构建物联网应用的开发流程&…

好心情精神心理科:抑郁症,真的会让你变丑!

有患者向好心情平台咨询&#xff1a;“抑郁症多年&#xff0c;我总感觉自己变丑了&#xff0c;脸色也不咋好看&#xff0c;这到底是我的心理作用&#xff0c;还是容貌真有变化呢&#xff1f;” 变丑这件事&#xff0c;不致命&#xff0c;但对于很多人来说&#xff0c;却似乎难…

net转java学习笔记-sqlserver的问题记录

最近公司有个.net项目&#xff0c;用的不是mysql是sqlserver&#xff0c;中间遇到几次问题记录下。 1.navicat连接sqlserver失败 百度了一下这个是缺少了驱动&#xff0c;其实navicat自带了这个驱动&#xff0c;没有安装而已。 打开Navicat的安装路径&#xff0c;Navicat自带s…

qsort:我很强,了解一下(详解过程)

了解qsort&#xff0c;以及模拟实现&#x1f391;情境引入&#x1f388;qsort&#x1f4d6;qsort的头文件&#x1f4c4;开场&#x1f511;qsort的参数&#x1f914;为什么可以对任意类型排序呢&#xff1f;&#x1f4dc;参数参数①参数②参数③最难的参数④&#x1f383;qsort应…

一个完全纯净的windows资源站

网址:https://hellowindows.cn/ hello Windows呢是一个纯净的Windows系统下载网站&#xff0c;从已经淘汰的xp到新推出的win11&#xff0c;大部分的系统版本都涵盖了 且都是中文版本,更加方便 windows server版本也包括在内哦

17 -- 排序算法之希尔排序

希尔排序算法介绍: 希尔排序是希尔于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。 写入排序法的基本思想: 希尔排序十八记录按下标的一定增量分组,对每组使用直接插入算法排序:随着增量逐渐…

JAVA毕设项目京东仓库管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)

JAVA毕设项目京东仓库管理系统&#xff08;VueMybatisMavenMysqlsprnigSpringMVC&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&am…

好心情精神心理科医生:哪些精神类药物会影响你的睡眠?

患病后的你是否也因有这种顾虑&#xff0c;迟迟不敢吃药或选择停药呢&#xff1f; 到底哪些精神科药物会引起睡眠问题呢&#xff1f;资料显示&#xff0c;凡是提高多巴胺能和去甲肾上腺素能的药物&#xff0c;都有可能引起睡眠问题。今天&#xff0c;好心情小编带大家一起来看…

G:\r\tcga_example-master\scripts 生存分析 tcgaexample jimmy

G:\r\tcga_example-master\scripts library(survival) library(survminer)## 批量生存分析 使用 coxph 回归方法 # http://www.sthda.com/english/wiki/cox-proportional-hazards-model colnames(phe) head(phe) #event中1 表示存活&#xff08;终点事件&#xff09; #htt…

15Spring Boot整合MyBatis

MyBatis 是一个半自动化的 ORM 框架&#xff0c;所谓半自动化是指 MyBatis 只支持将数据库查出的数据映射到 POJO 实体类上&#xff0c;而实体到数据库的映射则需要我们自己编写 SQL 语句实现&#xff0c;相较于Hibernate 这种完全自动化的框架&#xff0c;Mybatis 更加灵活&am…

windows下Redis多实例部署

当存在多个项目的时候&#xff0c;需要同时部署时&#xff0c;且只有一台服务器时&#xff0c;哪么就需要部署Redis多个实例&#xff0c;原理很简单&#xff0c;多个Redis服务运行使用不同的配置及数据管理。 具体操作如下&#xff1a; 1、进入redis安装目录&#xff0c;找到…

zerotier的planet服务器(根服务器)-搭建教程

应用场景介绍: 利用阿里云服务器,搭建根服务器,把不同局域网打通,实现内网穿透,远程控制。 准备工具: 1、服务端:云服务器(有公网IP)Centos 7.62、客户端: 工控机(或者家里电脑)(Linux) ,公司电脑Windows 搭建私有化 ZeroTier步骤: 一、云服务器上安装服务操作…

python如何制作并安装自建包?

一、依赖 首先检查python是否安装了wheel、setuptools包,没有则使用pip安装pip install wheel --force-reinstallpip install setuptools --force-reinstall 二、准备文件在create_package文件夹下,制作自定义包(myPackage): 在该包下,有aa.py和bb.py两个模块, 同时该包…

win11怎么回去win10?四种方法教你!

win11系统与旧系统相比&#xff0c;在这些方面进行了重大更新&#xff1a;新的开始菜单、通知中心、重新设计的任务栏以及更加美观的圆角窗口&#xff0c;确实给用户带来了不一样的体验。然而&#xff0c;win11有时漏洞频出、BUG不断和兼容性不佳的问题&#xff0c;让很多升级w…

(附源码)springboot企业合同管理系统 毕业设计 161456

springboot企业合同管理系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对企业合同等问…

安装CUDA、anaconda、pytorch

文章目录前言一、CUDA安装1.查看CUDA版本2.安装CUDA2.1 下载CUDA2.2 安装CUDA2.3 测试CUDA安装成功二、anaconda安装1.anaconda下载2.anaconda环境变量配置3.测试anaconda安装成功3.anaconda常见命令操作3.1 清华镜像3.2 切换虚拟环境三、pytorch安装1.anaconda下pytorch安装2.…