LA TARJETA MICRO-SD

LA TARJETA MICRO-SD

Si bien se consiguen módulos para Arduino que permiten conectar tarjetas de memoria, existe también la posibilidad de fabricar una en forma casera.

Esto puede lograrse de varias maneras, pero todas implican el conectar cada contacto de la tarjeta a utilizar, con el pin que corresponda en el Arduino, o en el circuito que lo acompaña, por ejemplo:

- La menos elegante quizás, pero que también funciona, es soldar en los contactos de una tarjetita SD, o de un adaptador de SD a microSD, un manojo de cables, o un trozo de cable plano.

- Otra forma, es soldar a los contactos de la tarjeta o adaptador, una tira de pines de estándar, con lo que se obtiene un módulo fácil de conectar en forma firme a las placas de prototipo, o a cables con conectores hembra para pines.

- Como las tarjetas SD y microSD trabajan con 3.3 Voltios, normalmente, para conectarlas a un Arduino, que suelen trabajar con tensiones de alimentación y señales de 5 Voltios, se le debe agregar divisores de tensión compuestos de unas seis resistencias (salvo en el caso del Arduino Due, que trabaja tambien con tensiones de 3.3 Voltios.
Teniendo eso presente, se puede construir un módulo, acoplando la tarjetita o el adaptador, a una plaqueta de circuito impreso, en el que ya se implementen los divisores de tensión y las interconexiones, y presente como interfaz la serie de pines que en definitiva deben conectarse al resto del circuito.

Esta es la solución que adopté, luego de montar varias veces los divisores de tensión sobre la tabla de prototipos. Es más práctico contar con el módulo, se utilizan menos conectores, se sabe que el módulo funciona (una vez que se lo haya utilizado con éxito al menos una vez).

- Otra forma es utilizar la parte larga de una tira de pines moldeada de tal manera que, una vez fijada a una placa de circuito impreso, se pueda encajar entre los pines y la placa del circuito a la tarjeta de memoria, quedando cada pin presionando el correspondiente contacto de la tarjeta, a modo de zócalo. De optar por esta solución, se debería también agregar algún tipo de marco o guías para asegurar que la tarjetita encaje siempre en la forma correcta.

- Una variante de la opción anterior consiste en soldar la tira de pines moldeada a otra tira en paralelo, pero con los pines rectos, los cuales no se conectan, pero sirven de soporte para que la tarjetita encaje haciendo contacto con los pines moldeados, por lo que ya no resulta necesario contar con la placa de circuito impreso.


Una vez que se cuenta con terminales conectados a cada contacto de una tarjeta SD o microSD, el siguiente paso es conectarlos al circuito del proyecto en cuestión. Para ello, se debe conocer a qué pines del Arduino se deben conectar, lo que se detalla en la siguiente imagen:

En el esquema de la imagen anterior se muestra la interconexión de una tarjeta SD, o de un adaptador para microSD, con un Arduino Mega 2560, pero sirve también como referencia para la conexión a otras placas Arduino, en las que seguramente cambiará la numeración de los pines. En tal caso, se debe ubicar a cada pin utilizando el nombre de la función que cumple (MOSI, MISO, SS, SCK) y obteniendo el mapa de pines y sus funciones para esa placa en particular.


En cuanto al código necesario para acceder a los datos en modo de lectura, podría ser el siguiente:


// Se incluye la biblioteca 'SD'
#include <SD.h>

// Se declara una constante indicando el pin del Arduino conectado al terminal 'CS' de la tarjeta SD
const int chipSelect = 4;

void setup(){
  // Se abre el puerto serie estándar para poder publicar los mensajes de error
  Serial.begin(9600);

  // Aunque no se utilice, se debe declarar el pin 'CS' del Arduino como salida
  // 53 para el Arduino MEGA, 10 para la mayoría de las placas restantes
  pinMode(53, OUTPUT);

  // Se establece el vínculo con la tarjeta
  if (!SD.begin(chipSelect)){
    // En caso de error, se lo puede notificar a través del puerto serie antes abierto
    Serial.println('Error de acceso a la tarjeta SD/microSD.');
    return;
  }

  // Para abrir el archivo en el modo de lectura, la sentencia sería la siguiente
  File archivo = SD.open('datos.txt');

  // Se chequea el manejador de archivos para asegurar que se puede proceder
  if (archivo) {

    // Se puede recorrer el archivo con un lazo hasta que no haya más datos disponibles
    while (archivo.available()) {
      // En este caso, por ejemplo, se envía el contenido del archivo por el puerto serie
      Serial.write(archivo.read());
    }
    // Finalmente se debe cerrar el archivo
    archivo.close();

  // Si no se pudo abrir el archivo, se puede advertir a través del puerto serie
  } else {
    Serial.println('Error al intentar abrir el archivo datos.txt');
  }
}

void loop()
{
}

El código necesario para escribir en un archivo, podría ser el siguiente:

// Se incluye la biblioteca 'SD'
#include <SD.h>

// Se declara una constante indicando el pin del Arduino conectado al terminal 'CS' de la tarjeta SD
const int chipSelect = 4;

void setup(){
  // Se abre el puerto serie estándar para poder publicar los mensajes de error
  Serial.begin(9600);

  // Aunque no se utilice, se debe declarar el pin 'CS' del Arduino como salida
  // 53 para el Arduino MEGA, 10 para la mayoría de las placas restantes
  pinMode(53, OUTPUT);

  // Se establece el vínculo con la tarjeta
  if (!SD.begin(chipSelect)){
    // En caso de error, se lo puede notificar a través del puerto serie antes abierto
    Serial.println('Error de acceso a la tarjeta SD/microSD.');
    return;
  }

  // La siguiente línea comprueba si existe el archivo 'datos.txt'
  if (SD.exists('datos.txt')) {
    // Aquí la decisión tomada es borrarlo, para crearlo otra vez, pero sin datos
    // es la forma de reemplazar el contenido de un archivo ya existente
    // Si no se lo borra, lo que se escriba sobre él será a continuación del final de su contenido actual
    SD.remove('datos.txt');
  }

  // Para abrir el archivo en el modo de escritura, la sentencia sería la siguiente
  File archivo = SD.open('datos.txt', FILE_WRITE);

  // Se chequea el manejador de archivos para asegurar que se puede proceder
  if (archivo) {

    // Se puede entonces escribir información en el archivo, por ejemplo:
    archivo.print('Esto fue escrito ');
    archivo.println('desde una placa Arduino!');
    // La diferencia entre 'print' y 'println' es que la última agrega un salto de carro y un cambio de línea

    // Finalmente se debe cerrar el archivo
    archivo.close();

  // Si no se pudo abrir el archivo, se puede advertir a través del puerto serie
  } else {
    Serial.println('Error al intentar abrir el archivo datos.txt');
  }
}

void loop()
{
}