Leer y escribir en una tarjeta SD o micro SD con Arduino


arduino-micro-sd

¿Qué es un lector SD o micro SD?

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

Las tarjetas SD y micro SD se han convertido en un estándar, desplazando a otros medios de almacenamiento de datos debido a su gran capacidad y pequeño tamaño. Por este motivo han sido integradas en una gran cantidad de dispositivos, siendo en la actualidad componentes frecuentes en ordenadores, tablets y smartphones, entre otros.

Dentro del mundo de Arduino, es posible encontrar lectores de bajo coste tanto para tarjetas SD como micro SD. Los primeros en aparecer fueron los lectores SD y posteriormente los micro SD. Por tanto, en general, los módulos con micro SD son modelos más modernos que los de SD

En ambos tipos de lectores, la lectura puede realizarse a través de bus SPI. Aunque pueden disponer de otros interfaces, como bus I2C o UART, normalmente es preferible emplear SPI por su alta tasa de transferencia.

Anuncio:

Respecto a las tarjetas empleadas, podemos emplear tarjetas SD o SDSC (Standard Capacity) o SDHC (High Capacity), pero no SDXC (Extended Capacity). Deberá estar formateada en sistema de archivos FAT16 o FAT32.

La tensión de alimentación es de 3.3V, pero en la mayoría de los módulos se incorpora la electrónica necesaria para conectarlo de forma sencilla a Arduino, lo que frecuentemente incluye un regulador de voltaje que permite alimentar directamente a 5V.

Emplear una tarjeta SD o micro SD en con Arduino tiene la ventaja de proporcionar una memoria casi ilimitada para nuestros proyectos. Además es no volátil (es decir, resiste cuando se elimina la alimentación), y puede ser extraída y conectada a un ordenador con facilidad.

La gran desventaja es que supone una importante carga de trabajo para Arduino. Sólo el programa ocupará el 40% de la memoria Flash, y casi el 50% de la memoria dinámica. El uso del procesador también es exigente.

En general, manejar una tarjeta micro SD o SD puede considerarse en al límite de la capacidad de Arduino como procesador. Aunque es posible emplearlas en proyectos sencillos, en proyectos reales deberíamos plantearnos emplear otra opción como un Raspberry Pi.

En los proyectos caseros se emplean tarjetas SD y micro SD, principalmente, en proyectos de tipo datalogger, es decir, para mantener el registro de las mediciones de un sensor. También pueden ser empleadas, por ejemplo, para llevar movimientos o rutas de robots precalculados, y cargarlos bajo dejo demanda.

Precio

Los lectores de tarjetas son dispositivos muy baratos. Podemos encontrar lectores de tarjetas micro SD por unos 0.35€, y lectores de tarjetas SD por unos 0.65€, buscando en vendedores internacionales de eBay o AliExpress.

arduino-sd-componente

Dado que los lectores de tarjetas micro SD son más baratos, modernos, y compactos, normalmente preferiremos los lectores micro SD a los SD. El único motivo real para comprar un lector SD frente a un micro SD es aprovechar alguna tarjeta que tengamos disponible.

arduino-micro-sd-componente

Respecto a la tarjeta, es sabido que han tenido un gran descenso en sus precios. En la actualidad, una tarjeta SD o micro SD de 1GB tiene un precio muy reducido, y es capacidad más que suficiente para la mayoría de proyectos. Incluso es frecuente que podamos reciclar antiguas tarjetas que hemos sustituido por otras de mayor capacidad.

arduino-sd-card

Esquema de montaje

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,

arduino-sd-esquema

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

arduino-micro-sd-esquema

En ambos casos la conexión, vista desde el lado de Arduino, es la misma, y quedaría así.

arduino-micro-sd-conexion

Los pines SPI indicados son válidos para los modelos de Arduino Uno, Nano y Mini Pro. Para otros modelos de Arduino consultar el esquema patillaje correspondiente.

Verificar que vuestra placa es tolerante a un bus de 5V antes de conectarla a Arduino. Si no, tendréis que usar un adaptador de nivel lógico.

Ejemplo de código

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.

También incorpora funciones para la lectura y escritura de ficheros, bajo el objeto File.

La librería proporciona ejemplos de código, que resulta aconsejable revisar. Los siguientes ejemplos son modificaciones a partir de los disponibles en la librería.

Lectura de un fichero

En este ejemplo 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 un problema real el fichero podría contener, por ejemplo, los ángulos que deben adoptar los servos de un robot para adoptar distintas posiciones, separados por comas.

En la lectura de cada línea se procesaría la información leída, y se emplearía para realizar las acciones oportunas.

Escritura de un fichero (datalogger)

El siguiente ejemplo muestra las funciones de escritura. El ejemplo 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 el ejemplo simplemente 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.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Anuncio:

Previous Lectura de tarjetas RFID con Arduino y lector MIFARE RC522
Next Reloj y calendario en Arduino con los RTC DS1307 y DS3231
1000
7 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
8 Comment authors
newest oldest
joaquin

Solo sugerir a este post la corrección en el diagrama de conexionado de los pines que van del módulo al arduino ya que la patilla CS en el módulo, no va al pin 9 del arduino sino al Pin 4, tal como lo indica el ejemplo datalog de la librería SD.h

Félix

Buenas tardes,

Antes que nada darte las gracias por estos tutoriales son muy útiles. He aprendido bastante con ellos.

En mi caso me gustaría almacenar la lectura de un sensor en una tarjeta SD pero cuando se pulsase un pulsador pero no encuentro la forma, la idea o el truco. Se que estoy un poco verde en todo esto.

Puedes ayudarme?

Muchas gracias,

Un saludo,

Félix

pepe

Como puedo leer el CID de una tarjeta SD para poder copiarlo posteriormente en otra??

Adelina Mayol

Buenas… gracias por el post.

Me surgio una duda mientras lei el codigo de «LECTURA DE UN FICHERO»,
en el segundo IF, primero evalua la variable dataLine y despues la declara como string.
Me pregunto si no deberia declararse antes del if.
Gracias

Alejandro Bianchi

hola quería consultar si hay forma de conectar 2 sd a la misma placa de arduino? en una tengo imágenes fijas que son las que uso por pantalla y en la otra sd debería guardar a modo de datalogger el registro de sensores. si me pueden explicar como hacerlo se los agradecere!

Saludos!

Carlos

Una consulta, al decir «en proyectos reales deberíamos plantearnos emplear otra opción como un Raspberry Pi.» Se puede utilizar Arduino para manejar los sensores mediante programación y luego hacer un enlace a un Raspberry Pi y hacer solo el guardado de los datos que se registran? O se debe utilizar Raspberry Pi en todo el proyecto?

Andrés

Quería hacer un datalogger con Arduino y una tarjeta SD, con la peculiaridad de descargar los datos cada 2 semanas mientras el Arduino sigue funcionando más tiempo, varios meses.

¿Es posible conectar un ordenador portátil (o un móvil Android) al Arduino por el cable usb para descargar los datos de dos semanas sin sacar la tarjeta del Arduino y que el datalogger siga funcionando meses?

Gracias, un saludo