Skip to content

All about GPS module for Arduino interfacing

Arduino has remained one of the puzzles many people are yet to solve. Are you among the people who are still yet to understand this narrative about Arduino? If so, then you are in the right place. In this article, we will discuss Arduino and, further on, the interaction of Arduino with GPS.

We describe Arduino as an open-source hardware & software company involved in designing and manufacturing microcontroller kits and single-board microcontrollers. These kits are then used to construct various digital devices, but we will get to that later on.

About GPS

GPS is simply the Global Positioning System, a satellite-based navigation system comprising of a network of 24 satellites. GPS is the best navigation system in the world, working 24 hours a day without setup charges or subscription fees. One of the GPS devices utilizes data directly from satellites to locate a point on the earth through trilateration process.

A GPS receiver uses radio signals to trilateral in the measuring of distances. Dedicated RF frequencies receive data sent by satellites directly to the GPS through tiny processors and antennas contained by the GPS modules. The modules antennas then accurately calculate the position and time if they can spot four or more satellites. In addition, we can easily interface Arduino with the GPS for location and positioning.

GPS module for Arduino interfacing

We can do interfacing with any GPS module containing serial communication, but the most popular GPS module is the U-BLOX Neo 6M GPS module. The U-BLOX Neo 6M module only uses four pins: VCC, GND, RX, and TX. Well, this is because the modules send signals over a simple serial RS232 connection, the same protocol used by the Arduino in the writing of the command “Serial.begin”. Simply, the module spits iterative NMEA (National Marine Electronics Association) data strings to the TX pin. NMEA is a standard set protocol shared commonly by all GPS.

Connecting the Arduino GPS module setup

In this connection, there is the usage of an input voltage of +5V from the Arduino’s power side and any of the ground pins. If we use any two pins, the setup works superbly. However, there are several ways that one can achieve this connection. In our design, let’s use pin 3 and pin 4.

One connects the Arduino’s pin 3 to the RX GPS Module’s pin and the Arduino’s pin 4 to the TX pin of the GPS Module. The U-BLOX Neo 6M GPS Module consists of a tiny K833 series 3.3V voltage regulator, which becomes its threshold voltage. SoftwareSerial reads raw data from the GPS for creating a new serial connection and then match the default baud rate of the GPS module you’re using. The “native language” of this GPS is gibberish containing all the information possible for a GPS to provide—for example, time, latitude, longitude, etc. However, there has been development of libraries in such a way that they decode and interpret the string characters automatically. An excellent example of such a library is the TinyGPS++ library.

How is the TinyGPS++ library used?

Concerning Arduino, the most advanced GPS library for making references is (Mikal Hart’s TinyGPS++). After installing this library, set the correct baud rate, RX, and TX pins, and you can now continue.

In any case, if you happen to face trouble in getting data out of your module, plug it at 5V and leave it for about a minute. For GPS modules, you can prolong the “cold start” times. However, some modules have a blinking LED indicator to notify the user that it’s ready and sending data. Always consider such before declaring a device as faulty.

Why use the U-BLOX Neo-6M GPS Module?

neo 6m gps arduino

The U-Blox GPS module is cost-effective, making it very popular. Moreover, it has higher performance compared to other GPS modules since it has a ceramic patch antenna, a backup battery that is conveniently integrable with a wide range of microcontrollers, and an onboard memory chip. The two most popular NEO-6M GPS modules are the GY-GPSV3-NEO and the GY-GPS6MV2. These U-Blox NEO-6M GPS modules consist of quite good engines with high sensitivity, making them better for indoor applications. Furthermore, there exists one compatible rechargeable battery for backup known as the MS621FE and EEPROM for the storage of configuration settings. Because of its inbuilt voltage regulator, this module can work perfectly with a DC input lying between 3.3V and 5.0V.

The heart of the GPS Modules is the U-Blox NEO-6M GPS engine. The NEO-6M module consists of a configurable UART interface for general serial communication, but in this case, the baud rate is 9600. The style of this GPS antenna is different since the GPS signal is right-hand circular–polarized (RHCP), which is quite different from the commonly used whip antennas mainly applied for linear polarized signals. Patch antennas, the most widely used antennas, are flat and generally have a metallic and ceramic body usually mounted on a metal base plate.


For an intelligent performance of the GPS receiver, the position of mounting the antenna is critical. When in use, the patch antenna should be leaning parallel to the geographic horizon to ensure that it has a full-sky view and a direct line of sight, catching as many detectable satellites as possible.

