Вы находитесь на странице: 1из 9

Escribiendo y leyendo desde una

tarjeta SD
Descripcin:
El Arduino tiene poqusima memoria para almacenar cosas que sobrevivan al encendido y
apagado, y para muchas aplicaciones, puede que necesitamos contar con mucho ms
espacio. Por ejemplo, si tenemos un conjunto de sensores recolectando datos
continuamente, puede que nos interese guardarlos para posterior anlisis. O si tenemos un
proyecto en donde querramos reproducir sonidos de acuerdo a diferentes situaciones
(alarmas por ejemplo) necesitamos un lugar donde tener almacenados los archivos. Pues
bien, el ambiente de programacin de Arduino tiene una librera para el manejo de lectura y
escritura de tarjetas SD. Es muy fcil de usar, solo debemos conectar la tarjeta SD a
diferentes puertos del Arduino adecuadamente.
Para esto hay opciones comerciales, como este mdulo (que ya mand a comprar). Pero
como la espera para que me llegue ser larga, decid investigar un poco y ver la manera de
hacerlo yo mismo. Encontr varias pginas interesantes (referencias al final) que explicaban
diferentes formas de hacerlo, pero no consegu los materiales indicados. Por eso, decid
deshuesar una vieja computadora que tena por ac, y vi que justo los conectores IDE para
los discos duros, tienen los pines alineados con los contactos de la tarjeta SD, y como
vienen en doble fila, uno me sirve para el contacto en s, y el otro para soporte/agarre.
Hay un factor importantsimo a tomar en cuenta a la hora de hacer las conexiones (aqu el
esquema) y es que la tarjea SD trabaja a 3V y los puertos del Arduino nos dan 5V, por lo
que si no se aplica una divisn de voltage, la podemos quemar. A la hora de armas las
conexiones recomiendo probar con un tester cada uno de los pines, y asegurarse de que el
voltaje se redujo a los 3V que soporta la SD, con eso evitarn quemarla.
Materiales:
Conector IDE de una tarjeta madre sin usar.
3 resistencias de 1.5K (para el divisor de voltaje)
3 resistencias de 3.3K (para el divisor de voltaje)
3 resistencias de 220 ohm (para los LEDS)
Tape negro
Cables
3 LEDS
Diagrama
Este es el esquema, simulando el conector a la tarjeta SD con los 7 pines que se utilizan.
Me bas en este trabajo.

Detalles
La parte ms complicada fue dessoldar el conector IDE. COMPLICADSIMO! pero no
imposible. Lo que hice, a falta de los materiales especializados para dessoldar (como el flux
y el succionador) fue colocar una buena cantidad de estao a las soldaduras en la tarjeta,
para que el nuevo estao caliente diluyera el estao original. Pin por pin, con la punta de la
pistola soladora, los iba empujando hacia adentro. Luego, separ un poco la parte plstica
del conector IDE, y con la pistola an caliente derret el estao del otro lado, y uno a uno
pude ir sacando los pines. Luego se insertan en el conector nuevamente 2 filas de 7 pines.

Pero antes de insertar los pines, sold cables al extremo de cada pin que ira luego
conectado al circuito y/o al Arduino.

Como soy un psimo soldador, como se ve en la foto anterior, el estao me qued hecho
una pelota. Al ir los pines tan juntos, hay riesgo de que entren en contacto y se produzca un
desastre, por lo que preven forrando la soldadura con tape negro (aislante).

Una vez estn todos los cables soldados y forrados, se insertan en la parte plstica del
conector IDE. Recomiendo usar cables de diferentes colores para luego identificar cada pin
en la tarjeta y conectar todo correctamente.

Como pueden ver en la parte interna, nos quedan 2 filas de pines, los que tienen soldados
los cables harn contacto con la tarjeta SD, y los otros nos sirve como agarre. Habr que
doblarlos ligeramente de forma que hagan la presin suficiente para que todos los pines
hagan contacto.



As se ve el circuito una vez montado (muy desordenado y nada prctico para funcionar con
otros proyectos y ms componentes. Pero para practicar es suficiente).

Aqu un pantallazo de la prueba, escribir dos lneas en un archivo de texto.



Cdigo
Basado en el ejemplo ReadWrite de la pgina oficial de Arduino. Modificado para encender
3 LEDS segn el resultado final.
/*
SD card read/write

This example shows how to read and write data to and from an SD card
file
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4

created Nov 2010
by David A. Mellis
updated 2 Dec 2010
by Tom Igoe

This example code is in the public domain.

Modificado para encender 3 LEDS dependiendo del resultado de la escritura
a la tarjeta SD

*/

#include <SD.h>

File myFile;

byte correcto = 1;

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

// On the Ethernet Shield, CS is pin 4. It's set as an output by
default.
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an
output
// or the SD library functions will not work.
pinMode(10, OUTPUT);

pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);

Serial.print("Encendiendo leds...\n");

digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
delay(3000);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(3000);

Serial.print("Initializing SD card...\n");

if (!SD.begin(4)) {
Serial.println("initialization failed!\n");
digitalWrite(8, HIGH);
delay(1000);
digitalWrite(8, LOW);
correcto = 1;
return;
}
//Serial.println("initialization done.");

// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
myFile = SD.open("test.txt", FILE_WRITE);

// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("testing 1, 2, 3.");
// close the file:
myFile.close();
correcto = 3;
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
Serial.println("done.");
} else {
// if the file didn't open, print an error:
//Serial.println("error opening test.txt");
correcto = 2;
digitalWrite(7, HIGH);
delay(1000);
digitalWrite(7, LOW);
}

// re-open the file for reading:
myFile = SD.open("test.txt");
if (myFile) {
Serial.println("test.txt:");

// read from the file until there's nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
correcto = 3;
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
correcto = 2;
}
}

void loop()
{
// nothing happens after setup

switch(correcto)
{
case 1:
digitalWrite(8, HIGH);
break;
case 2:
digitalWrite(7, HIGH);
break;
case 3:
digitalWrite(9, HIGH);
break;
}

delay(1000);
}

Вам также может понравиться