¿Te gustaría saber como guardar datos en tu tarjeta SD automáticamente con Arduino?
En este post se va a explicar como hacer un guardado automático pero con un módulo SD o micro SD, ya se explicó como hacer esto mismo pero con la memoria EEPROM de Arduino.
Y bien, ¿Qué se necesita para hacer este proyecto?
Pero, ¿Qué es exactamente lo que hace nuestro código?
Bien, la función del código que hay a continuación, es la de realizar un guardado automático tanto a las 12:00 como a las 18:00.
Cuando llegue una de estas dos horas definidas, guardará automáticamente los datos que está recogiendo en ese mismo momento el sensor de temperatura y lo almacenará en la tarjeta SD que tengamos insertada en el módulo SD o micro SD, el archivo que creará será nombrado como «datos.txt» (este se puede modificar).
Si hemos borrado el archivo «datos.txt» de la memoria SD, no hay ningún problema, ya que, cuando llegue la siguiente hora volverá a crear uno con el mismo nombre.
Por lo tanto, el código es el siguiente:
#include <OneWire.h> #include <DallasTemperature.h> #include <Time.h> #include <DS1307RTC.h> #include <SPI.h> #include <SD.h> OneWire ourWire(2); DallasTemperature sensors(&ourWire); //Ahora empezamos a declarar las variables: const int chipSelect = 4; // En el pin 4 de nuestro Arduino se conectará el módulo SD. bool escritura = 0; //Nos ayudará a que no hayan varias grabaciones en un mismo segundo. void setup () { pinMode(chipSelect, OUTPUT); //Indicamos que el pin del modulo SD es de salida. sensors.begin();//Inicia los sensores sensors.requestTemperatures(); SD.begin(chipSelect); //Inicia el módulo SD } void loop () { tmElements_t tm; if (RTC.read(tm)) {} //Iniciamos la pila DS1307 para que nos controle la hora que es. /* * En primer lugar hacemos cuatro comparaciones de modo que si se cumplen entrarán dentro de * nuestro if. * Por lo tanto, sí son las 12:00:00 y escritura es igual a 0 (Escritura será igual a 0 porque * está definida al inicio del sketch). De esta manera hará lo que hay dentro del if que explicaré * a continuación. */ if ((tm.Hour==12) && (tm.Minute==0) && (tm.Second==0) && (escritura==0)) { /* * Lo que se muestra a continuación es el método de creación de archivo para el módulo, * si por lo contrario ya está creado lo que hará será ir escribiendo dentro de este, * escribiendo en él lo que aparacece a continuación: */ File dataFile = SD.open("datos.txt", FILE_WRITE); //Si no existe el archivo "datos.txt" lo creará, y si existe, escribe dentro de él. if (dataFile) //Por lo tanto escribirá todo esto: { dataFile.print("Dia de la grabacion");dataFile.print(","); dataFile.print(tm.Day); dataFile.print("/"); dataFile.print(tm.Month); dataFile.print("/"); dataFile.print(tmYearToCalendar(tm.Year)); dataFile.print(","); dataFile.print("Hora de la grabacion:"); dataFile.print(tm.Hour); dataFile.print(":"); dataFile.print(tm.Minute);dataFile.print(":"); dataFile.print(tm.Second); dataFile.print(","); dataFile.print("Temperatura:");dataFile.print(sensors.getTempCByIndex(0)); dataFile.println("C");dataFile.close(); escritura=1; //Ahora lo pondremos a 1 para que no haga varias grabaciones en el mismo segundo. } } if ((tm.Hour==12) && (tm.Minute==1) && (tm.Second==0)) { escritura=0; // Cuando pase un minuto pondremos escritura a 0 para que esté preparado para la siguiente grabación. } if ((tm.Hour==18) && (tm.Minute==0) && (tm.Second==0) && (escritura==0)) { /* * Lo que se muestra a continuación es el método de creación de archivo para el módulo, * si por lo contrario ya está creado lo que hará será ir escribiendo dentro de este, * escribiendo en él lo que aparacece a continuación: */ File dataFile = SD.open("datos.txt", FILE_WRITE); //Si no existe lo crea, y si existe, escribe dentro de él. if (dataFile) { dataFile.print("Dia de la grabacion");dataFile.print(","); dataFile.print(tm.Day); dataFile.print("/"); dataFile.print(tm.Month); dataFile.print("/"); dataFile.print(tmYearToCalendar(tm.Year)); dataFile.print(","); dataFile.print("Hora de la grabacion:"); dataFile.print(tm.Hour); dataFile.print(":"); dataFile.print(tm.Minute);dataFile.print(":"); dataFile.print(tm.Second); dataFile.print(","); dataFile.print("Temperatura:");dataFile.print(sensors.getTempCByIndex(0)); dataFile.println("C");dataFile.close(); escritura=1; //Ahora lo pondremos a 1 para que no haga varias grabaciones en el mismo segundo. } } if ((tm.Hour==18) && (tm.Minute==1) && (tm.Second==0)) { escritura=0; // Cuando pase un minuto pondremos escritura a 0 para que esté preparado para la siguiente grabación. } }
Para terminar este artículo me gustaría adjuntar un esquema de conexiones por si os sirve de ayuda, y es el siguiente:
En un mundo donde perder nuestras pertenencias es más común de lo que quisiéramos, tener…
Para los seguidores de Telegram, esta semana concluye con serios contratiempos. Según reportes de Telecinco,…
Yuzu para Switch y Citra para 3DS, tras demandas de Nintendo por facilitar la piratería.…
El Apple Vision Pro es un dispositivo revolucionario que ha impresionado a muchos usuarios, incluso…
Seguramente nos habremos encontrado las siglas GaN pero no semos que es pero aqui te…
Desde hoy los TicWatch se estan actualizando, que estaban en una versión antigua de Wear…