This type can track up to a maximum of 22 satellites on 50 channels, hence achieving the industry’s maximum level of sensitivity. It consumes only a 45mA supply current, and it has a tracking of -161 dB. Unlike some other GPS modules, it can do up to 5 locations informs a second with 2.5m horizontal position accuracy.

What signal does an Arduino code generate?

GPS satellites convey at least two radio signals with low power. The signal travels through the line of vision, hence traveling through such media as c, glass, and clouds, but some solid media will inhibit the signal’s travel. Barriers include buildings and peaks. However, these modern receivers are better as they are more efficient and can track through buildings.

 Information types contained in a signal of the GPS

  • Pseudorandom code

It is an ID code that identifies the information in transmission by the satellite—the satellite page of your device shows which satellites are sharing information with you.

  • Ephemeris data

This data is essential in determining the position of a particular satellite and some other information on the time, the satellite’s health, and the current date.

  • Almanac data

It informs the receiver of the GPS on the location of each satellite at any time of any day and the orbital data for that particular satellite and any other satellite that’s visible within the system.

More about the NEO-6M GPS module

This module type originally had an externally fixed antenna but with no header pins. There is, therefore, a need to 1get it soldered to the other device, say, Arduino, for consistency.

Component information of the NEO-6M GPS module

· The NEO-6M GPS module

The central part of this module is the NEO-6M GPS U-Blox chip. This U-Blox six positioning engine can also brag a TTFF (Time-To-First-Fix) which is below one second. An advantage of using this chip is that it provides a unique feature, Power Saving Mode (PSM), allowing an overall power usage reduction by switching the receiver’s parts ON or OFF selectively. This whole story generally decreases the power consumed by this module to 11mA from 45mA, hence reducing the energy consumed by 34mA. All this makes it suitable and more efficient for these applications that are power-sensitive such as the GPS watch.

The essential information pins of the NEO-6M GPS module chip are further broken down to a “0.1” pitch header, which comprises pins required and actively involved in the entire communication process with the microcontroller through UART. The module above works best for a baud rate of between 4800bps and 230400bps, with the default baud being maintained at 9600bps.

· Position fixing LED indicator on the chip

This NEO-6M GPS module contains an LED that plays a part in the process of indicating the condition of location fix by blinking at different rates, which are state-dependent.

If the LED is not blinking, this means that it is in the process of searching satellites. On the other hand, if it flashes every second, this is simply interpreted as meaning that they have identified position Fix.

· The 3.3Volts LDO Regulator found on the NEO-6M GPS module

The NEO-6M GPS module chip operates on a voltage range of 2.7V-3.6V. The NEO-6M GPS module introduces the MIC5205 extra-low dropout regulator(3V3). The tolerance of its logic pins is 5V, making it easy to interface it with Arduino or some other logic microcontroller rated 5V without including any other converter of a logic level.

· Backup Battery and EEPROM of the module

The designing of the module follows the use of an able dual wire serialized EEPROM of the type HK24C32. It is 4 KB and linked with the NEO-6M GPS chip through a 12C. In addition, a button battery that’s rechargeable is present in the module in which it acts like a capacitor, increasing the general efficiency of the NEO-6M GPS chip. These two features, an EEPROM with a battery, aids in retaining a Battery Backed RAM (BBR). This battery-backed RAM consists of the clock data, module configuration, and data about the latest position (GNSS orbit data). However, this is not intended for the permanent storage of any data.

The battery aids in retaining time and last location, and in the process, TTFF is significantly reduced to 1 second. It hence gives an allowance of faster locks of position. On the other hand, the absence of a battery makes the GPS cold start always, and therefore driving to the GPS lock may take more time. However, on supplying power, the battery automatically charges, and there is maintaining of the data for a maximum of two weeks in the absence of power.

Here is some demonstration of the four pins of the NEO-6M GPS module:

  • GND- stands for ground pin that requires connecting to the Arduino’s GND pin during interfacing.
  • TXD, which is the (Transmitter pin), actively gets involved in serial communication as a core pin.
  • RDX- This is the receiver pin involved in perceiving signals. In simpler terms, it is helpful in serialized communication.
  • VCC- This supplies power to the module. We can achieve the connection by directly connecting it with the 5Volts pin of the Arduino.


arduino nano gps

