Seleccionar página

Cómo Leer Y Escribir Datos En La Tarjeta SD De Arduino

por | Dic 18, 2014 | Tutoriales de Arduino

Tarjeta SD Arduino

¿Sabías que puedes usar una tarjeta SD con tu Arduino? ¿Que puedes almacenar los datos leídos por tus sensores y conservarlos aunque dejes de alimentar tu placa? Éstas son solo algunas de las cosas que puedes hacer cuando utilizas la tarjeta SD de Arduino.

En este tutorial vas a aprender todo lo necesario para que empieces a utilizar la tarjeta SD de Arduino en tus proyectos y puedas gestionar todos tus datos de forma eficaz.

Cómo Usar La Tarjeta SD De Arduino

¿Se utiliza igual la tarjeta SD de tu shield de Ethernet que la de los módulos SD? ¿Puedes utilizar directamente la tarjeta que utilizas para tu móvil? ¿Están permitidos todos los formatos? Como ves, hay algunas consideraciones previas que debes tener en cuenta antes de utilizar memorias SD en Arduino.

Material Necesario

Puedes añadirle una tarjeta SD a tu Arduino de varias formas. Te dejo algunos links con productos que te pueden venir bien smile

Memoria SD Arduino Por Dentro

Lo Que Debes Saber Antes De Utilizar La Tarjeta SD

Para no extenderme mucho en este post, te voy a mostrar punto por punto y de forma resumida los conceptos más importantes a la hora de conectar y utilizar tarjetas SD:

1. Las Tarjetas SD Se Gestionan A Través De Comunicación SPI

Sin duda, las comunicaciones SPI se merecen por sí solas un post entero. Como no es el objetivo de este post, simplemente te diré que si utilizas un módulo de SD debes conectar tu pin MOSI al pin 11 de tu Arduino (50 en la placa Mega), MISO en el 12 (51 en Mega), CLK al 13 (52 si utilizas un Arduino Mega) y SS al 10 (pin 53 en Mega y pin 4 si vas a utilizar la SD de tu shield de Ethernet).

2. Utilizar Distintos Tipos De SD

Puedes usar tanto tarjetas SD como microSD así como las versiones SD y SDHD.

3. Formatos FAT16 Y FAT32

Este apartado se resume en que probablemente debas formatear tu tarjeta SD antes de utilizarla (algo que te recomiendo de cualquier forma si vas a utilizar la tarjeta en Arduino por primera vez, aunque ya esté en el formato adecuado). Siempre que sea posible, intenta utilizar el formato FAT16.

4. Extensiones Y Tipos De Archivos

El formato FAT está limitado en cuanto al tipo de nombres que puedes utilizar. En principio, utilizando cualquier nombre tipo: “datosarduino.txt” o “datos.log” no deberías tener problemas. En cualquier caso, aquí te dejo un link por si necesitas más información.

5. Asegúrate De Abrir Y Cerrar Los Archivos

Antes de utilizar la tarjeta SD de Arduino debes abrir el archivo sobre el que vayas a trabajar (verás cómo más adelante). Si por cualquier motivo pierdes la comunicación con dicho archivo antes de cerrarlo, podrías perder tus datos. Los datos solo se guardan cuando cierras el archivo o usas la función flush().

6. Referenciar El Pin Correcto Al Comenzar La Comunicación

Como verás más adelante, antes de empezar a leer y escribir datos en la tarjeta SD de Arduino tienes que utilizar la instrucción SD.begin(), determinando en el paréntesis el pin CS de tu shield de SD. Esto quiere decir que si utilizas una placa de Arduino UNO (o similar) utilizarás la instrucción SD.begin(10) pero si (por ejemplo) vas a utilizar el shield de Ethernet deberás poner SD.begin(4).

7. Es Posible Utilizar Varios Archivos

Puedes leer y escribir datos en diferentes archivos siempre que cierres el que estabas utilizando antes de abrir el siguiente. Esto te permitirá separar la información de diferentes sensores, configuraciones, etc.

8. Comprobar La Carga De Datos

Aunque no es estrictamente necesario, siempre deberías comprobar que los ficheros se han abierto y cerrado correctamente y que los datos se han almacenado bien.

Leer Y Escribir Datos En La Tarjeta SD de Arduino

Ahora que ya te he contado la parte aburrida… ¡Vamos con lo interesante! smile .

Gracias a la librería SD, leer y escribir datos es realmente sencillo así que, en lugar de escribirte una parrafada, te lo voy a mostrar a través de un ejemplo:

/*EducaChip – Cómo Leer Y Escribir Datos En La Tarjeta SD De Arduino*/
/* www.educachip.com */

//Se incluye la librería <SD.h>
#include <SD.h>

File Archivo;

