Uso de la tarjeta SD de la placa ITEAD GPS Shield 1.1 con Arduino MKR GSM 1400.

Materiales utilizados:

Conexionado:

Descripción de la aplicación:

En cierta aplicación, necesito usar el almacenamiento en la tarjeta SD que puede alojar la ITEAD GPS Shield 1.1, para ello, realizo el cableado como se indica en la imagen. La aplicación almacena un contador cada segundo desde 1 hasta 100, con lo que en la tarjeta ha de almacenarse en un fichero llamado log.txt una lista con los 100 numeros. Observese que el cable verde CS (chipSelect) ha de indicarse en la aplicación en qué pin está pinchado, en este caso en el 7.

Código de la aplicación:

#include <SD.h>
#include <SPI.h>

const int chipSelect = 7;
int contador = 0;
int i = 0;

void setup() {

  Serial.begin(9600);
  Serial.print("Inicializando tarjeta SD...");
  pinMode(chipSelect,OUTPUT);
  delay(2000);
  if (!SD.begin(chipSelect))
  {
    Serial.print("fallo lectura de tarjeta");
    delay(2000);
    return;
  }
  Serial.print("Tarjeta SD inicializada");
  delay(2000);
  
}

void loop() {
  
  for(i=0; i<100; i++)
  {
    contador ++;
    sdcard();
    delay(1000);
  }
}

void sdcard() {
  String dataString = "";
  dataString += String("Contador");
  dataString +=",";
  dataString += String(contador);
  dataString +=",";
  File dafile = SD.open("log.txt",FILE_WRITE);
  if (dafile) {
    dafile.print(",");
    dafile.println(dataString);
    dafile.close();
    Serial.println(dataString);
  }
  else {
    Serial.println("error al abrir log.txt");
  }
}

Obtención de datos GPS con la tarjeta ITEAD GPS Shield 1.1 y Arduino MKR GSM 1400.

Materiales utilizados:

Conexionado:

Descripción de la aplicación:

En cierta aplicación, necesito ver por el monitor serie del IDE de Arduino la recepción de datos de la ITEAD GPS Shield 1.1, para ello, realizo el cableado según indico en la imagen. En este caso la tarjeta GPS ha de estar configurada a 3.3v, ya que el MKR 1400 trabaja a este voltaje.

#include <TinyGPS.h>

TinyGPS gps;

void setup()
{
  Serial.begin(115200);
  Serial1.begin(9600);
}

void loop()
{
  
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (Serial1.available())
    {
      char c = Serial1.read();
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    while (!Serial1) ; 
    float flat, flon;
    unsigned long age;
    gps.f_get_position(&flat, &flon, &age);
    Serial.print("Latitud=");
    Serial.print(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flat, 6);
    Serial.print(" Longitud=");
    Serial.print(flon == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : flon, 6);
    Serial.print(" Satelites recibidos=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" Precision=");
    Serial.print(gps.hdop() == TinyGPS::GPS_INVALID_HDOP ? 0 : gps.hdop());
  }
  
  gps.stats(&chars, &sentences, &failed);
  Serial.print(" Caracteres Recibidos=");
  Serial.print(chars);
  Serial.print(" Sentencias=");
  Serial.print(sentences);
  Serial.print(" CSUM ERR=");
  Serial.println(failed);
  if (chars == 0)
    Serial.println("** No characters received from GPS: check wiring **");
}