In simple terms, Arduino refers to an open electronic platform working on the basis of an easy-to-handle software and hardware. For example, inputs such as a Twitter message, a finger pressing a button, and a light on a sensor are easily read on an Arduino board, which later on turns it into a clear output such as turning on of an LED, activation of a motor, printing something online, etc. Furthermore, it is possible to command the Arduino board by sending instructions to this microcontroller mounted on its board. We can achieve all this using the wiring-based Arduino language of programming and Arduino software, namely the (IDE), which is in the center position on processing.

Arduino Uno Pin Description  

We describe Arduino Uno as a simple microcontroller board typically founded on an Atmega328P 8-bit microcontroller that also consists of the Atmega328P. In addition, other constituents such as serialized communication, voltage regulating crystal oscillator, et cetera, support the microcontroller. This Arduino Uno consists of 14 digital input and output pins(only six become the PWM outputs), one barrel power jack, USB connection, six analog input pins, one ICSP head. Finally, six analog input pins reset button.

These 14 digital input and output pins are alternately used as either the input or the output using pin mode(), digital read(), and digital write() functions comprised within Arduino programming. The basis of operation of each pin is 5V, can withstand or take a maximum current of 40mA, and contains an inbuilt chin-up resistor ranging from 20-50 Kilo Ohms, which are usually detached by default. Furthermore, some pins perform specific roles such as the following:

  • Two serial pins, pin 0 (Rx) & pin 1 (Tx)- the Rx pin and Tx pin are both useful in receiving and transmitting TTL serialized data. To work perfectly, you connect them to the corresponding Atmega328 USB /TTL serialized chip.
  • Two external interrupts pin 2 and pin 3- normally, we configure these pins to activate a lower value interrupt, a change in value, or either a rising edge or dropping edge.
  • PWM pins, namely pin 3, pin 5, pin 6, pin 9, and pin 11- The four individual pins give a PWM output that is 8-bit using the analogwrite() function.

The connection of an Arduino Uno to the GPS Module

These four pins have a unique connection of UBLOX and an Arduino in this order:

  • GND(Ground)—GND(Ground)
  • TX—Digital (D3) pin
  • RX —Digital (D4) pin
  • Vcc—3.3V

The JHD162a LCD

The ground

The ground pin in this LCD module.

2nd pin(Vcc)

The power / LCD module (there is a supply of +5V at this pin)


It is the pin involved in contrast adjustment. For example, the terminals of a 10KOhms potentiometer are connected to the +5V and the ground, then linking the sliding pin with the VEE pin to perform this, t. The voltage at this VEE pin describes the contrast. Here, the standard-setting is in the range of 0.4Volts and 0.9Volts.


It stands for the Register select (RS) pin. There are two registers contained in the JHD162A, namely the commands register and the data register. The Logic HIGH of the Register Select pin is essential in selecting a data register, whereas the logic LOW of the Register Select pin selects the commands register. Making the Register Select pin HIGH, then feeding an output into its data lines (DBO to DB7), the input is therefore taken as data, and you display it on the LCD screen. On the other hand, making the Register Select pin LOW then feeding input into its data lines is a command that it should write to an LCD controller, such as positioning the cursor or a purely clean screen or a manuscript.


It stands for read and write modes, respectively. The pin plays a part in the assortment of the read and write modes. The logic HIGH, in this case, stimulates read mode at this pin, whereas Logic LOW, in this case, stimulates write mode.


It is purposely meant for allowing the module of the LCD. Then, a HIGH signal to a LOW signal on the 6th pin enables the module.

7thpin(DBO) to 14thpin(DB7)

These refer to simple data pins through which you can feed commands and also data into the LCD.


It is the backlight LED’s anode. When operated at 5V, there must be a resistor of 560-ohm in a series connection with this pin. The voltage source on the Arduino board (3.3V) can power the backlight led in Arduino-based projects.


It is the cathode of this backlight LED.

Connection of the Arduino Uno with JHD162a LCD

The connection between Arduino and LCD is in the following order:

  • VSS—GND(Ground)
  • VCC—5Volts
  • VEE—10K-Ohms Resistor
  • RS—AO(The analog pin)
  • R/W—ground pin(GND)
  • Connect E to A1
  • Then D to A2
  • Connect D5 to A3
  • Then to D6 to A4
  • Connect D7 to A5
  • Next connect LED+ to VCC
  • Connect LED- to GND(Ground)

Programming of the Arduino

