传感器——ATGM332D 北斗定位模块

news/2024/10/22 14:42:58/

NO.8 模型用GPS测速仪(已完成)(更新第二版本)

这个是用显示屏显示的

北斗传感器型号
定位精度2.5m
GPS模块VCC————–Arduino的5v
GPS模块GND————–Arduino的GND
GPS模块TXD————–Arduino的D0(数字IO 0)
GPS模块RXD不接
GPS模块PPS不接
其中GPS的天线记得要接,并且要室外放置,因为GPS模块是室外定位的,室内没有卫星信号。在室外时需要大概1分钟左右的时间来获取当前位置数据。
Arduino自测程序:

void setup()    
{Serial.begin(9600);           //定义波特率9600Serial.println("Wating...");
}void loop()     
{while (Serial.available()) {   Serial.write(Serial.read());//收到GPS数据则通过串口输出}
}

GPS数据

一组数据如下:

$GNGGA,,,,,,0,00,25.5,,,,,,*64
$GNGLL,,,,,,V,N*7A
$GPGSA,A,1,,,,,,,,,,,,,25.5,25.5,25.5*02
$BDGSA,A,1,,,,,,,,,,,,,25.5,25.5,25.5*13
$GPGSV,1,1,00*79
$BDGSV,1,1,00*68
$GNRMC,,V,,,,,,,,,,N*4D
$GNVTG,,,,,,,,,N*2E
$GNZDA,,,,,,*56
$GPTXT,01,01,01,ANTENNA OK*35$GNGGA,084852.000,2236.9453,N,11408.4790,E,1,05,3.1,89.7,M,0.0,M,,*48
$GNGLL,2236.9453,N,11408.4790,E,084852.000,A,A*4C
$GPGSA,A,3,10,18,31,,,,,,,,,,6.3,3.1,5.4*3E
$BDGSA,A,3,06,07,,,,,,,,,,,6.3,3.1,5.4*24
$GPGSV,3,1,09,10,78,325,24,12,36,064,,14,26,307,,18,67,146,27*71
$GPGSV,3,2,09,21,15,188,,24,13,043,,25,55,119,,31,36,247,30*7F
$GPGSV,3,3,09,32,42,334,*43
$BDGSV,1,1,02,06,68,055,27,07,82,211,31*6A
$GNRMC,084852.000,A,2236.9453,N,11408.4790,E,0.53,292.44,141216,,,A*7
5
$GNVTG,292.44,T,,M,0.53,N,0.98,K,A*2D
$GNZDA,084852.000,14,12,2016,00,00*48
$GPTXT,01,01,01,ANTENNA OK*35

数据里面我们看到三种数据类型
GN、GP、BD 分别代表双模模式、GPS 模式、北斗模式
(1) $GPGGA (GPS 定位信息)
GPGGA
(2) $GPGLL (地理定位信息)
GPGLL
(3)$GPGSA (当前卫星信息)
GPGSA
(4) $GPGSV(可见卫星信息)
GPGSV
(5) $GPRMC(最简定位信息)这个可用信息较多
GPRMC
(6) $GPVTG(地面速度信息)
GPVTG
(7)天线状态输出
$GPTXT,01,01,01,ANTENNA OK*35
Ok 代表天线已经检测到,open 代表天线断开。

关于热启动温启动冷启动的阐述
冷启动是指在一个陌生的环境下启动GPS 直到GPS 和周围卫星联系并且计算出
坐标的启动过程。以下几种情况开机均属冷启动:
1、初次使用时;
2、电池耗尽导致星历信息丢失时;
3、关机状态下将接收机移动1000 公里以上距离。也就是说冷启动是通过硬件方
式的强制性启动,因为距离上次操作GPS 已经把内部的定位信息清除掉,GPS 接
收机失去卫星参数,或者已经存在的参数和实际接收到卫星参数相差太多,导致
导航仪无法工作,必须重新获得卫星提供的坐标数据,所以说车辆从地库里启动
导航百分百算冷启动,这也是从地库出来搜星时间长的原因。
温启动是指距离上次定位时间超过2 个小时的启动,搜星定位时间介于冷启动和
热启动之间。如果您前一日使用过GPS 定位,那么次日的第一次启动就属于温启
动,启动后会显示上次的位置信息。因为上次关机前的经纬度和高度已知,但由
于关机时间过长,星历发生了变化,以前的卫星接受不到了,参数中的若干颗卫
星已经和GPS 接收机失去了联系,需要继续搜星补充位置信息,所以搜星的时间
要长于热启动,短于冷启动。
热启动是指在上次关机的地方没有过多移动启动GPS,但距离上次定位时间必须
小于2

GPS解析程序:

#define GpsSerial  Serial
#define DebugSerial Serial
int L = 13; //LED指示灯引脚struct
{char GPS_Buffer[80];bool isGetData;     //是否获取到GPS数据bool isParseData;   //是否解析完成char UTCTime[11];       //UTC时间char latitude[11];      //纬度char N_S[2];        //N/Schar longitude[12];     //经度char E_W[2];        //E/Wbool isUsefull;     //定位信息是否有效
} Save_Data;const unsigned int gpsRxBufferLength = 600;
char gpsRxBuffer[gpsRxBufferLength];
unsigned int ii = 0;void setup()    //初始化内容
{GpsSerial.begin(9600);          //定义波特率9600,和我们店铺的GPS模块输出的波特率一致DebugSerial.begin(9600);DebugSerial.println("ILoveMCU.taobao.com");DebugSerial.println("Wating...");Save_Data.isGetData = false;Save_Data.isParseData = false;Save_Data.isUsefull = false;
}void loop()     //主循环
{gpsRead();  //获取GPS数据parseGpsBuffer();//解析GPS数据printGpsBuffer();//输出解析后的数据// DebugSerial.println("\r\n\r\nloop\r\n\r\n");
}void errorLog(int num)
{DebugSerial.print("ERROR");DebugSerial.println(num);while (1){digitalWrite(L, HIGH);delay(300);digitalWrite(L, LOW);delay(300);}
}void printGpsBuffer()
{if (Save_Data.isParseData){Save_Data.isParseData = false;DebugSerial.print("Save_Data.UTCTime = ");DebugSerial.println(Save_Data.UTCTime);if(Save_Data.isUsefull){Save_Data.isUsefull = false;DebugSerial.print("Save_Data.latitude = ");DebugSerial.println(Save_Data.latitude);DebugSerial.print("Save_Data.N_S = ");DebugSerial.println(Save_Data.N_S);DebugSerial.print("Save_Data.longitude = ");DebugSerial.println(Save_Data.longitude);DebugSerial.print("Save_Data.E_W = ");DebugSerial.println(Save_Data.E_W);}else{DebugSerial.println("GPS DATA is not usefull!");}}
}void parseGpsBuffer()
{char *subString;char *subStringNext;if (Save_Data.isGetData){Save_Data.isGetData = false;DebugSerial.println("**************");DebugSerial.println(Save_Data.GPS_Buffer);for (int i = 0 ; i <= 6 ; i++){if (i == 0){if ((subString = strstr(Save_Data.GPS_Buffer, ",")) == NULL)errorLog(1);    //解析错误}else{subString++;if ((subStringNext = strstr(subString, ",")) != NULL){char usefullBuffer[2]; switch(i){case 1:memcpy(Save_Data.UTCTime, subString, subStringNext - subString);break;   //获取UTC时间case 2:memcpy(usefullBuffer, subString, subStringNext - subString);break;   //获取UTC时间case 3:memcpy(Save_Data.latitude, subString, subStringNext - subString);break;  //获取纬度信息case 4:memcpy(Save_Data.N_S, subString, subStringNext - subString);break;   //获取N/Scase 5:memcpy(Save_Data.longitude, subString, subStringNext - subString);break; //获取纬度信息case 6:memcpy(Save_Data.E_W, subString, subStringNext - subString);break;   //获取E/Wdefault:break;}subString = subStringNext;Save_Data.isParseData = true;if(usefullBuffer[0] == 'A')Save_Data.isUsefull = true;else if(usefullBuffer[0] == 'V')Save_Data.isUsefull = false;}else{errorLog(2);    //解析错误}}}}
}void gpsRead() {while (GpsSerial.available()){gpsRxBuffer[ii++] = GpsSerial.read();if (ii == gpsRxBufferLength)clrGpsRxBuffer();}char* GPS_BufferHead;char* GPS_BufferTail;if ((GPS_BufferHead = strstr(gpsRxBuffer, "$GPRMC,")) != NULL || (GPS_BufferHead = strstr(gpsRxBuffer, "$GNRMC,")) != NULL ){if (((GPS_BufferTail = strstr(GPS_BufferHead, "\r\n")) != NULL) && (GPS_BufferTail > GPS_BufferHead)){memcpy(Save_Data.GPS_Buffer, GPS_BufferHead, GPS_BufferTail - GPS_BufferHead);Save_Data.isGetData = true;clrGpsRxBuffer();}}
}void clrGpsRxBuffer(void)
{memset(gpsRxBuffer, 0, gpsRxBufferLength);      //清空ii = 0;
}

http://www.ppmy.cn/news/283549.html

相关文章

Ubuntu下vim/vi编辑时遇到E325: ATTENTION Found a swap file by the name ./.backu.sh.swp警告提示解决办法

Ubuntu下vim/vi编辑遇到E325: ATTENTION警告提示解决办法 一、问题描述二、解决问题 叮嘟&#xff01;最近做项目学习用到了Ubuntu&#xff0c;在刚开始的摸索过程踩了不少雷&#xff0c;写篇博客分享一下踩雷经验。 一、问题描述 前些天在修改Redis配置文件redis.conf时遇到了…

TPA3255 classD 音频功放快速设计

概述 TPA325X 系列为TI 公司的集成MOSFET classD 单片音频功率放大器。 有以下几个功能特征: 单边电源供电&#xff1b;体积小&#xff0c;最大功率450W&#xff08;TPA3255,PBTL,THD1%&#xff09;;可选三种架构模式&#xff1a;单端SE模式&#xff08;4.0&#xff09;&…

centos 打开配置文件出错:E325: ATTENTION Found a swap file by the name /etc/vsftpd/.vsftpd.conf.swp

编辑配置文件/etc/vsftpd/vsftpd.conf出错&#xff0c;出现以下提示&#xff1a; E325: ATTENTION Found a swap file by the name “/etc/vsftpd/.vsftpd.conf.swp” owned by: root dated: Sat Oct 14 03:31:17 2017 file name: /etc/vsftpd/vsftpd.conf modified: no …

打开Vi编辑器出现E325: ATTENTION的解决方法

当打开Vi编辑器时出现以下的提示时不要着急 E325: ATTENTION Found a swap file by the name "/etc/.profile.swp" owned by: root dated: Wed Jul 14 10:01:10 2010 file name: /etc/profile modified: YES user name: root host name: zhaoyang-laptop process I…

XC7K325T+TX2深度学习图像处理卡

XC7K325TTX2深度学习图像处理卡M/D-CAP3U是天津雷航光电科技有限公司推出的一款复合加速计算平台&#xff0c;由Xilinx的28nm制程的FPGA — XC7K325T-3FFG900I和NVidia的16nm制程的GPU — TX2互联构成。 产品细节 FPGA的前端接口 支持CameraLink Base输入1路 支持SD-SDI / HD-S…

基于Kintex-7 325T的32通道高速TDC演示方案

SeruTek K732D – 基于Kintex-7 325T的32通道高速TDC演示方案 请搜索“瑟如电子”了解详情 简介 SeruTek K732D是上海瑟如电子科技基于KC705开发板制作的一款32通道TDC演示方案。K732D在单片K7325T上集成了33路时间戳单元、一个Microblaze微控制器、128KB Block SRAM、自校…

python TypeError: %d format: a number is required, not str

记一次Python代码错误… 今天心血来潮,一个pymysql感觉不够我玩的(虽然我是菜鸡),想要研究研究Python MySQL连接池(典型的这山望着那山高),但是遇到一个错误 想了好久 百度了好久 最后发现是我对Python理解还是不够深(粗心)导致的. 全部报错: "D:\package install\Pyth…

视觉SLAM笔记(63) RGB-D 稠密建图

视觉SLAM笔记(63) RGB-D 稠密建图 1. 建立点云地图2. 点云地图3. 其他重建方法1. 建立点云地图 所谓点云,就是由一组离散的点表示的地图 最基本的点包含 x, y, z 三维坐标,也可以带有 r, g, b 的彩色信息 由于 RGB-D 相机提供了彩色图和深度图,很容易根据相机内参来计算 …