GPS Neo-6M Logger Shield With SD Slot Card

AED 173.25

Low stock


This is a GPS shield that has the NEO-6M GPS module which is widely used in drone projects, object monitoring projects, etc. and has an additional SD card slot built-in The main advantage of using these GPS modules is the simplicity and the availability of libraries to collect the data already processed. 

NOTE: Antenna not included


  • uBlox Neo 6M GPS module
  • Micro SD interface for data logging
  • 5 Hz update rate
  • External GPS antenna port (Antenna not included)
  • Power and GPS fix indicator LEDs
  • Reset Button
  • Baud rate: 9600
  • Update rate: 1Hz (Default), 5Hz (Max)
  • Active antenna design with high receive sensitivity, compatible normal antenna
  • Extremely fast time to first fix at the low signal level
  • UART interface
  • Operation temperature: -40 ~ +85
  • Shield Functions: Storage, Wireless
  • Board Size : 56mm x 54mm
  • Operation Leve: Digital 3.3V/5v
  • Stackable: Yes
  • Size: 53.0mm x 60mm
  • Weight : 25.00g

Advantages of using GPS Shield over the GPS module:

  • There is no need to use a protoboard
  • Perfectly fits the Arduino
  • It has a battery so that the location can be found more quickly if there is a loss of power
  • Has a slot for saving locations on the SD card
  • Battery for quick location recovery in case of power loss

Schematics of the GPS Neo-6M Logger Shield With SD Slot Card:

