Arduino Nano - Registrar datos con marca de tiempo en la tarjeta SD

Este tutorial le explica cómo escribir un registro con marca de tiempo en la tarjeta microSD usando Arduino Nano. Específicamente, cubriremos:

La hora se obtiene de un módulo RTC y se almacena en una tarjeta Micro SD junto con los datos.

La información que se almacena en la tarjeta microSD puede ser de cualquier tipo de dato. Esto podría incluir:

En resumen, este tutorial toma los valores de dos pines analógicos como ejemplo de datos. Es fácil modificar el código para ajustarlo a cualquier tipo de dato.

Registro de Arduino Nano en la tarjeta microSD

Hardware Requerido

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cable USB A a Mini-B
1×Tarjeta Micro SD
1×Módulo de Tarjeta Micro SD
1×(Opcional) Adaptador de Tarjeta de Memoria MicroSD a SD
1×Módulo Reloj de Tiempo Real (RTC) DS3231
1×Batería CR2032
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Sobre el módulo de tarjeta microSD y el módulo RTC

Si no está familiarizado con el módulo de tarjeta micro SD y el módulo RTC, incluyendo sus pines, cómo funcionan y cómo programarlos, los siguientes tutoriales pueden ayudar:

Diagrama de Cableado

  • Puedes usar cables de puente macho-hembra para conectar el módulo de la tarjeta microSD al Arduino Nano
Diagrama de cableado del módulo de tarjeta microSD para Arduino Nano.

This image is created using Fritzing. Click to enlarge image

  • O también puedes conectar el módulo de la tarjeta microSD a la placa de pruebas y luego usar cables de puente macho a macho
Diagrama de cableado del módulo de tarjeta microSD para Arduino Nano

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Nano y otros componentes.

Arduino Nano - Registrar datos con marca de tiempo en la tarjeta microSD

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-log-data-with-timestamp-to-sd-card */ #include <SD.h> #include <RTClib.h> #define PIN_SPI_CS 4 #define FILE_NAME "log.txt" RTC_DS3231 rtc; File myFile; void setup() { Serial.begin(9600); // SETUP RTC MODULE if (!rtc.begin()) { Serial.println(F("Couldn't find RTC")); while (1); } if (!SD.begin(PIN_SPI_CS)) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); while (1); // don't do anything more: } Serial.println(F("SD CARD INITIALIZED.")); Serial.println(F("--------------------")); } void loop() { // open file for writing myFile = SD.open(FILE_NAME, FILE_WRITE); if (myFile) { Serial.println(F("Writing log to SD Card")); // write timestamp DateTime now = rtc.now(); myFile.print(now.year(), DEC); myFile.print('-'); myFile.print(now.month(), DEC); myFile.print('-'); myFile.print(now.day(), DEC); myFile.print(' '); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); // delimiter between timestamp and data // read data int analog_1 = analogRead(A0); int analog_2 = analogRead(A1); // write data myFile.print("analog_1 = "); myFile.print(analog_1); myFile.print(", "); // delimiter between data myFile.print("analog_2 = "); myFile.print(analog_2); myFile.write("\n"); // new line myFile.close(); } else { Serial.print(F("SD Card: error on opening file ")); Serial.println(FILE_NAME); } delay(2000); // delay 2 seconds }

Pasos R\u00e1pidos

  • Asegúrate de que la tarjeta Micro SD esté formateada como FAT16 o FAT32 (puedes encontrar instrucciones sobre cómo hacer esto buscando en Google).
  • Copia el código y ábrelo en el IDE de Arduino.
  • Haz clic en el botón Subir en el IDE de Arduino para enviar el código al Arduino Nano.
  • Revisa los resultados en el Monitor Serial.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
SD CARD INITIALIZED. -------------------- Writing log to SD Card Writing log to SD Card Writing log to SD Card Writing log to SD Card Writing log to SD Card Writing log to SD Card Writing log to SD Card
Ln 11, Col 1
Arduino Nano on COM15
2
  • Retire la tarjeta microSD del módulo microSD.
  • Inserte la tarjeta microSD en un lector de tarjetas SD USB.
  • Conecte el lector de tarjetas SD USB al PC.
  • Abra el archivo log.txt en su ordenador; aparecerá como se muestra a continuación.
