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

Obtención de datos Gps con la placa ITEAD GPS Shield 1.1 y Arduino Mega.

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. La shield ha de estar pinchada en el Arduino Mega en su ubicación.

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

TinyGPS gps;
SoftwareSerial serialgps(69, 68); //Pin 69 equivale a A15 en arduino mega.

float latitud, longitud;
char LONGITUD_GPS[12];
char LATITUD_GPS[12];
char VELOCIDAD_GPS[5] = {'0', '0', '0', 0, 0};
char RUMBO_GPS[5] = {'0', '0', '0', 0, 0};
char HORA_GPS[4] = {'0', '0', 0, 0};
char MINUTOS_GPS[4] = {'0', '0', 0, 0};
char SEGUNDOS_GPS[4] = {'0', '0', 0, 0};
char DIA_GPS[4] = {'0', '0', 0, 0};
char MES_GPS[4] = {'0', '0', 0, 0};
char ANO_GPS[6] = {'0', '0', '0', '0', 0, 0};

int year;
byte month, day, hour, minute, second, hundredths;

void setup()
{
    serialgps.begin(9600);
    Serial.begin(9600);
}

void loop(){
   
    bool newData=false;
    unsigned long chars;
    unsigned short sentences, failed;
    
    for (unsigned long start = millis(); millis()-start<1000;)
    {
       while(serialgps.available()){
         {
           char c=serialgps.read();
           if (gps.encode(c)){
             Serial.println("");
 
            //obtengo y muestro la latitud y la longitud
             gps.f_get_position(&latitud, &longitud);
             char latitudChar[10]= "";
             dtostrf(latitud,4,6,latitudChar);
             Serial.print("Latitud: ");
             Serial.println(latitudChar);
             char longitudChar[10]= "";
             dtostrf(longitud,4,6,longitudChar);
             Serial.print("Longitud: ");
             Serial.println(longitudChar);
             
             //obtengo y muestro la velocidad en nudos 
             int velocidad_gps = int(gps.f_speed_knots());
             sprintf(VELOCIDAD_GPS, "%03u", velocidad_gps);
             Serial.print("Velocidad: ");
             Serial.println(velocidad_gps);
             
             //Obtengo y muestro el rumbo.
             sprintf(RUMBO_GPS, "%03u", int(gps.f_course()));
             Serial.print("Rumbo: ");
             Serial.println(RUMBO_GPS);
             
             //Obtengo la fecha y la muestro usando el Serial.print
             gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, hundredths);
             sprintf(ANO_GPS, "%u", year);
             sprintf(DIA_GPS, "%02u", day);
             sprintf(MES_GPS, "%02u", month);
             sprintf(HORA_GPS, "%02u", hour);
             sprintf(MINUTOS_GPS, "%02u", minute);
             sprintf(SEGUNDOS_GPS, "%02u", second);
             Serial.print("Fecha: ");
             Serial.print(DIA_GPS);
             Serial.print("/");
             Serial.print(MES_GPS);
             Serial.print("/");
             Serial.println(ANO_GPS);
 
             //muestro la hora usando concatenacion
             String horaActual="";
             horaActual.concat(HORA_GPS); 
             horaActual.concat(":");
             horaActual.concat(MINUTOS_GPS);
             horaActual.concat(":");
             horaActual.concat(SEGUNDOS_GPS);
             Serial.print("Hora: ");
             Serial.println(horaActual);
 
           }
         }
       }
    } 
}

Uso de la tarjeta SD de la placa ITEAD GPS Shield 1.1 con Arduino Mega.

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 shield ha de estar pinchada en el Arduino Mega en su ubicación.

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.

Código de la aplicación* (Extraido del foro de Arduino):

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

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

void setup() {

  Serial.begin(115200);
  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");
  }
}

Problema sensor RFID. Lee tarjeta pero no actúa correctamente.

En una instalación con dos lectores RFID, hemos estado teniendo problemas de lectura, el sensor realiza la lectura pero actúa como si fuera otro «suplantando la identidad».

El sistema se compone de un arduino que recoge las lecturas de los dos sensores de proximidad y los dos sensores en sí.

Viendo la forma de actuar, hicimos leer tarjetas por ambos lectores, viendo que si leíamos en el sensor 1 todo funcionaba correctamente y cuando lo hacíamos en el sensor 2 no pasaba nada y en ocasiones se registraba lectura en el sensor 1.

Primeramente se sustituye el arduino por otro nuevo por si hubiese algún problema con el existente. Una vez sustituido, el sistema se comporta de la misma manera.

Visto esto, procedemos a sustituir el sensor 2, que es el que parecía que actuaba de forma extraña. 

Efectivamente, al sustituir el sensor 2 todo vuelve a funcionar correctamente.

Materiales sustituidos: 

         – Arduino Mega «Compatible».

         – Sensor RFID GP20. (Gris).

Materiales retirados:

         – Sensor RFID GP20 (Negro).