Leer, borrar y escribir en una tarjeta SD

El módulo de tarjeta de memoria Arduino (MicroSD Card shield) permite guardar los datos de los sensores a la hora de crear proyectos complejos, ya que la propia memoria no volátil del Arduino (eeprom) sólo permite 4Kbytes de memoria en el Arduino Mega (Atmega2560). En este resumen veremos cómo borrar, escribir y leer correctamente la información en el archivo de memoria tarjetas SD o Micro SD con el microcontrolador Arduino.

Para esta actividad necesitaremos:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • módulo de tarjetas SD y MicroSD;
  • cables de conexion;
  • librerias SPI.h y SD.h

Módulo micro SD Arduino pinout, datasheet

Algunos fabricantes ofrecen módulos de tarjetas SD o Micro SD con dos contactos de alimentación: 5 y 3,3 voltios. En este caso, debe conectarse una tensión estabilizada de 3,3 voltios a la patilla «3,3V». Si no existe tal contacto, conecte 5 voltios del microcontrolador Arduino a la patilla «5V» o «VCC», que se convertirá en 3,3V. No se debe conectar un voltaje superior al pin «3.3V», ya que dañaría la módulo microSD Arduino.

Módulo de tarjetas SD pinout, datasheet
Módulo de tarjetas SD pinout, datasheet

Características módulo Micro SD Card:

  • Alimentación: 3.3V ó 5V
  • Soporta: FAT16 o FAT32
  • Comunicación: SPI

Se recomienda que el sistema de archivos de la tarjeta sd sea FAT16 o FAT32. Antes de empezar necesitarás instalar las librerías SD.h y SPI.h, que puedes descargar de nuestra web. La librería SD.h contiene muchos comandos y funciones útiles que permiten trabajar con los archivos de la memoria flash del escudo de la tarjeta sd: crear y borrar archivos, abrir y guardar en archivos la información necesaria de los sensores, etc.

Conectar módulo micro SD Arduino

Conectar módulo lector tarjeta SD Arduino
Conectar módulo lector tarjeta SD Arduino

El módulo lector tarjeta SD conecta al Arduino a través de la interfaz SPI y para ello necesitarás los pines SCK, MISO, MOSI y CS. Las placas Arduino Uno y Nano tienen pines dedicados para el bus SPI, la placa Mega 2560 tiene pines diferentes. Puedes utilizar cualquier pin libre del microcontrolador para el pin CS y especificar este cambio en el código. Por defecto, se utilizan los pines de las placas que aparecen en la tabla.

SD card shield Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
VCC 5V 5V 5V
MOSI 11 11 51
MISO 12 12 50
SCK 13 13 52
SC 4 4 53

El siguiente código de ejemplo permite abrir el archivo test.txt de la tarjeta de memoria para escribirlo (si no hay ningún archivo con este nombre, se creará) y guardar en él la cadena de texto «testing 1, 2, 3». Después es necesario cerrar el archivo para guardar todos los datos que contiene. A continuación, toda la información del archivo se envía al Arduino IDE. Cargue el programa para escribir el archivo en la tarjeta SD y abra el monitor serie.

Programa Arduino para escribir en modulo SD card

#include "SPI.h"
#include "SD.h"

File myFile;

const int chipSelect = 4;    

void setup() {
   Serial.begin(9600);
   pinMode(SS, OUTPUT);

   while (!SD.begin(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed"); }
 
   myFile = SD.open("test.txt", FILE_WRITE);

   if (myFile) {
      Serial.println("Writing to test.txt");
      myFile.println("testing 1, 2, 3");
      myFile.close();
   }

   else { Serial.println("error opening test.txt"); }
 

   myFile = SD.open("test.txt");

   if (myFile) {
      Serial.println("\ntest.txt:");
      while (myFile.available()) {
         Serial.write(myFile.read());
      }
      myFile.close();
   }

   else { Serial.println("error opening test.txt"); }
}

void loop() {
}

Explicación del código para escribir en una tarjeta SD:

  1. el módulo de la tarjeta sd no puede abrir varios archivos al mismo tiempo, antes de abrir un nuevo archivo, debe cerrarse el anterior;
  2. cuando se reinicie el programa, se añadirán nuevos datos al archivo, no se sobrescribirán.

El siguiente código permite mostrar en el monitor de puerto información sobre el tamaño del archivo test.txt del ejemplo anterior, así como toda la información que se ha escrito en él. Tenga en cuenta que el nombre del archivo en la tarjeta SD no debe contener más de 8 caracteres, sin incluir la extensión. Y la biblioteca SD.h no es sensible a las mayúsculas y minúsculas en el nombre del archivo, es decir, «TEST.txt» y «test.txt» son el mismo archivo.

Programa Arduino para leer en modulo SD card

#include "SPI.h"
#include "SD.h"

File myFile;

const int chipSelect = 4;    

void setup() {
   Serial.begin(9600);
   pinMode(SS, OUTPUT);

   while (!SD.begin(SPI_HALF_SPEED, chipSelect)) { Serial.println("initialization failed"); }
 
   myFile = SD.open("test.txt");

   if (myFile) {
      Serial.print(myFile.size());
      Serial.println(" Kb");
      Serial.println("\ntest.txt:");
      while (myFile.available()) {
         Serial.write(myFile.read());
      }
      myFile.close();
   }

   else { Serial.println("error opening test.txt"); }
}

void loop() {
}

Explicación del código para leer en una tarjeta SD:

  1. La biblioteca SD.h no distingue entre mayúsculas y minúsculas, es decir, los comandos SD.open(«test.txt»); y SD.open(«TEST.txt»); abrirán el mismo archivo.

Conclusión. Hemos visto varias posibilidades para trabajar con el módulo sd para leer y escribir archivos en la tarjeta sd. Este módulo le será útil en proyectos en los que necesite guardar información periódicamente. Por ejemplo, si quieres guardar información diaria del sensor Arduino bmp180 (GY-68) sobre la presión atmosférica y la temperatura del aire.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *