Skip to Content

GPS Neo-6M Logger Shield With SD Slot Card

This GPS Shield integrates the popular NEO-6M GPS module and a microSD card slot for data logging. It's ideal for drone projects, object tracking, and more. It fits directly on top of the Arduino, simplifying wiring and setup.

Note: Antenna not included.


This GPS shield features the NEO-6M GPS module, widely used in drone and object monitoring projects, and includes an additional built-in SD card slot. The module is easy to use with readily available libraries to collect processed data.

Note: Antenna not included.

173.25 AED 173.25 AED Tax Included
173.25 AED Tax Included

Not Available For Sale

This combination does not exist.

Terms and Conditions
30-day money-back guarantee
Shipping: 2-3 Business Days

 

Specifications:

  • uBlox Neo 6M GPS module
  • MicroSD card interface for data logging
  • Update rate: 1Hz (default), up to 5Hz
  • External GPS antenna port (antenna not included)
  • Power and GPS fix indicator LEDs
  • Reset button
  • Baud rate: 9600
  • Active antenna design with high receive sensitivity
  • UART interface
  • Operating temperature: -40°C to +85°C
  • Shield Functions: Storage, Wireless
  • Board Size: 56mm x 54mm
  • Operation Level: Digital 3.3V / 5V
  • Stackable: Yes
  • Weight: 25g

Advantages of the GPS Shield over the GPS Module:

  • No need for a protoboard
  • Fits perfectly on the Arduino
  • Has a battery for faster GPS lock after power loss
  • Includes SD card slot for storing GPS data

Schematics:

The GPS shield uses mini jumpers to select which Arduino pins are used for serial communication. Note that:

  • TX of the shield must go to RX of Arduino
  • Pin 8 is used for the SD card chip select in SPI mode

 

Assembly Instructions:

  • Place the mini jumpers to select pins 3 and 4 for serial communication
  • Pins 3, 4, 8, 11, 12, and 13 will be used by the shield
  • Stack the shield on your Arduino and press down firmly
  • Insert a microSD card (Class 10 recommended) until it clicks
  • To remove the microSD card, push it again to eject
  • Connect a GPS antenna to the IPX connector (not included)

 

Getting Date, Time, and Location

The following Arduino sketch will read latitude, longitude, date, and time from the GPS and also log them to the SD card. Useful as a simple tracking system or even a substitute real-time clock (RTC).

Note: It may take a few minutes for the GPS to lock onto satellites. Place the antenna outdoors if needed. The onboard LED will flash once the GPS has a fix.

Required Libraries:

  • TinyGPS
  • SoftwareSerial
  • SD

Arduino Code:

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <SD.h>

#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;
  int16_t ano;
  uint8_t mes, dia, hora, minuto, segundo;

  while (GPS_Serial.available()) {
    char cIn = GPS_Serial.read();
    conexao = GPS.encode(cIn);
  }

  if (conexao) {
    File dataFile = SD.open("GPSlog.txt", FILE_WRITE);
    Serial.println(" \n ----------------------------------------");
    dataFile.println(" \n ----------------------------------------");

    if (!dataFile)
      Serial.println("Erro ao abrir o arquivo GPSlog.txt");

    long latitude, longitude;
    GPS.get_position(&latitude, &longitude);

    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);
    }

    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);
    }

    HorarioFuso(&ano, &mes, &dia, &hora, &minuto, &segundo);

    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);

    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);
  hora += FusoHorario;

  if ((ano % 4) == 0) QntDiasMes[1] = 29;

  if (hora < 0) {
    hora += 24;
    dia -= 1;
    if (dia < 1) {
      if (mes == 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) {
        ano += 1;
        mes = 1;
      }
    }
  }

  *ano_ = ano;
  *mes_ = mes;
  *dia_ = dia;
  *hora_ = hora;
  *minuto_ = minuto;
  *segundo_ = segundo;
}

Data Logging Verification

After running the code, remove the SD card and insert it into your computer to verify that the GPSlog.txt file contains location and time data as expected.