Es común utilizar diferentes sensores con microcontroladores en aplicaciones integradas. Los microcontroladores están equipados con puertos de datos paralelos y varias interfaces de comunicación de datos en serie que permiten la interfaz y la comunicación con sensores. Hay ocasiones en las que los datos obtenidos de los sensores deben almacenarse para uso futuro. Esto podría ser simplemente para registrar datos de sensores u obtener análisis de alto nivel. Muchos microcontroladores tienen EEPROM incorporada o incorporada para almacenar datos externos, mientras que la memoria flash siempre permanece reservada para almacenar el gestor de arranque y el firmware. Esta EEPROM suele tener un tamaño de unos pocos kilobytes y solo puede almacenar una cantidad limitada de datos.
Una solución práctica a este problema es almacenar los datos del sensor en tarjetas SD o Micro SD. Los módulos de tarjetas SD y Micro SD se pueden interconectar fácilmente con Arduino (o cualquier microcontrolador) a través de la interfaz SPI. Las tarjetas SD y Micro SD facilitan una capacidad de almacenamiento de gigabytes que es más que suficiente para registrar datos de cualquier número de sensores o cualquier cantidad de datos.
En este proyecto, conectaremos un módulo de tarjeta Micro SD con Arduino y usaremos una tarjeta Micro SD de 8 GB para registrar datos del sensor acelerómetro ADXL345. Antes de continuar con este proyecto, aprenda cómo conectar el acelerómetro ADXL345 con Arduino. Quizás también te interese trabajar en el sensor acelerómetro ADXL345.
Módulos de tarjetas SD y Micro SD
Las tarjetas SD y Micro SD son tarjetas de memoria muy utilizadas. Ambos son diferentes en tecnología y origen. Las tarjetas SD son un poco voluminosas (24 mm x 32 mm x 2,1 mm) en comparación con las tarjetas Micro SD. La capacidad máxima de almacenamiento está limitada a 2 GB. Las tarjetas SD se utilizan comúnmente en computadoras portátiles, cámaras digitales y monitores para bebés. Las tarjetas Micro SD son más pequeñas (15 mm x 11 mm x 1 mm). La capacidad máxima de almacenamiento es de 16 GB. Las tarjetas Micro SD se utilizan habitualmente en teléfonos móviles, ordenadores personales, drones, cámaras de salpicadero, etc.
Los lectores de tarjetas SD y Micro SD suelen tener una interfaz SPI para comunicar datos con un microcontrolador/microcomputadora. Excepto que el lector de tarjetas SD lee/escribe una tarjeta SD y el lector de tarjetas Micro SD lee/escribe una tarjeta Micro SD, ambos tipos de módulos interactúan con Arduino (o cualquier otro microcontrolador/microcomputadora) de manera similar, y la misma biblioteca en Arduino es Se utiliza para leer o escribir en ambos tipos de módulos.
Biblioteca SD
Arduino puede comunicarse con lectores de tarjetas SD y Micro SD utilizando su biblioteca SD incorporada, ya que ambos módulos utilizan la interfaz SPI para la comunicación de datos. La biblioteca también admite sistemas de archivos FAT16 y FAT32 en tarjetas SD/Micro SD, pero los nombres de los archivos deben estar en formato 8.3. Sólo se permite un punto, aunque los nombres de archivos pueden incluir RUTAS separadas por barras. La biblioteca proporciona los siguientes métodos para trabajar con tarjetas SD/Micro SD.
SD.begin : este método inicializa la tarjeta SD/Micro SD. Toma como parámetro el pin conectado al pin SS del lector.
SD.exists : este método prueba la existencia de un archivo o directorio en la tarjeta SD/Micro SD. Toma el nombre del archivo como parámetro.
SD.mkdir : este método crea un directorio en la tarjeta SD/Micro SD. Toma el nombre del archivo, incluida la ruta, como parámetro.
SD.rmdir : este método elimina un directorio de la tarjeta SD/Micro SD. Toma el nombre del archivo, incluida la ruta, como parámetro.
SD.open : este método abre un archivo para lectura o escritura. Se requieren dos parámetros: nombre de archivo y modo. El modo determina si el archivo debe leerse o escribirse. El archivo se abrirá en modo lectura de forma predeterminada si no se especifica el modo. Si el archivo se abre para escritura, si aún no existe, se creará con el nombre de archivo y la ruta especificados.
SD.remove : este método elimina un archivo de la tarjeta SD/Micro SD. Toma el nombre del archivo, incluida la ruta, como parámetro.
También se utilizan muchos métodos de la clase de archivo integrada al leer o escribir en tarjetas SD/Micro SD. Algunas de las técnicas útiles de la clase de archivo integrada son las siguientes.
Nombre de archivo : este método devuelve el nombre del archivo.
File.available : este método comprueba si existe un archivo con un nombre determinado.
File.read : este método lee el contenido del archivo.
File.write : este método escribe datos en el archivo.
Tamaño del archivo : este método devuelve el tamaño del archivo en bytes.
File.print : este método imprime datos en el archivo.
File.println : este método imprime datos en el archivo seguido de un retorno de carro y una nueva línea.
File.close : este método cierra el archivo y garantiza que todos los datos escritos en él se guarden físicamente en la tarjeta SD/Micro SD.
Tenga en cuenta que hasta que se llame al método file.close, los datos escritos en un archivo no se guardarán. Por lo tanto, un archivo debe cerrarse después de escribirle datos. De lo contrario, los datos grabados se perderán.
Interfaz del módulo de tarjeta SD/Micro SD con Arduino
La tarjeta SD/Micro SD interactúa con Arduino a través de la interfaz SPI. El módulo tiene seis pines: VCC, GND, MISO, MOSI, SCK y CS. Los puertos SPI en Arduino UNO se muestran en la imagen a continuación.
Tenga en cuenta que el pin SS del lector de tarjetas SD/Micro SD debe estar conectado al pin 10 del Arduino UNO.
Escritura de datos en una tarjeta SD/Micro SD con Arduino
Conecte el lector de tarjetas SD/Micro SD con Arduino UNO como se describe arriba. Escribir datos en una tarjeta SD/Micro SD implica usar SD.begin, SD.mkdir (si se crea un nuevo directorio para el archivo de datos), SD.open, File.write, File.print, println y File.close. El siguiente código de ejemplo escribe una lista de sitios que pertenecen a la red de ingeniería electrónica EEWORLDONLINE en un archivo de texto. Tenga en cuenta que los datos se escriben en la tarjeta SD/Micro SD en la función de configuración porque en este caso solo se deben escribir una vez. Si se tratara de datos del sensor con marca de tiempo, la grabación en la tarjeta SD/Micro SD tendría que realizarse en la función de bucle. Además, tenga en cuenta que la clase de archivo solo necesita crear una instancia de un objeto de archivo.
El resultado del código de ejemplo anterior se muestra a continuación.
Lectura de datos de una tarjeta SD/Micro SD con Arduino
La lectura de datos de la tarjeta SD/Micro SD implica el uso de los métodos SD.begin, SD.open, File.available y File.read. Tenga en cuenta que el método File.read lee una sola línea a la vez. Debe repetirse hasta leer el número deseado de líneas o hasta el final del archivo.
El resultado del código de ejemplo anterior se muestra a continuación.
Grabación de datos del sensor en una tarjeta SD con Arduino
Ahora que contamos con el conocimiento de cómo grabar datos en una tarjeta SD/Micro SD usando un lector de tarjetas, podemos registrar datos del sensor para uso futuro. Conectemos el sensor acelerómetro ADXL345 con el Arduino y registremos diez lecturas de aceleración consecutivas en los ejes x, y, z en 500 milisegundos.
Componentes necesarios
- Arduino UNO x1
- Lector de tarjetas SD/Micro SD x1
- Tarjeta SD/Micro SD x1
- Sensor acelerómetro ADXL345 x1
- Cables de conexión/cables de puente
- tablero de prueba
Conexiones de circuito
El lector de tarjetas SD o Micro SD interactuará con Arduino a través del puerto SPI. Las conexiones del circuito entre el lector de tarjetas SD/Micro SD y el Arduino se resumen a continuación.
Arduino UNO | Lector de tarjetas SD/MicroSD |
salida de 5V | CCV |
Tierra | Tierra |
13 | SCK |
12 | señorita |
11 | MOSI |
10 | SS |
El acelerómetro ADXL345 interactúa con Arduino a través de un puerto I2C. Las conexiones del circuito entre ADXL345 y Arduino se muestran en la imagen a continuación.
El circuito final se parece al que se muestra en la imagen de abajo.
Bosquejo de Arduino
Como funciona
Arduino detecta la aceleración a lo largo de los ejes x, y, z con la ayuda del sensor acelerómetro ADXL345. El código se ejecuta una vez y lee el sensor diez veces en intervalos de 500 milisegundos. Las lecturas se escriben en un archivo de texto en una tarjeta Micro SD y se guardan.
Resultado
El siguiente video muestra el Arduino grabando diez lecturas consecutivas de ADXL345 en una tarjeta Micro SD de 8 GB.
El siguiente vídeo muestra la comprobación de los datos grabados en la tarjeta micro SD.