void setup(){

//Se esablece comunicación con el monitor serial para la comprobación de la
//carga de datos.
Serial.begin(9600);

//Se muestra por pantalla que se va a iniciar la comunicación con la SD
Serial.print(“Comenzando la comunicación con la tarjeta SD”);

//Se establece como salida el pin correspondiente a SS.
pinMode(10, OUTPUT);

//Se muestra por el monitor si la comunicación se ha establecido correctamente
//o ha habido algún tipo de error.
if (!SD.begin(10)){

Serial.println(“Se ha producido un fallo al iniciar la comunicación”);
return;
}
Serial.println(“Se ha iniciado la comunicación correctamente”);

/* ESCRIBIENDO DATOS EN LA MEMORIA SD DE ARDUINO */

//Se abre el documento sobre el que se va a leer y escribir.
Archivo = SD.open(“datos.txt”, FILE_WRITE);

//Se comprueba que el archivo se ha abierto correctamente y se procede a
//escribir en él.
if (Archivo){

//Se escribe información en el documento de texto datos.txt.
Archivo.println(“Esto es lo que se está escribiendo en el archivo”);

//Se cierra el archivo para almacenar los datos.
Archivo.close();

//Se muestra por el monitor que los datos se han almacenado correctamente.
Serial.println(“Todos los datos fueron almacenados”);
}

//En caso de que haya habido problemas abriendo datos.txt, se muestra por pantalla.
else{

Serial.println(“El archivo datos.txt no se abrió correctamente”);
}

/* FIN DE LA ESCRITURA DE DATOS EN LA MEMORIA SD DE ARDUINO */

/* LEYENDO DATOS EN LA MEMORIA SD DE ARDUINO */

//Se vuelve a abrir el fichero, esta vez para leer los datos escritos.
Archivo = SD.open(“datos.txt”);

//Si el archivo se ha abierto correctamente se muestran los datos.
if (Archivo){

//Se muestra por el monitor que la información que va a aparecer es la del
//archivo datos.txt.
Serial.println(“Información contenida en datos.txt:”);

//Se implementa un bucle que recorrerá el archivo hasta que no encuentre más
//información (Archivo.available()==FALSE).
while (Archivo.available()){

//Se escribe la información que ha sido leída del archivo.
Serial.write(Archivo.read());
}

//Si todo ha ido bien cierra el archivo para no perder datos.
Archivo.close();
}

//En caso de que haya habido problemas abriendo datos.txt, se muestra por pantalla.
else{

Serial.println(“El archivo datos.txt no se abrió correctamente”);
}

}

void loop()
{
//En este ejemplo el bucle loop() no realiza ninguna acción ya que toda la información
//fue gestionada en el setup.
//En caso de que se desee almacenar la información obtenida de algún sensor, la escritura
//debería realizarse en el loop().
}

Información Adicional

Te voy a dejar unos cuantos consejos antes de dar por concluido el post. Ahí van smile

  • La tarjeta SD es un complemento excelente al shield de Ethernet (por qué si no iba a estar ahí). Úsala.
Almacenar Datos SD Arduino
  • En caso de que necesites almacenar datos y no dispongas de módulo o tarjeta de SD, siempre puedes utilizar la memoria EEPROM de tu Arduino (aquí te enseño cómo).
  • Algunos módulos de SD funcionan a 3.3V y no llevan regulador, por lo que no convierten “automáticamente” de 5V a 3.3V (al contrario del que has podido ver recomendado en este post). Si es tu caso, visita el siguiente link para descubrir cómo pasar de 5V a 3.3V.

… Y aquí termina el post. Espero que te haya sido útil y que hayas aprendido cómo leer y escribir datos en la tarjeta SD de Arduino. Me he guardado un par de trucos debajo de la manga pero no te preocupes: Te los contaré en el próximo post sobre el uso de tarjetas SD con Arduino.

Como siempre, me gustaría agradecerte tu tiempo, pedirte que compartas el post en tus redes sociales favoritas (con los botones sociales que hay un poco más abajo lo tienes a golpe de click) y recordarte que te suscribas al blog.

Dicho esto, te leo en los comentarios smile

Actualmente me dedico, entre otras cosas, a crear contenidos sobre Arduino y otros dispositivos eléctricos. Me encanta todo lo relacionado con el “Universo Maker”.

Siempre estoy activo en los comentarios. Si tienes cualquier pregunta, no dudes en dejármela en los comentarios. Intentaré responderte lo antes posible… Un abrazo smile

Enrique Romero,

Autor del post.

¿No quieres perderte nada? ¡Suscríbete!

