Arduino

Guardado automático en SD con Arduino.

¿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?

  • Pila RTC DS1307 Comprar en Amazon (Este  nos mantendrá nuestro Arduino en tiempo real)
  • Sensor Comprar en Amazon ( En este caso es un sensor de temperatura DS18B20 Dallas)
  • Placa Arduino Comprar en Amazon (En este caso Arduino Uno) 
  • Módulo SD o micro SD Comprar en Amazon (La función de este será, la de almacenar los datos cada cierto tiempo automáticamente).

 

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:

Los comentarios de Disqus están cargando....
Share
Publicado por
José Alejandro

Posts recientes

MotoTag: La Solución de Motorola para Mantener tus Pertenencias Siempre Localizadas

En un mundo donde perder nuestras pertenencias es más común de lo que quisiéramos, tener…

ago 2 meses

Evitar el bloqueo de Telegram en España

Para los seguidores de Telegram, esta semana concluye con serios contratiempos. Según reportes de Telecinco,…

ago 8 meses

Ryujinx: La alternativa a Yuzu para jugar juegos de Nintendo Switch en tu PC

Yuzu para Switch y Citra para 3DS, tras demandas de Nintendo por facilitar la piratería.…

ago 8 meses

Cómo son las gafas Apple Vision Pro por dentro

El Apple Vision Pro es un dispositivo revolucionario que ha impresionado a muchos usuarios, incluso…

ago 9 meses

Que significa GaN (Nitruro de Galio) en la Electrónica de Consumo

Seguramente nos habremos encontrado las siglas GaN pero no semos que es pero aqui te…

ago 10 meses

Mobvoi ya ha empezado con la actualización Wear OS 3.5

Desde hoy los TicWatch se estan actualizando, que estaban en una versión antigua de Wear…

ago 11 meses