portada-sd-1

Un lector SD es un dispositivo que se emplea como almacenamiento de una tarjeta SD, que podemos incorporar en nuestros proyectos de electrónica y Arduino.

Las memorias SD son las más usadas por dispositivos portátiles, por su gran capacidad y su tamaño, a causa de su gran demanda son fáciles de conseguir en diferentes capacidades . Estas características nos dan una buena alternativa de almacenamiento para usarlo en Arduino, cuando necesitamos guardar información.

Vienen en tres variantes , SD estándar, Mini SD y Micro SD, siendo este último el tamaño más común, iguales en cuanto a su función , ademas se puede usar adaptadores para utilizarlos en sockets de diferente tamaño.

En las diferentes variantes de lectores, la lectura puede realizarse a través de bus SPI pero trabajan con 3.3V, para utilizarlo con Arduino necesitamos módulos externos que aparte de tener el socket traen los componentes necesarios para adaptar los voltajes a TTL y poder conectarlo de forma fácil a nuestro Arduino. Aunque pueden disponer de otros interfaces, como bus I2C o UART, normalmente es preferible emplear SPI por su alta tasa de transferencia.

Con respecto al formato podemos encontrar 4 variantes, las tarjetas SD o SDSC (Standard Capacity), SDHC (High Capacity), SDXC (Extended Capacity) y las SDIO (Input/Output), permitiéndonos Arduino trabajar con los dos primeros tipos.

La comunicación de la memoria es por SPI pero trabajan con 3.3V, para utilizarlo con Arduino necesitamos módulos externos que aparte de tener el socket traen los componentes necesarios para adaptar los voltajes a TTL y poder conectarlo de forma fácil a nuestro Arduino.

Conexion con el Arduino

La conexión es sencilla y similar tanto para lectores SD como Micro SD. Simplemente alimentamos el módulo desde Arduino mediante 5V y Gnd. Por otro lado, conectamos los pines del bus SPI a los correspondientes de Arduino.

La conexión del lector SD sería la siguiente

en un lector micro SD, que sería la siguiente.

Para poder usar la librería en nuestro Sketch es necesario incluir a la librería SD al inicio del código:

#include <SD.h>

Para realizar la lectura y escritura en la SD emplearíamos la librería SD.h, incluida en el IDE estándar de Arduino.

Esta librería incorpora funciones para el manejo de ficheros y directorios, bajo el objeto SD.

Iniciar la SD

SD.begin(cspin);

Comprobar si existe un fichero (devuelve true si existe, falso en caso contrario)
SD.exists(filename);

Borrar un fichero
SD.remove(filename);

Abrir un fichero

Mode: FILE_READ para sólo lectura
            FILE_WRITE para lectura y escritura
SD.open(filepath, mode);

Crear un directorio

SD.mkdir(directory);

Eliminar un directorio

SD.rmdir(dirname);

Ademas incorpora funciones para la lectura y escritura de un archivo, bajo el objeto File.

 Comprobar si quedan bytes por leer

file.available() 

Leer un byte del fichero

file.read() 

Escribir un byte en el fichero

file.write(data) 

Escribir una variable en un fichero (en forma similar a Serial.Print)

file.print(data)

 Obtener el punto de lectura/escritura actual

file.position()

 Mover el punto de lectura/escritura actual

 Pos: Debe estar entre 0 y file.size() file.seek(pos)

Obtener el tamaño de un fichero

file.size()

Cerrar el fichero

file.close()

Escritura de un archivo Datalogger

Tal sketch simula la función de un datalogger, un proyecto muy habitual que registra periódicamente la lectura de un evento.

En este caso, empleamos una función readSensor que simula el proceso de lectura de un sensor. En este caso devuelve siempre 0 pero, en un caso real, esta función se sustituiría por una función que realice la lectura de un sensor o una entrada analógica.

Cada medición guarda el tiempo de toma de datos, y el valor simulado de la lectura del sensor.

#include <SD.h>

File logFile;

void setup()
{
  Serial.begin(9600);
  Serial.print(F("Iniciando SD ..."));
  if (!SD.begin(9))
  {
    Serial.println(F("Error al iniciar"));
    return;
  }
  Serial.println(F("Iniciado correctamente"));
}


// Funcion que simula la lectura de un sensor
int readSensor()
{
   return 0;
}

void loop()
{
  // Abrir archivo y escribir valor
  logFile = SD.open("datalog.txt", FILE_WRITE);
  
  if (logFile) { 
        int value = readSensor;
        logFile.print("Time(ms)=");
        logFile.print(millis());
        logFile.print(", value=");
        logFile.println(value);
        
        logFile.close();
  
  } 
  else {
    Serial.println("Error al abrir el archivo");
  }
  delay(500);
}

Lectura de un archivo

En este caso realizamos la lectura de un fichero y mostramos el contenido por puerto Serial. El fichero leído «dataFile.txt» debe existir previamente en la tarjeta.
En una situación real el fichero podría contener, los ángulos que deben adoptar los servos de un robot para adoptar distintas posiciones, separados por comas o cualquier otra información para su uso posterior .
En la lectura de cada línea se procesaría la información leída, y se emplearía para realizar las acciones oportunas.

#include <SD.h>
 
File dataFile;
 
void setup()
{
  Serial.begin(9600);
  Serial.print(F("Iniciando SD ..."));
  if (!SD.begin(9))
  {
    Serial.println(F("Error al iniciar"));
    return;
  }
  Serial.println(F("Iniciado correctamente"));
 
  // Abrir fichero y mostrar el resultado
  dataFile = SD.open("datalog.txt"); 
  if (dataFile)
  {
   string dataLine;
    while (dataFile.available())
   {
      dataLine = dataFile.read(); 
       Serial.write(dataLine);  // En un caso real se realizarían las acciones oportunas
    }
    dataFile.close();
  }
  else 
  {
    Serial.println(F("Error al abrir el archivo"));
  }
}
 
void loop()
{
}

Espero que les haya servido. Saludos Maqui

views
82


ElectroMercado

  • arduino | otros
4 Comentarios
  1. Daniel01
    Daniel01 3 meses

    El manejo de las tarjetas de memoria, es muy útil para guardar datos sensados por ejemplo. Gracias Maqui

    1+
  2. Luciano
    Luciano 3 meses

    Buenísimo!!!

    1+

Contesta

CONTACTANOS

Esta es su red social de tecnología para compartir tus ideas y proyectos .Puedes enviarnos un correo si tienes dudas.Nos vemos

Enviando

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account