top of page

GPS Coordinates and GPS Clock


In this project, we have shown how to interface a GPS neo6M module with Arduino nano, 20x4 LCD display. GPS (global positioning system) coordinates are usually expressed as the combination of latitude and longitude. The GPS coordinates data for longitude, latitude and GPS clock is displayed on the LCD.


GPS Coordinates

GPS coordinates are formed by two components that are a latitude , giving the north-south position, and a longitude, giving the east-west position. Use this map to convert any address in its GPS coordinates. You can also find the location of any GPS coordinates, and geocode its address if available.

clock-Time

  • Local time is the date/time reported by your PC (as seen by your web browser). If your PC clock is accurate to a second then the other time scales displayed above will also be accurate to within one second.

  • UTC, Coordinated Universal Time, popularly known as GMT (Greenwich Mean Time), or Zulu time. Local time differs from UTC by the number of hours of your timezone.

  • GPS clock, Global Positioning System time, is the atomic time scale implemented by the atomic clocks in the GPS ground control stations and the GPS satellites themselves. GPS time was zero at 0h 6-Jan-1980 and since it is not perturbed by leap seconds GPS is now ahead of UTC by 18 seconds.

  • Loran-C, Long Range Navigation time, is an atomic time scale implemented by the atomic clocks in Loran-C chain transmitter sites. Loran time was zero at 0h 1-Jan-1958 and since it is not perturbed by leap seconds it is now ahead of UTC by 27 seconds.

  • TAI, Temps Atomique International, is the international atomic time scale based on a continuous counting of the SI second. TAI is currently ahead of UTC by 37 seconds. TAI is always ahead of GPS by 19 seconds.


Circuit Diagram



Components Required

Arduino Nano - 1 no

LCD 20x4 with I²C module - 1no

NEO6MV2 GPS Module - 1no


NEO6MV2 GPS

The NEO-6MV2 is a GPS (Global Positioning System) module and is used for navigation. The module simply checks its location on earth and provides output data which is longitude and latitude of its position.It is from a family of stand-alone GPS receivers featuring the high performance u-blox 6 positioning engine. These flexible and cost effective receivers offer numerous connectivity options in a miniature (16 x 12.2 x 2.4 mm) package. The compact architecture, power and memory options make NEO-6 modules ideal for battery operated mobile devices with very strict cost and space constraints. Its Innovative design gives NEO-6MV2 excellent navigation performance even in the most challenging environments.

NEO-6MV2 GPS Module Pin Configuration

The module has four output pins and we will describe the function each pin of them below. The powering of module and communication interface is done through these four pins.

Pin Name Description

VCC Positive power pin

RX UART receive pin

TX UART transmit pin

GND Ground

Features and Electrical Characteristics

  • Standalone GPS receiver

  • Anti-jamming technology

  • UART Interface at the output pins (Can use SPI ,I2C and USB by soldering pins to the chip core)

  • Under 1 second time-to-first-fix for hot and aided starts

  • Receiver type: 50 Channels - GPS L1 frequency - SBAS (WAAS, EGNOS, MSAS, GAGAN)

  • Time-To-First-fix: For Cold Start 32s, For Warm Start 23s, For Hot Start <1s

  • Maximum navigation update rate: 5Hz

  • Default baud rate: 9600bps

  • EEPROM with battery backup

  • Sensitivity: -160dBm

  • Supply voltage: 3.6V

  • Maximum DC current at any output: 10mA

  • Operation limits: Gravity-4g, Altitude-50000m, Velocity-500m/s

  • Operating temperature range: -40ºC TO 85°C

Overview of the NEO-6MV2 GPS Module

This module is one of popular GPS modules in the market and is also cheap to buy. The location data provided by it is accurate enough to satisfy most applications. And for it to be included in smart phones and tablets design points out its efficiency. This module is famous among hobbyist and engineers altogether who want to work on applications involving navigation.

How to use the NEO-6MV2 GPS Module

Getting this module to work is very easy. For the application circuit below we have connected the power to board and interfaced the output to the microcontroller UART to get it done.


After circuitry, you need to set the baud rate of the controller matching the module, if it’s not matched you will get error. With baud rate setting done you can read the serial data directly from the module. This data will be longitude and latitude values and the user can play with them as desired.

The raw values provided by the module are cumbersome to read directly and so a simple decimal calculation can be done in programming for getting easy to read values.


Applications

  • GPS application

  • Smart phone and tablets

  • Navigation systems

  • Drones

  • Hobby projects

NEO-6MV2 GPS module Datasheet



Installing Library

To install the library navigate to the Sketch > Include Library > Manage Libraries… Wait for Library Manager to download libraries index and update list of installed libraries.


TinyGPSPlus.h : you need to Download and install the GPS library.

LiquidCrystal_I2C.h : you need to Download and install the LiquidCrystal_I2C library.


After installing the required libraries, copy the following code to your Arduino IDE.



Arduino Code

#include <TinyGPSPlus.h>

#include <SoftwareSerial.h>


static const int RXPin = 4, TXPin = 3;

static const uint32_t GPSBaud = 9600;


// The TinyGPSPlus object

TinyGPSPlus gps;


// The serial connection to the GPS device

SoftwareSerial ss(RXPin, TXPin);


#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display


void setup()

{

Serial.begin(115200);

ss.begin(GPSBaud);

lcd.init(); // initialize the lcd

// Print a message to the LCD.

lcd.backlight();

lcd.setCursor(0,0);

lcd.print(" GPS LOCATION ");

lcd.setCursor(0,1);

lcd.print("LATITUDE, LONGITUDE");

lcd.setCursor(0,2);

lcd.print("and GPS CLOCK ");

delay(5000);

lcd.clear();

}


void loop()

{

// This sketch displays information every time a new sentence is correctly encoded.

while (ss.available() > 0)

if (gps.encode(ss.read()))

displayInfo();


if (millis() > 5000 && gps.charsProcessed() < 10)

{

Serial.println(F("No GPS detected: check wiring."));

while(true);

}

}


void displayInfo()

{

Serial.print(F("Location: "));

if (gps.location.isValid())

{

lcd.setCursor(0,0);

lcd.print("Latitude:");

lcd.setCursor(9,0);

lcd.print(gps.location.lat(), 6);

lcd.setCursor(0,1);

lcd.print("Longitude:");

lcd.setCursor(10,1);

lcd.print(gps.location.lng(), 6);

}

else

{

Serial.print(F("INVALID"));

}


Serial.print(F(" Date/Time: "));

if (gps.date.isValid())

{

lcd.setCursor(0,2);

lcd.print("Date:");

lcd.setCursor(6,2);

lcd.print(gps.date.month());

lcd.print("/");

lcd.print(gps.date.day());

lcd.print(F("/"));

lcd.print(gps.date.year());

}

else

{

Serial.print(F("INVALID"));

}


Serial.print(F(" "));

lcd.setCursor(0,3);

lcd.print("Time:");

if (gps.time.isValid())

{

lcd.setCursor(6,3);

if (gps.time.hour() < 10) lcd.print(F("0"));

lcd.print(gps.time.hour());

lcd.print(F(":"));

if (gps.time.minute() < 10) lcd.print(F("0"));

lcd.print(gps.time.minute());

lcd.print(F(":"));

if (gps.time.second() < 10) lcd.print(F("0"));

lcd.print(gps.time.second());

}

else

{

Serial.print(F("INVALID"));

}


Serial.println();

}



Demo Video


bottom of page