The programming happens with the Arduino IDE. The following is an example of an Arduino program:

#include <LiquidCrystal.h>

// calling the major files and functions

#include <SoftwareSerial.h>

#include <TinyGPS.h>

//long   lat,lon; // create the variable for latitude & longitude object

float lat = 28.5458,lon = 77.1703; // create the variable to represent latitude & longitude object

SoftwareSerial gpsSerial(3,4);//rx,tx

LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);

TinyGPS gps; // create the gps object

void setup(){

Serial.begin(9600); // connect serial

//Serial.println(“The GPS Received Signal:”);

gpsSerial.begin(9600); // connect the gps sensor



void loop(){

    while(gpsSerial.available()){ // check for the gps data

    if(gps.encode( encode the gps data


    gps.f_get_position(&lat,&lon); // get latitude and longitude

    // display position



    lcd.print(“GPS Signal”);

    //Serial.print(“Position: “);











    //Serial.print(” “);







  String latitude = String(lat,6);

    String longitude = String(lon,6);




Reading raw data from the GPS through the micro hornet GPS chip

In the interpretation of raw data from the GPS, there is creation of a new serial connection using SoftwareSerial. Then, there is the matching of the default baud rate of the GPS module. For example, the code below simply outputs to the serial monitor whatever it reads from the GPS, excluding any filtering:

#include <SoftwareSerial.h>

Static cosnt int RXpin = 4, TXPin = 3;

Static const uint32_t GPSBaund = 9600;

// The serial connection to the GPS device

SoftwareSerial ss(RXPin, TXPin)

Void loop()


Serial begin (115200);



Void loop()


//output raw GPS data to the serial monitor

While (ss.available() > 0) {



The serial monitor should then produces a “gibberish” output.

Having gotten the above output, we can now use a library to decode and interpret the output. We can use the tinyGPS++ library in this case.

We can now look at U-Center software and get to know what it’s all about.

U-Center Software

The U-Center software is a vital tool used in the assessment, performance analysis, and the general formation of the u-blox GPS receivers containing the NEO-6M. It’s free software that is only applicable and useable on the windows platform. It can be useful in the display of real-time designed and graphical data visualization from any GPS receiver such as:

  • Navigation summary view
  • Satellite summary view
  • Chart view for any two chosen parameters
  • Clock, altimeter, Speedometer, compass

How to connect NEO-6M to U-center

In this case, the connection of the NEO-6M to PC happens using any USB to TTL converter.

Having installed U-center, you can now start from the general start menu, which is as shown below:

(All programs-> u-Blox->u-center->u-center)

The start menu forms a basis for the location process to commence. You then need to trace the communication toolbar on the screen generated by the start menu and click it. It will then generate a list containing all existing COM ports. Now select the corresponding COM port where the receiver is connected. Raw NMEA sentences are then displayed, which is handy for a quick inspection of the visible ASCII originating from the module over USB. We can use the U-center to show positions on pre-calibrated or Google online maps, often referred to as dynamic maps. When we interface this kind of setup with Arduino, it can be straightforward to generate authentic images showing the actual position of any tracked object at any particular specified time.

The micro hornet GPS Chip

It is the smallest fully integrated GPS antenna module in the world, measuring only 10mm by 10mm by 5.8mm. As a result, it offers an improved receiver combined with higher sensitivity, improved noise immunity, and unconditional frequency stability. Despite its small size, it assimilates a patch antenna element, saw filter, stcxo, rtc crystal, rf shield, Luna, and power management unit with a sirfstariv GPS processor. As a result, it has unique performance and superior sensitivity, achieving a quick time to first fix (TTFF) in less than 1 second, a precision of roughly 1 minute, and a tracking sensitivity of -163dbm.


We are living in an era where Arduino has proven to be the most effective and highly compatible microcontroller supporting the creation of programmable interactive electronic objects. It works based on input and direct output, displaying the entire output in an LCD. In the above article, we’ve studied the relationship between Arduino and various GPS modules, for example, the NEO-6M-GPS module. We’ve also learned different versions of the Arduino, such as the Arduino Uno, their basic structure, and more on their interaction with these GPS modules. Finally, we’ve also seen the micro hornet GPS chip, which is very efficient and modest and a good chip to consider for academic projects. Hence if you are looking to work on a GPS Arduino project, then we would say that “you have got all you need to start your project,” all the best.




                Get Fast Quote Now