Registro de Arduino Nano en una tarjeta microSD con información de tiempo

Si no dispone de un lector USB de tarjetas SD, puede examinar el contenido del archivo de registro ejecutando el código de Arduino Nano que se muestra a continuación.

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-log-data-with-timestamp-to-sd-card */ #include <SD.h> #define PIN_SPI_CS 4 #define FILE_NAME "log.txt" File myFile; void setup() { Serial.begin(9600); if (!SD.begin(PIN_SPI_CS)) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); while (1); // don't do anything more: } Serial.println(F("SD CARD INITIALIZED.")); // open file for reading myFile = SD.open(FILE_NAME, FILE_READ); if (myFile) { while (myFile.available()) { char ch = myFile.read(); // read characters one by one from Micro SD Card Serial.print(ch); // print the character to Serial Monitor } myFile.close(); } else { Serial.print(F("SD Card: error on opening file ")); Serial.println(FILE_NAME); } } void loop() { }

Arduino Nano - Registro de datos en varios archivos

El registro en un solo archivo puede generar un tamaño de archivo grande con el tiempo y dificultar su revisión. El código que se muestra a continuación dividirá el registro en varios archivos, con:

  • Un archivo por día
  • El nombre de archivo es la fecha en formato YYYYMMDD.txt
/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-log-data-with-timestamp-to-sd-card */ #include <SD.h> #include <RTClib.h> #define PIN_SPI_CS 4 RTC_DS3231 rtc; File myFile; char filename[] = "yyyymmdd.txt"; // filename (without extension) should not exceed 8 chars void setup() { Serial.begin(9600); // SETUP RTC MODULE if (!rtc.begin()) { Serial.println(F("Couldn't find RTC")); while (1); } if (!SD.begin(PIN_SPI_CS)) { Serial.println(F("SD CARD FAILED, OR NOT PRESENT!")); while (1); // don't do anything more: } Serial.println(F("SD CARD INITIALIZED.")); Serial.println(F("--------------------")); } void loop() { DateTime now = rtc.now(); int year = now.year(); int month = now.month(); int day = now.day(); // update filename filename[0] = (year / 1000) + '0'; filename[1] = ((year % 1000) / 100) + '0'; filename[2] = ((year % 100) / 10) + '0'; filename[3] = (year % 10) + '0'; filename[4] = (month / 10) + '0'; filename[5] = (month % 10) + '0'; filename[6] = (day / 10) + '0'; filename[7] = (day % 10) + '0'; // open file for writing myFile = SD.open(filename, FILE_WRITE); if (myFile) { Serial.println(F("Writing log to SD Card")); // write timestamp myFile.print(now.year(), DEC); myFile.print('-'); myFile.print(now.month(), DEC); myFile.print('-'); myFile.print(now.day(), DEC); myFile.print(' '); myFile.print(now.hour(), DEC); myFile.print(':'); myFile.print(now.minute(), DEC); myFile.print(':'); myFile.print(now.second(), DEC); myFile.print(" "); // delimiter between timestamp and data // read data int analog_1 = analogRead(A0); int analog_2 = analogRead(A1); // write data myFile.print("analog_1 = "); myFile.print(analog_1); myFile.print(", "); // delimiter between data myFile.print("analog_2 = "); myFile.print(analog_2); myFile.write("\n"); // new line myFile.close(); } else { Serial.print(F("SD Card: error on opening file ")); Serial.println(filename); } delay(2000); // delay 2 seconds }

Una vez que hayas terminado una carrera larga, si:

  • Retira la tarjeta microSD del módulo de tarjeta microSD
  • Coloca la tarjeta microSD en un lector de tarjetas SD USB
  • Conecta el lector de tarjetas SD USB a tu PC
  • Podrás ver los archivos de la siguiente manera:
Registro de Arduino Nano en la tarjeta microSD: varios archivos

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!