Search

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 almacenarnos 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:

Esquema con modulo micro SD



Técnico medio y superior en telecomunicaciones e informática.