110 Comentarios

  1. Hola,

    Quisiera saber si es posible guardar datos de un Módulo Biometrico (Sensor de huellas dactilares) en la SD, para después recoger los datos proporcionados y abrirlos en Excel.
    Gracias.

    Responder
    • Buenas Ulises,

      Si eres capaz de transformar la huella en números, no hay problema. En cualquier caso, Te dejo un post de cómo pasar datos de Arduino a Excel.

      Un saludo, Enrique.

      Responder
  2. Hola:

    Primero, gracias por la información. Segundo, mi pregunta es ¿sabes como leer el valor de una tarjeta SD y luego usar ese valor como una variable del programa? Te agradezco de antemano la ayuda.

    Saludos.

    Responder
    • Buenas Pablo,

      Una cosa que puedes hacer es utilizar el valor almacenado comparándolo con el de otra variable. Es una de las formas más simples de trabajar con los datos almacenados en SD, EEPROM…

      Un saludo, Enrique.

      Responder
  3. Hola que tal, tengo una duda que nadie me ha podido resolver y es sobre audio y arduino más SD, lo que quiero hacer es basicamente graficar en tiempo real los valores que esta teniendo la señal, es decir: toma un valor de la SD y lo grafica, despues toma otro valor de la SD y lo grafica para de esta manera poder graficar el audio que ya esta cargado en la SD en tiempo real, resumiendo todo, como puedo estar monitoreando los distintos valores del audio utilizando arduino. Gracias, no se si me di a entender de buena manera. Saludos y buen día.

    Responder
    • Buenas Eder,

      La verdad es que no te he entendido muy bien. No sé si quieres pintar datos en tiempo real o que estén previamente guardados en la SD. Te dejo un post sobre enviar datos en tiempo real. Espero que te sirva. smile

      Un saludo, Enrique.

      Responder
      • Quiero pintar datos en tiempo real de un archivo de audio previamente guardado en la tarjeta SD

      • Buenas de nuevo,

        Entonces vale con que vayas leyendo dato a dato y pintándolo.

        Un saludo, Enrique.

  4. Hola,

    Hice el ensamble pero hay un problema que no logró identificar cómo solucionarlo, espero me puedan ayudar. Cuando conecto el arduino a la computadora registra perfectamente y después puedo visualizar los datos en la memoria pero cuando le conecto una fuente de poder independiente no registra nada. Ya probé con: bateria portatil MOBO, bateria lipo y conectando directamente a la corriente utilizando un cargador LG.

    p.d. Tengo un diagrama con mi ensanmble pero no puedo cargar la fotografía, por si se requiere.

    De antemano mil gracias!!

    Fer

    Responder
    • Buenas Fernanda,

      Es posible que no estés utilizando una alimentación lo suficientemente bien regulada para que funciones tu módulo SD. Puedes probar si el problema está ahí conectando un regulador de 3.3V desde tu alimentación externa hacia tu SD.

      Un saludo, Enrique.

      Responder
    • hoola fernanda tengo el mismo problema, lograste resolverlo?

      Responder
      • unifiquen las tierras del arduino y tu fuente independiente.
        Espero les sirva.

  5. Amigo no encuentro la imagen para realizar las conexiones, la puedes compartir?

    Responder
    • Pues la verdad es que no lo tengo a mano, Ronal. Puedes mirarlo en la hoja de características de tu módulo SD y en el diagrama de conexiones de Arduino.

      Un saludo, Enrique.

      Responder
  6. Creo que las conexiones del Arduino Mega estan equivocadas, son el MISO al pin 50 y el MOSI al pin 51

    Responder
    • Puede ser que me haya equivocado, Juan (o que se trate de versiones diferentes de la placa). Siempre se puede ver en el esquema del chip.

      Un saludo, Enrique.

      Responder
  7. Saludos Enrique, excelente tutorial, estoy trabajando en un proyecto en arduino que lee y almacena datos de un sensor de temperatura, y si éstos datos se encuentran fuera del rango requerido pues se activarán ciertas alarmas,se debe hacer un datalogger para tener el respaldo de los datos y además un web server para leer estos datos, así como una gráfica de las lecturas del sensor de las últimas 24 horas ya logré hacer el datalogger y me guarda los datos en la memoria sd, ahora el reto está en que se requiere poder cambiar éste rango de temperatura desde el servidor web, por lo que tenía la idea de hacer un archivo en txt donde se guarden los valores requeridos del rango, se carguen en el arduino y éste trabaje con dichos valores, pero además que desde el web server se pueda modificar este archivo txt almacenado en la memoria sd del arduino, ¿es posible eso? gracias.

    Responder
    • Buenas Mauricio,

      Es posible. smile No te voy a decir que se haga en una tarde pero poder puedes hacerlo.

      Un saludo, Enrique.

      Responder
  8. Hola Enrique. Ya resolvi el problem, es que estaba empleando en proteus una tarjeta sd/mmc y la libreria es solo para sd. Al instalar el proteus 8.3 traia tarjetas sd, que otras versiones no tenian, y ahora si funciona perfecto.

    Responder
    • Me alegro de que lo hayas solucionado. smile

      La verdad es que me parece raro que haya sido por eso. Hasta donde sé no hay diferencia entre MMC y SD… En cualquier caso me alegro smile

      Un saludo, Enrique.

      Responder
  9. Hola Enrique. Necesito saber si has probado simulaciones de sd/mmc + arduino en el simulador proteus. Ya he probado varias veces y nada. Sin embargo le cargo el codigo al arduino mega 2560 con el sd shield y funciona. Pero quiero probar en simulaciones con proteus. No se si hay que poner drivers al proteus para que funciones como al puerto usb. Ya le cargue a la memoria en simulacion el archivo.mmc generado en winimage. No se, si sabes algo de esto agradeceria tu ayuda

    Responder
    • Buenas Dalia,

      La verdad es que no he trabajado con Proteus. Sé lo que es, pero nunca me ha llamado la atención.

      Lamento no serte de ayuda sad

      Un saludo, Enrique.

      Responder
  10. Enrique buenos dias,

    mi hermano me puedes ayudar no logro hacer funcionar mi sd con mi arduino uno, el programa corre solo si esta conectado al pc, pero le desconecto el pc y deja de funcionar
    el programa solo lee un puerto y escribe en la sd

    Responder
    • Buenas Mauro,

      Es difícil saber exactamente cuál es el problema, pero no parece ser por la SD, si no porque el programa no se carga en tu Arduino. ¿Has probado a cargar el mismo proyecto en otra placa?

      Un saludo, Enrique.

      Responder
    • hola mauro tengo el mismo problema, te agradeceré cualquier ayuda!

      Responder
  11. Mediante un microprocesador he conseguido grabar una ristra de datos en una tarjeta SD con el protocolo SPI comenzando en el bloque con dirección 0x00057000.

    Ahora que tengo los datos en la tarjeta SD me gustaría hacer un programa en lenguaje JAVA que me los leyera de tal forma que pueda hacer archivos de texto con esos datos o usarlos para algún cálculo.

    Hasta ahora sólo he visto programas que lean archivos, pero en este caso no son archivos ni tengo ninguna ruta de acceso como F:/archivo_text.txt, sino sólo un valor por cada bloque mencionado, y estoy totalmente desesperado.

    Espero que alguna persona bondadosa me ayude o me diga cómo salir de este lío que me tiene bloqueado.

    Gracias!!!

    Responder
  12. Hola tengo una duda, y es .. para que se usa ese comando File Archivo; al inicio del código?

    Responder
    • Buenas Mateo,

      Se usa para determinar el archivo que quieres utilizar.

      Un saludo, Enrique.

      Responder
  13. Hola Enrique.
    Disculpa, mi data logger ya funcionaba correctamente, estoy guardando los datos de un sensor en la SD con su respectiva fecha y hora (con un RTC), y la verdad no había tenido problemas con la memoria, de ayer a hoy se me generan archivos con nombres muy raros, como si se tratase de una clase de virus, pero ha decir verdad no podría haber sucedido eso pues he estado usando la misma PC desde hace semanas y no tengo ningún virus (he analizado la memoria y mi pc con dos diferentes antivirus)…. además se genera mi nota de texto y esos archivos que te comento… y a la hora de querer abrir el archivo me dice que está dañado D: nunca te ha ocurrido algo así? ya la he formateado y formateado de diferentes formas, con lo que me ofrece windows para formatear, y con un programa que baje “SDformatter” y no he conseguido poder abrir bien el archivo porque siempre que se genera… se generan los otros y me dice que está dañado….
    Help! :C

    Responder
    • Buenas Luna,

      Me parece bastante raro eso. sad

      ¿Podría ser que haya alguna variable que modifique el nombre de tu archivo?

      Un saludo, Enrique.

      Responder
  14. bien me gustaria saver si se puede crear un documento html desde el PC para despues serusado por arduino como pagina web.

    en ese caso: ¿Como se hace?

    Responder
    • Buenas Víctor,

      Como puedes ver en el ejemplo que te dejo en este link, basta con que utilices instrucciones de escritura con tu placa Arduino y lo que escribas sea código HTML.

      Un saludo, Enrique.

      Responder
  15. como puedo visualizar todos los datos que me envia mi arduino en un entorno en la pantalle de mi pc que no sea el monitor de serial de arduino. si alguin me puede orientar. lo que quiero ver es cuando mi arduino encuentra un cambio Low o High en el pin 7 ese resultado lo pueda tener y utilizar en la pc en algun entorno grafico y cual seria el proceso. desde ya muchas gracias

    Responder
    • Buenas Ricardo,

      La verdad es que tienes bastantes opciones para realizar ese proyecto. Si no necesitas la comunicación en tiempo real, quizás lo más simple sea almacenar los datos en una SD y luego pasarlos al ordenador.

      Un saludo, Enrique.

      Responder
  16. Muy buenas
    ¿Es posible tener mas de una comunicación SPI con un solo arduino(Mega)?
    Como maestro o esclavo, o como sea jaja, ya que necesito una menoria SD y un lector rfid. Si es así, tienes algún tutorial o conoces algun post?

    Muchas gracias

    Responder
    • Buenas Edu,

      La verdad es que no lo he intentado nunca pero seguramente haya problemas, es decir, seguro que se puede hacer pero probablemente haya que toquetear bastante el proyecto.

      A ver si le echo un vistazo más detenidamente y te cuento con más detalle. smile

      Un saludo, Enrique.

      Responder
  17. Buenas, tengo una estación meteorologica que consta de dos módulos, uno de sensores con su arduino, y otro del lcd con otro arduino conectados mediante RF, y mi dua esta en donde poner la ethernet si al arduino de los sensores o al arduino ”receptor”..

    Y otra cosa, con la ethernet shiled los datos que subiré se pondrán ver desde cualquier ordenador o sólo quienes se han conectado a mi red?

    Responder
    • Buenas Majid,

      Si los dos Arduinos van a contener la misma información es indiferente desde cuál la subas.

      Respecto a lo de la visibilidad de la información, puedes hacerlo de las dos formas (solo desde área local o desde cualquier parte).

      Un saludo, Enrique.

      Responder
  18. Buenas Enrique, estoy usando el Leonardo con GPS Data Logger, el cual me está guardando los datos correctamente. Quiero saber si puedo guardar en un archivo CSV en lugar de TXT? Tambien quiero enviar ese archivo por el modulo de Xbee S1. Crees que me puedes ayudar con el tema?
    Saludos y gracias!!!

    Responder
    • Buenas Carlos,

      No me he puesto a fondo con el módulo Xbee así que para lo de enviar el archivo no te puedo ser de mucha utilidad (aunque hasta donde he visto no es especialmente difícil de utilizar).

      Respecto a lo de guardar en .csv, basta con que conviertas la información a cadenas de caracteres (String) antes de guardarla y abras tu archivo .csv como lo harías si fuese un .txt (algo tipo File ArchivoDatos = SD.open(“nombrearchivo.csv”, FILE_WRITE);).

      Recuerda que en los archivos .csv la información se separa con “;”, así que es posible que a la cadena de caracteres que vayas a guardar tengas que añadirle ese caracter.

      Un saludo, Enrique.

      Responder
  19. Hola Enrique.
    Me ha gustado mucho tu tuto.
    Sabes si para arduino Yun el PinMode para SS es el 10? sino cual es?
    Por otro lado, quería comentarte que yo estoy intentando grabar datos y recuperarlos de una base de datos Sqlite instalada en el Yun , estoy usando una SD de 8 GB. Me podrías orientar cual es la mejor forma de hacerlo.

    Un saludo y de nuevo muchas gracias.

    Responder
    • Buenas Óscar,

      La verdad es que nunca he utilizado la tarjeta de una Yun, pero me imagino que será ése el pin. En cualquier caso, puedes verlo en el datasheet de tu placa.

      Un saludo, Enrique.

      Responder
  20. hola que tal queria saber si ademas de almacenar los datos en la memoria SD los puedo monitorear en una PC online?

    Responder
    • Buenas Sergio,

      Ése es otro proyecto distinto, pero claro que se puede hacer. Te dejo un link para que veas más o menos la idea.

      Un saludo, Enrique.

      Responder
  21. Estoy haciendo un analizador de red para ahorrar energia. Tengo una placa arduino uno i una etherned shield que detectan factor de potencia, intensidad… I el problema es que nose como subir los datos registrados a una pagina web. Como puedo hacer todo el proceso?

    Responder
    • Buenas Roger,

      Ese proceso es similar al del sketch que viene por defecto en la IDE de Arduino. Con unas pocas modificaciones podrás adaptarlo a tu proyecto.

      Un saludo, Enrique.

      Responder
  22. hola Enrique, navegando por la web encontre tu post que me da una primera idea de como iniciar mi proyecto, de hecho mas bien queria orientacion de como podria realizarlo. te explico en lo que consiste. debemos realizar un velocimetro para un auto. es decir que te diga si la velocidad es excedida, si es asi que te la registre con fecha y hora y también la velocidad. la verdad tengo muy poco conocimiento sobre arduino y no se estaba pensando en usar un display lcd y ahora con esto lo del registro de datos me podrias ayudar un poco con el codigo te lo agradeceria infinitamente. saludos.

    Responder
    • Buenas Emerson,

      Te intentaré ayudar con todas las dudas puntuales que tengas.

      Un saludo, Enrique.

      Responder
      • De antemano muchas Gracias Enrique, esperare por tu respuesta.

  23. Hola, un post muy interesante y detallado.
    Quería ver si podías responderme a una duda que me ha surgido sobre el almacenamiento de datos en Arduino. Estoy pensando en utilizar la placa como un sistema de monitoreo y control de señales. Es decir que estará recibiendo constantemente valores, procesándolos y actuando en consecuencia. Lo que quería saber es si en una Arduino DUE es posible almacenar varios valores (ya que para procesar las señales necesito tener varias muestras de la misma) o es necesario implementar el sistema que describres en el post.
    Saludos

    Responder
    • Buenas Gustavo,

      Las placas pueden almacenar una buena cantidad de datos sin problemas. Eso sí, tendrás que almacenarlos en memoria no volátil (como la de la SD) si quieres que permanezcan allí aunque dejes de suministrarle corriente a tu Arduino.

      Un saludo, Enrique.

      Responder
  24. Saludos
    Enrique un favor puede compartir el pan de montaje

    Responder
    • Buenas Jhon,

      La verdad es que no he entendido bien la pregunta.

      Un saludo, Enrique.

      Responder
  25. Enrique es posible enviar los archivos guardados por internet mediante arduino, la idea es que mi servidor tenga un archivo que reescriba seguido y lo envie a los clientes y estos puedan acceder a el.

    Responder
    • Buenas Daniel,

      Implementando el código correspondiente no deberías tener problemas para crear un sistema así.

      Un saludo, Enrique.

      Responder
  26. Perdon, estoy en un movil.
    Ejemplo: amanece en el terrario a las 8, le digo al arduino guarda esa hora en SD, al dia siguiente.le digo lee la hora de la SD y amanece 2 minutos antes que la hora escrita, es decir 7:58 y escribe esa nueva hora en SD. Esto habria alguna manera de hacerlo?? Gracias y un saludo

    Responder
    • Te voy a dejar un link con lo que te he comentado de la EEPROM a ver si te ayuda.

      Responder
      • Hola Enrique, no he sido capaz de sacar el codigo adelante y ya se me agota la paciencia de seguir y las vacaciones. Encima lo quiero complicar un poco mas, programandole fechas para que en ellas haga los efectos amancer y anochecer en las 4 estaciones del año, para andar mas exactos en 90 dias. Si no es mucho molestar y se te ocurre alguna idea, tienes mi email, sera bien recibida. un saludo y muchas gracias

      • Buenas Luis,

        Intentaré ayudarte en lo que pueda.

        Una cosa que debes tener en cuenta a la hora de programar es segmentar el código. Si desde el principio te planteas un sistema complejo, seguramente no seas capaz de sacarlo adelante. Haz un código muy básico. Pruébalo y cuando estés seguro de que funciona ve añadiendo pequeñas mejoras. Así siempre sabrás donde está el fallo y te será más fácil corregirlo.

        Además, es muy importante que elabores una buena documentación interna en tu código (comentarios explicando lo que hace cada módulo, qué tipo de variables necesitas, etc.) porque si no, te acabarás olvidando de para qué era cada cosa y si alguien quiere utilizar tu código le será realmente difícil.

        Un saludo y mucho ánimo, Enrique.

  27. Felicidades por el tema, me sirvio para complementar mi acuario y.los datis diarios.
    Una duda, se podria almacenar la hora del amanecer y leerka despues haciendo que el arduino a partir de esa hora guardada amaneciera 2 minutos antes y volver a almacenar esa nueva hora guardada para hacer lo mismo el dia siguiente??

    Responder
    • Puedes hacerlo sin problema, Luis.

      Recuerda que también puedes utilizar la EEPROM de tu placa para esa tarea.

      Un saludo, Enrique.

      Responder
  28. Saludos Enrique. tengo un archivo que txt, que guardo en forma de matriz de ceros y unos, por ejemplo de 10 filas por 5 columnas y necesito leer linea por linea, es decir, fila por fila, ¿como hago para solo leer una fila? si es posible agradecería tu explicación, lo hago porque necesito coger esos ‘5’ datos de ceros y unos para luego usarlos por los puertos digitales.

    Responder
    • Buenas Fabian,

      Aunque no recuerdo el nombre exactamente, hay un elemento típico en todos los dispositivos de lectura que es el carácter de fin de línea (si no recuerdo mal normalmente se expresa como “/n”). Lo que puedes hacer es editar tu programa para de cada vez lea hasta ese caracter.

      Un saludo, Enrique.

      Responder
  29. Buenos dias,

    Estoy intentado programar un modulo micro SD con un arduino leonardo, he cogido el código que muestra en este post y formateando la SD y creando el .txt en la tarjeta cuando ejecuto el programa me aparece como que no es posible inicializar la tarjeta.

    No se si este error puede ser debido a que el modulo no es un Shield o por la versión del arduino.

    Un saludo y muchas gracias de antemano!

    Responder
    • Buenas Beatriz,

      La mayoría de esos módulos funcionan a 3.3V. ¿Puede ser que el error parta de que estás alimentando a 5V o que no estés utilizando los pines correctos?

      Un saludo, Enrique.

      Responder
      • Al final el error estaba en los pines que estaba utilizando, buscando información sobre la conexión del módulo en todos los tutoriales se realizan en el caso del arduino UNO en los pines 11, 12 y 13 para conectar el MISO, MOSI y SCK que están asociados a los pines 1, 4 y 3 del ICSP de la placa. En el caso del arduino Leonardo el ICSP no esta asociado a ningún pin por lo que tenia que conectarlo directamente ahí.

        Muchas gracias de todos modos!

  30. Te hago una consulta, tenes idea si puedo usar la tarjeta de memoria SD para almacenar el programa y que se ejecute desde ahi?

    Es poco el lugar que me da la memoria del Arduino y el programa es un poco grande!!!

    Muchas gracias!!

    Responder
    • Buenas Rafael,

      En la SD puedes almacenar datos, no instrucciones. Aun así, intenta optimizar el código, utilizar menos instrucciones para hacer lo mismo (así es como se aprende de verdad). smile

      Mucho ánimo y un saludo.

      Responder
  31. Felicidades por los tutoriales. Son muy buenos, igual que los comentarios posteriores.
    Comentas que es mejor formatear la tarjeta con el FAT16 desde arduino. Como se haria?
    Gracias.

    Responder
    • Buenas,

      Antes que nada disculpa la tardanza en contestar. Puedes formatear la tarjeta desde la ventana de equipo (si utilizas Windows), dándole botón secundario sobre el icono de la tarjeta.

      Un saludo, Enrique.

      Responder
  32. Hola, si conectas el arduino al PC se puede leer la SD desde el PC. gracias

    Responder
    • No lo he intentado Ignacio, pero no debería haber problemas. Basta con que implementes un código para ello.

      Un saludo, Enrique.

      Responder
  33. Hola Enrique. La verdad es que tenía la shield Ethernet desde hace tiempo, pero no la había utilizado para escribir/leer en una tarjeta SD. Cargué tu sketch en un Mega2560, cambié el pin 10 por el 53, pero me dió error de compilación. Algo así como que faltaba la librería SPI. Se la incluí y cargó perfectamente. Veo que tu sketch no la tiene. ¿Es correcto?
    Un saludo.
    Suso.

    Responder
    • Se me habrá escapado Suso. Gracias por el dato :).

      Un saludo, Enrique.

      Responder
  34. Hola.
    Deduzco de esta frase “Puedes leer y escribir datos en diferentes archivos siempre que cierres el que estabas utilizando antes de abrir el siguiente.” deduzco que no es posible abrir dos ficheros a la vez . ¿Es eso cierto? (lo investigaría yo mismo pero no tengo ningún módulo a mano…:-(
    Gracias.

    Responder
    • Exacto Oscar.

      Un saludo, Enrique.

      Responder
  35. Comentas que el Pin de la Sd (MOSI) se conecta al Pin D50 del Arduino y que el Pin De la Sd (MISO) se conecta al Pin D51 del Arduino.
    ¡¡¡¡¡¡ ESTO ES ERRONEO !!!!!!!

    Esta invertido
    MOSI –> Pin D51
    MISO –> Pin D50

    Compruébalo buscando en la red imágenes que hay con la descripción de cada pin del Arduino Mega.

    Responder
    • Buenas Baco,

      Puede ser que se me fuera el número al hacer el post.

      Un saludo, Enrique.

      Responder
  36. Hola Enrique
    Estoy empezando con Arduino y de momento tengo un dominio mas bien bajo. Tengo en mente un proyecto y querría de tu opinión para saber si puedo llevarlo a cabo o no. Te cuento: me gustaría conectar una cámara a Arduino para hacer fotos y almacenarlas en una tarjeta SD. ¿No habría problema en escribir las imágenes en la tarjeta no? También me gustaría a poder ser que me recomendaras una cámara para Arduino, he estado mirando algunas pero no lo tengo muy claro. Muchas gracias

    Responder
    • Buenas Pau,

      Lo que comentas se puede hacer. Normalmente a la hora de utilizar una cámara se suelen necesitar tanto la cámara como un shield para manejarla. No sabría decirte cuál es mejor ni peor porque depende del uso que le vayas a dar pero en general con una cámara de VGA irás bien.

      Un saludo, Enrique.

      Responder
  37. Gracias! me va a servir muchisimo…

    Responder
    • Me alegro de que te haya gustado. smile

      Responder
      • De nuevo muchas gracias, jaja porque eh vuelto a caer en este post por otra duda y me diste una pista de como resolverlo,, una pregunta, licencias tus Sketchs?? si es asi con que licencia? (estoy a favor del conocimiento libre, va por ahi mi duda)

      • Buenas de nuevo,

        Mi código, tu código :). Eso sí, mi sentido arácnido me avisa y se me cae un lagrimón cada vez que cobráis por algo que, tanto yo como el resto de la comunidad Maker, os damos gratis.

        De hecho, nada me gustaría más que las reformas que le hacéis a mi código me las volvierais a enviar para poder publicarlas en el blog (con vuestro nombre).

        Un saludo, Enrique.

  38. hola, como puedo hacer para que los datos se almacenen en un archivo en excel. Gracias

    Responder
    • Buenas Jacqui,

      No he tenido que hacerlo aun así que no sabría decirte. Aun así, no creo que sea trivial. Cuando he hecho cosas similares programando ha sido bastante líoso. uneasy

      Un saludo, Enrique.

      Responder
      • Lo guardas como un archivo “.txt” como Enrique lo hace en su programa y lo puedes abrir en Excel (tienes que pucharle en “all files”, o “Todos los archivos” para que no sólo puedas abrir los archivos Excel), te recomiendo separar los datos por una “coma” porque por cada coma se genera una nueva columna en Excel… te dejo un ejemplito de una función que hice para la memoria SD…

        void sdcard()
        {
        String dataString = “”;
        dataString += String(“Temperatura”);
        dataString += “,”;
        dataString += String (sensor);

        File dataFile = SD.open(“datalog.txt”, FILE_WRITE);
        if (dataFile)
        {
        dataFile.println(dataString);
        dataFile.close();
        Serial.println(dataString);
        }
        else
        {
        Serial.println(“Error abriendo archivo”);
        }
        }

  39. Hola!! estoy realizando un proyecto, estoy construyendo un Ratón Inteligente con la ayuda de la placa electrónica Arduino Uno, mi proyecto tiene como objetivo esquivar obstáculos en un escenario. Para esto se propone el uso de un laberinto el cual servirá como escenario para el ratón inteligente, el cual identifique posibles rutas para llegar a su destino. Se pretende realizar dos recorridos. El primer recorrido es de aprendizaje para “conocer” el entorno, el segundo recorrido es para que el ratón inteligente optimice su ruta llegando a su objetivo en el tiempo menor posible
    Quiero utilizar un Modulo lector de tarjetas MSD que nos permite leer y escribir archivos. Utilizare memorias micro SD para guardar los datos precisos del laberinto. Lo que necesito es que al realizar el primer recorrido es que en el el modulo lector de targetas se guarden los datos o la informacion de la ruta correcta para que cuando realice el segundo recorrido el raton haga el recorrido mas rapido osea que llegue directamente a su destino porque ya lo conoce y que no explore otros caminos. Mi peticion es si me puede asesorar en la programacion para el lector o si me puede explicar, ya que no tengo mucho conocimiento sobre el tema para estar mas directamente en comunicacion le dejo mi correo.

    Responder
    • Buenas Leslie,

      He eliminado tu correo del comentario por si las moscas. Te escribo al correo y te comento.

      Un saludo, Enrique.

      Responder
  40. Hola Enrique,

    He mirado muchos tutoriales, pero no he encontrado nada relacionado a lo siguiente :
    <>
    <>
    Quizás me puedas ayudar hombre, gracias de antemano, Saludos .

    Responder
    • Buenas Juan Manuel,

      La verdad es que no sé muy bien a qué te refieres. Necesitaría más datos para poder comentarte algo al respecto. uneasy

      Un saludo, Enrique.

      Responder
  41. Hoola Enrique!
    Estoy utilizando un arduino junto a un acelerometro para mi proyecto de tesis y la verdad tengo problemas con cargar los códigos, podrias ayudarme ?

    Responder
    • Buenas Alfonso,

      ¿Qué pasa exactamente?

      Un saludo, Enrique.

      Responder
  42. Enrique, muchas gracias por tu tutorial. Pero me queda la siguiente duda:
    Siempre que grabo info en la SD se graba al final del archivo ?. Si es así, que sucede si el archivo crece tanto que ya no le quede espacio en la SD ? ( como por ejemplo si tuviese en la misma memoria páginas HTML de un web server y por consiguiente no tengo toda la SD disponible).
    Hay alguna manera de hacer que el archivo sea de longitud fija y que si no le quedara espacio la siguiente info (la info sería siempre de la misma cantidad de caracteres) “pise” lo mas viejo ?… por ejemplo si le agrego la fecha y la hora a cada registro sabría cuál es el registro mas viejo como para reemplazarlo con la última data.
    Aguardo tus comentarios y gracias..
    Omar

    Lo que te quería consultar es si se puede crar un archivo de longitud fija

    Responder
    • Buenas Omar,

      Antes que nada disculpa la tardanza en contestar.

      Puedes regular la cantidad de información de manera simple utilizando un if().

      Un saludo, Enrique.

      Responder
      • Clarisimo, Gracias por tu tiempo

      • Me alegro de que te haya gustado Omar.

        Un saludo, Enrique.

  43. Hola Enrique!!

    Oye una pregunta, resulta que tengo los valores en lista, como es que puedo leerlos de uno por uno para ir guardandolos en un vector? porque si los leo de uno en uno me salen valores que no están en mi lista.

    Gracias de antemano!

    Responder
    • Buenas Sarai,

      No entiendo bien tu pregunta. Típicamente se leen los valores de uno en uno, si estás recibiendo valores incorrectos quizás no se estén almacenando bien o la tarjeta SD no esté en el formato correcto.

      Un saludo, Enrique.

      Responder
      • Ciertamente, formule mal mi pregunta. Cuando usas Serial.write(archivo.read()) te muestra lo que hay en el archivo en el monitor serial,cierto? Ahora yo quiero guardar eso que veo en el monitor serial en un array que me permita manipular los datos. Si lo hago digamos m[i]=archivo.read(); si tengo un 12 me lee 1 y en la siguiente localidad un 2 en lugar de poner el 12 en una sola localidad del array.

      • Buenas de nuevo,

        Puedes trabajar con los caracteres de final de línea o crear un módulo auxiliar que coloque correctamente los valores.

        Un saludo, Enrique.

  44. Hola, me preguntaba (aunque quisas sea una idea loca) de que se pudieran grabar programas para arduino en la targeta sd y que luego, el mismo arduino los lograra leer y ejecutar.

    Responder
    • Buenas Jorge,

      Me temo que se trata únicamente de memoria de datos y no puedes gestionar instrucciones.

      Un saludo, Enrique.

      Responder
  45. Buenas. Muy buen tutorial. Me podrías explicar cómo guardar los datos recogidos por un sensor? Lo he intentado y me da muchos errores y no lo consigo sad sad
    Gracias y un saludo

    Responder
    • Buenas Alexis,

      Basta con que guardes los datos que recoge tu sensor en una variable y después almacenes en la tarjeta el valor de dicha variable.

      Un saludo, Enrique.

      Responder
  46. Saludos

    Deseo saber si podemos recuperar el ultimo valor escrito en una memoria sd…
    Trabajo con un RTC(reloj en tiempo real) y almaceno un valor leido por el ADC cada vez que escribo una instruccion en el puerto serie con ello la hora y fecha. Pretendo extraer el ultimo dato de la memoria para así poder trabajar con una especie de resta definir cuanto tiempo ha pasado desde el ultimo acceso.

    Agradezco tu ayuda.

    Responder
    • Buenas Alex,

      Claro que lo puedes recuperar. De cualquier forma se me ocurre otra opción menos eficiente pero quizás más fácil de “ver” que es que almacenes el último valor en la memoria EEPROM y lo rescates desde ahí.

      Un saludo, Enrique.

      Responder
  47. Gracias Enrique. A ver si aprendo smile

    Responder
  48. Muchas gracias por este tutorías.

    Yo llevándolo a mi campo… Podré almacenar datos de los sensores de un acuario. Temperatura, ph, humedad… Y luego verlos y hacer gráficas??

    Gracias

    Responder
    • Buenas Alfonso,

      Una vez tengas los datos almacenados puedes utilizarlos ya sea desde el propio Arduino o con otros softwares.

      Un saludo, Enrique.

      Responder

Enviar un comentario

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

Cómo Leer Y Escribir Datos En La Tarjeta SD De Arduino was last modified: diciembre 14th, 2016 by Enrique
Share This

¿Me ayudas?

Hey! Espero que te esté gustando el artículo. ¿Me ayudarías compartiéndolo con tus amigos? Un pequeño paso para ti, un gran paso para EducaChip. :) ¡Gracias!