Arduino GPS Clock
Arduino GPS Clock
There
are many GPS satellites around the Earth which are used to provide the exact
location of any place. Along with the location
coordinates (Latitude and Longitude), it also provide other data like time, date,
altitude, direction tracking angle etc. We have already learned to read
this GPS data from Satellite using Arduino. So we are going to make a GPS clock using the ‘Time and Date’ data from the GPS satellite. GPS Updated Clock is very
accurate and provides the real time data with precision of milliseconds.
Components:
·
Arduino Uno
·
GPS Module
·
16x2 LCD
·
Connecting wires
·
Power supply
Working Explanation:
GPS module sends the data in NMEA format, see the
output of GPS data in below screenshot. NMEA format consist several sentences, in which we need one
sentence to extract the Date and Time. This sentence starts from $GPRMC and contains
the coordinates, time and other useful information. This $GPRMC is referred to Recommended
minimum specific GPS/Transit data, and the length of this string is about 70 characters. We have previously extracted $GPGGA string
in Vehicle
Tracking System to find the Latitude and Longitude
Coordinates.
Here is the GPS output:
And $GPRMC
string mainly contains velocity, time, date and position
$GPRMC,123519.000,A,7791.0381,N,06727.4434,E,022.4,084.4,230394,003.1,W*6A
$GPRMC,HHMMSS.SSS,A,latitude,N,longitude,E,speed,angle,date,MV,W,CMD
Identifier
|
Description
|
RMC
|
Recommended
Minimum sentence C
|
HHMMSS.SSS
|
Time
in hour minute seconds and milliseconds format.
|
A
|
Status
// A=active and V= void
|
Latitude
|
Latitude
49 deg. 16.45 min. North
|
N
|
Direction
N=North, S=South
|
Longitude
|
Longitude(Coordinate)
|
E
|
Direction
E= East, W=West
|
Speed
|
speed
in knots
|
Angle
|
Tracking
angle in degrees
|
Date
|
DATE
in UTC
|
MV
|
Magnetic
Variation
|
W
|
Direction
of variation E/W
|
CMD
(*6A)
|
Checksum
Data
|
We can
extract Time and Date from $GPRMC string by counting the commas in the string. With the help of Arduino and programming, we find
$GPRMC string and stores it in an array, then Time (24 hours format) can be found after one comma and Date can be found
after nine commas.
Time and date are further
saved in strings.
A GPS
satellite provides Time and date in Coordinated Universal Time (UTC), so
we need to convert it accordingly. To
convert in according to Indian time, we have added 5:30 in UTC time, as Indian time is 5 and half hours
ahead of UTC/GMT.
Circuit Diagram:
Circuit
connections of Arduino GPS Clock are simple. Arduino is used to control the whole process, it
receives the GPS data from satellite through GPS module, extracts the Date and
Time from the $GPRMC string and shows it on LCD.
Data
pins D4, D5, D6, D7 of 16x2 LCD are connected to pin no. 5, 4 , 3, 2 of Arduino and command pin RS
and EN of LCD are connected to pin 7 and 6 of Arduino respectively. GPS receiver Module Tx pin is connected to Rx pin
10 of Arduino.
Ground PIN of Arduino and GPS
are connected with each other. Here
we have used SKG13BL GPS module, operating at 9800 bps baud rate. Arduino is also configured at 9800 bps baud rate
by using function “Serial.begin(9800)”.
Programming Explanation:
In
programming part first we include libraries and define pins for LCD &
software serial communication. Also
define some variable with arrays for storing data. By using Software
Serial Library here, we have allowed serial
communication on pin 10 and 11, and made them Rx and Tx respectively. By default Pin 0 and 1 of Arduino are used for
serial communication but by using SoftwareSerial library, we can
allow serial communication on other digital pins of the Arduino
#include<LiquidCrystal.h>
LiquidCrystal
lcd(7, 6, 5, 4, 3, 2);
#include
<SoftwareSerial.h>
SoftwareSerial
Serial1(10, 11); // RX, TX
... ....
.... ....
After
it we have initialized serial communication and LCD in setup function
and showed a welcome message on LCD.
Then
we have extracted time and date form the received string.
while(x<str_lenth)
{
if(str[x]==',')
comma++;
if(comma==1)
{
x++;
UTC_hour+=str[x++];
... ....
.... ....
And
then convert time and date to decimal and modify it to Indian time (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();
... ....
.... ....
Demo & Code
Arduino GPS Clock
Reviewed by XXX
on
สิงหาคม 27, 2560
Rating:
ไม่มีความคิดเห็น