地球周围有许多GPS卫星,可用于提供任何地方的确切位置。除了位置坐标(纬度和经度)外,它还提供其他数据,例如时间,日期,高度,方向跟踪角等。我们已经学习了使用Arduino从Satellite读取GPS数据。因此,我们将使用来自GPS卫星的“时间和日期”数据制作一个GPS时钟。GPS更新时钟非常准确,可提供毫秒级的实时数据。
组件:
- Arduino Uno
- GPS模块
- 16x2 LCD
- 连接线
- 电源供应
工作说明:
GPS模块以NMEA格式发送数据,请参见下面的屏幕快照中的GPS数据输出。NMEA格式包含几个句子,其中我们需要一个句子来提取日期和时间。这句话从$ GPRMC开始,包含坐标,时间和其他有用的信息。此$ GPRMC称为“推荐的最低特定GPS /运输数据”,该字符串的长度约为70个字符。我们先前已在车辆追踪系统中提取了$ GPGGA字符串以查找经度和纬度坐标。这是GPS输出:
和$ GPRMC字符串主要包含速度,时间,日期和位置
$ GPRMC,123519.000,A,7791.0381,N,06727.4434,E,022.4,084.4,230394,003.1,W * 6 A $ GPRMC,HHMMSS.SSS,A,纬度,N,经度,E,速度,角度,日期, MV,W,CMD
识别码 |
描述 |
RMC |
推荐的最小句子C |
卫生管理系统 |
时间以小时,分钟,秒和毫秒的格式表示。 |
一种 |
状态// A =有效,V =无效 |
纬度 |
纬度49度 16.45分钟 北 |
ñ |
方向N =北,S =南 |
经度 |
经度(坐标) |
Ë |
方向E =东,W =西 |
速度 |
速度结 |
角度 |
跟踪角度(度) |
日期 |
UTC中的DATE |
MV |
磁变化 |
w ^ |
变化方向E / W |
CMD(* 6A) |
校验和数据 |
我们可以通过计算字符串中的逗号来从$ GPRMC字符串中提取时间和日期。在Arduino和编程的帮助下,我们找到$ GPRMC字符串并将其存储在数组中,然后在一个逗号后可以找到时间(24小时格式),在九个逗号后可以找到日期。时间和日期将进一步保存在字符串中。
GPS卫星以协调世界时(UTC)提供时间和日期,因此我们需要进行相应的转换。为了按照印度时间进行换算,我们将UTC时间增加了5:30,因为印度时间比UTC / GMT提前了5个半小时。
电路原理图:
Arduino GPS Clock的电路连接很简单。Arduino用于控制整个过程,它通过GPS模块从卫星接收GPS数据,从$ GPRMC字符串中提取日期和时间,并将其显示在LCD上。
16x2 LCD的数据引脚D4,D5,D6,D7连接到引脚号。Arduino的5、4、3、2和LCD的命令引脚RS和EN分别连接到Arduino的引脚7和6。GPS接收器模块的Tx引脚连接到Arduino的Rx引脚10。Arduino的接地PIN与GPS相互连接。在这里,我们使用了以9800 bps波特率运行的SKG13BL GPS模块。通过使用函数 “ Serial.begin(9800)”, 还以9800 bps的波特率配置了Arduino 。
编程说明:
在编程的第一部分中,我们包括库并定义用于LCD和软件串行通信的引脚。还使用数组定义一些变量以存储数据。通过使用此处的软件串行库,我们允许在引脚10和11上进行串行通信,并将它们分别设置为Rx和Tx。默认情况下,Arduino的引脚0和1用于串行通信,但是通过使用SoftwareSerial库,我们可以允许在Arduino的其他数字引脚上进行串行通信
#包括
之后,我们在 设置 功能中初始化了串行通信和LCD,并在LCD上显示了欢迎信息。
然后我们从接收到的字符串中提取时间和日期。
而(x
然后将时间和日期转换为十进制并将其修改为印度时间(UTC +5:30)
int UTC_hourDec = UTC_hour.toInt(); int UTC_minutDec = UTC_minut.toInt(); int Second = UTC_second.toInt(); int Date = UTC_date.toInt(); int Month = UTC_month.toInt();………..
然后,最后使用 lcd.print 功能在LCD上显示了时间和日期,请检查下面的完整代码。