In the diagram, you can see the connection that the pins controlled by the Mini Jumpers are connected to the physical pins of the Arduino D1 to D7. The two pins that are selected will be responsible for the serial communication, therefore, it should not be used for other purposes. It is always worth remembering that you must connect the TX pin selected from the shield to the RX of the Arduino, note this when programming.

    Schematics of the GPS Neo-6M Logger Shield With SD Slot Card:

    As can be seen, pin 8 is also used by the shield, as this pin is what makes the service select the MicroSD card in the SPI protocol.


    Place the mini jumpers (yellow pieces) in these positions, for use with the project. With this assembly, pins 3, 4, 8, 11, 12, and 13 are reserved for the use of the shield.

    Placing the Shield on top of your Arduino, check that all the pins are fitting correctly, and then press to make the connection and you are ready.

    Place a MicroSD card in the slot and tighten it until it locks. To remove the MicroSD card, press again that it will come out. Give preference to quality MicroSD cards and Class 10

    Connect the antenna to the IPX adapter (Not included in the kit), and connect the connector to the shield.

    Getting date, time, and location:

    With the code below loaded, it will perform the function of showing on the Serial Monitor the position of latitude and longitude of your location, and will also show the time and date that the satellite provides. Thanks to this date and time information, you can also use this shield as a kind of RTC.

    It is common for the location signal to take a few minutes to be picked up, if it takes too long, places the antenna on the outside of the house. When the signal is picked up, the onboard led will start to flash.

    This code has a very nice addition, which is to record the information also on the SD card! That way you have a position monitoring system in a very simple way.

    Arduino Code for GPS Module Neo-6M GPS Logger Shield With SD Slot Card:
    First, you will need to download the Tiny GPS Library to your Arduino IDE
    you can download it by Clicking Here.
    then Uploaded This code to your Arduino Board.

    #include ; #include ; #include #include #define FusoHorario -3 #define GPS_RX 4 #define GPS_TX 3 SoftwareSerial GPS_Serial(GPS_RX, GPS_TX); TinyGPS GPS; uint8_t chipSelect = 8; void setup() { GPS_Serial.begin(9600); // Serial.begin(9600); Serial.println("Inicializando o cartao MicroSD..."); if (!SD.begin(chipSelect)) { Serial.println("O MicroSD falhou ou nao esta presente"); delay(1000); } Serial.println("O cartao foi inicializado corretamente."); } void loop() { bool conexao = false; // Indica se o GPS está conectado e recebendo dados do satelite int16_t ano; // Criação das variáveis que guardará as informações de data uint8_t mes, dia, hora, minuto, segundo; while (GPS_Serial.available()) { // Ficará em loop até que consiga se conectar. char cIn = GPS_Serial.read(); conexao = GPS.encode(cIn); } // Se saiu do loop, signifca que conseguiu conectar e está pronto para mostrar os dados if (conexao) { File dataFile = SD.open("GPSlog.txt", FILE_WRITE); // Associará o objeto dataFile ao arquivo GPSlog.txt. Se caso o arquivo não exista, será criado //O objeto dataFile foi setado como escrita, mas dá para utilizar de outras formas. Serial.println(" \n ----------------------------------------"); dataFile.println(" \n ----------------------------------------"); //Este comando salva a linha no cartão MicroSD // Se caso não conseguir abrir o arquivo por qualquer razão, irá avisar no MonitorSerial if (!dataFile) Serial.println("Erro ao abrir o arquivo GPSlog.txt"); //Latitude e Longitude long latitude, longitude; GPS.get_position(&latitude, &longitude); // obtem a latitude e longitude // se a latitude for algo valido ela será impressa no MicroSD e no MonitorSerial if ((latitude != TinyGPS::GPS_INVALID_F_ANGLE)) { Serial.print("Latitude: "); Serial.println(float(latitude) / 1000000, 6); dataFile.print("Latitude: "); dataFile.println(float(latitude) / 1000000, 6); } // se a longitude for algo valido ela será impressa no MicroSD e no MonitorSerial if (longitude != TinyGPS::GPS_INVALID_F_ANGLE) { Serial.print("Longitude: "); Serial.println(float(longitude) / 1000000, 6); dataFile.print("Longitude: "); dataFile.println(float(longitude) / 1000000, 6); } // Chamará a função para converter o horário recebido pelo satelite GMT, e converte para o fuso escolhido HorarioFuso(&ano, &mes, &dia, &hora, &minuto, &segundo); // imprimindo os dados no monitor serial Serial.print("Data (GMT "); Serial.print(FusoHorario); Serial.println(")"); Serial.print(dia); Serial.print("/"); Serial.print(mes); Serial.print("/"); Serial.println(ano); Serial.print("Horario (GMT "); Serial.print(FusoHorario); Serial.println(")"); Serial.print(hora); Serial.print(":"); Serial.print(minuto); Serial.print(":"); Serial.println(segundo); // imprimindo os dados no cartão MicroSD dataFile.print("Data (GMT "); dataFile.print(FusoHorario); dataFile.println(")"); dataFile.print(dia); dataFile.print("/"); dataFile.print(mes); dataFile.print("/"); dataFile.println(ano); dataFile.print("Horario (GMT "); dataFile.print(FusoHorario); dataFile.println(")"); dataFile.print(hora); dataFile.print(":"); dataFile.print(minuto); dataFile.print(":"); dataFile.println(segundo); dataFile.close(); } } void HorarioFuso(int16_t *ano_, uint8_t *mes_, uint8_t *dia_, uint8_t *hora_, uint8_t *minuto_, uint8_t *segundo_) { uint8_t QntDiasMes[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int16_t ano; int8_t mes, dia, hora, minuto, segundo; GPS.crack_datetime(&ano, &mes, &dia, &hora, &minuto, &segundo); //obtendo a data e horário do satelite no padrão GMT hora += FusoHorario; if ((ano % 4) == 0) QntDiasMes[1] = 29; // Ano Bissexto if (hora < 0) { hora += 24; dia -= 1; if (dia < 1) { if (mes == 1) { // Jan 1 mes = 12; ano -= 1; } else { mes -= 1; } dia = QntDiasMes[mes - 1]; } } if (hora >= 24) { hora -= 24; dia += 1; if (dia > QntDiasMes[mes - 1]) { dia = 1; mes += 1; if (mes > 12) { // Jan 1 ano += 1; mes = 1; } } } *ano_ = ano; *mes_ = mes; *dia_ = dia; *hora_ = hora; *minuto_ = minuto; *segundo_ = segundo; }

    Removing the SD from the Shield and placing it on the computer, we see that the data was recorded correctly