Como medir el tiempo con Arduino y la librería Time.

Como medir el tiempo con Arduino y la librería Time.

Como medir el tiempo con Arduino y la librería Time.



Hola amigos tecnólogos, en nuestra entrada de hoy veremos una forma sencilla de medir el tiempo con Arduino sin necesidad de hacer calculos complejos y laboriosos.
Esto lo haremos con la ayuda de la librería Time, la cual nos facilitara mucho el trabajo a la hora de gestionar un calendario con fecha y hora.
Para asimilar los conceptos representaremos la fecha y hora en el monitro serial y programaremos una alarma.


Materiales necesarios.



Arduino uno leantec  Arduino Uno

¡Hazte con tus materiales a un 10% de descuento! Disponible para los 20 primeros.
Código Descuento: A1

Conozcamos la librería Time.



La librería Time la desarrollo Arduino, aunque no viene por defecto en el ide de Arduino. Para usarla solo hay que instalarla según el procedimiento normal de instalación de librarías.


En esta librería lo primero que se hace es declarar un tipo especial de variable llamada time_t de 32 bits. Esta variable es la responsable de que todo funcione.

El principio fundamental de funcionamiento de esta librería es que la variable time_t almacena en un formato especial los segundos transcurridos desde el 1 de enero de 1970 hasta hoy. Este método es el mismo que usa sistemas operativos basados en Linux.

Las conversiones son automaticas, por lo que no hay que complicarse haciendo calculos largos y complejos.

La ventaja principal de manejar esta librería es que al convertir la fecha y lahora en un numero de segundos, podemos operar libremente con este número, resta o sumando fechas y horas y el resusltado seguira siendo una fecha y una hora.
El principal inconveniete es que no podemos trabajar con fecha anteriores al 1 de enero de 1970.

Para empezar a manejar la librería el primer paso es insertar la fecha desde la que queremos empezar a contar, esto lo hacemos con la siguiente función:

  //Formato: hora, minutos, segundos, días, mes, año
  setTime(19,28,50,20,10,2015);
A continuación declaramos la variable time_t T y la igualamos a la función now(). Esta función contiene la fecha que antes insertamos.

  time_t t = now();//Declaramos la variable time_t t

Prácticas con la librería.



Esta es la parte que nos gusta a todos, la parte de experimetar.

El siguiente código representa la fecha y la hora en el monitor serial.
#include <Time.h>//Incluimos la librería Time

void setup()
{   
  Serial.begin(115200);//Inicializamos el puerto serie.
  //Anotamos la hora y la fecha desde la que nuestro programa empezará a contar.
  //Formato: hora, minutos, segundos, días, mes, año
  setTime(19,28,50,20,10,2015);
}
void loop()
{   
  time_t t = now();//Declaramos la variable time_t t

//Imprimimos la fecha y lahora
  Serial.print(day(t));
  Serial.print(+ "/") ;
  Serial.print(month(t));
  Serial.print(+ "/") ;
  Serial.print(year(t)); 
  Serial.print( " ") ;
  Serial.print(hour(t));  
  Serial.print(+ ":") ;
  Serial.print(minute(t));
  Serial.print(":") ;
  Serial.println(second(t));
  delay(1000);//Esperamos 1 segundo

}
En la imagen de abajo se observa como la hora aumenta segundo a segundo desde la fecha de inicio que le marcamos.

monitor serial arduino

Una prueba que podeis hacer es comprobar como al aumentar el tiempo de delay, el reloj sigue contando correctamente los segundos, aunque no los representa todos.
#include <Time.h>//Incluimos la librería Time

void setup()
{   
  Serial.begin(115200);//Inicializamos el puerto serie.
  //Anotamos la hora y la fecha desde la que nuestro programa empezará a contar.
  //Formato: hora, minutos, segundos, días, mes, año
  setTime(19,28,50,20,10,2015);
}
void loop()
{   
  time_t t = now();//Declaramos la variable time_t t

//Imprimimos la fecha y la hora
  Serial.print(day(t));
  Serial.print(+ "/") ;
  Serial.print(month(t));
  Serial.print(+ "/") ;
  Serial.print(year(t)); 
  Serial.print( " ") ;
  Serial.print(hour(t));  
  Serial.print(+ ":") ;
  Serial.print(minute(t));
  Serial.print(":") ;
  Serial.println(second(t));
  delay(3000);//Esperamos 3 segundos

}
En la siguiente captura de pantalla del monitor serial se puede ver como el reloj sigue pasando corréctamente aunque el delay aumente.

monitor serial arduino leantec

Por último programaremos una alarma a una hora concreta y con una duración de un minuto.
#include <Time.h>//Incluimos la librería Time

void setup()
{   
  Serial.begin(115200);//Inicializamos el puerto serie.
  //Anotamos la hora y la fecha desde la que nuestro programa empezará a contar.
  //Formato: hora, minutos, segundos, días, mes, año
  setTime(19,28,50,20,10,2015);
}
void loop()
{   
  time_t t = now();//Declaramos la variable time_t t

//Imprimimos la fecha y lahora
  Serial.print(day(t));
  Serial.print(+ "/") ;
  Serial.print(month(t));
  Serial.print(+ "/") ;
  Serial.print(year(t)); 
  Serial.print( " ") ;
  Serial.print(hour(t));  
  Serial.print(+ ":") ;
  Serial.print(minute(t));
  Serial.print(":") ;
  Serial.println(second(t));
  delay(1000);//Esperamos 1 segundo

//Programamos la hora a la que la alarma se activará en este caso 19:30
  if(hour(t)==19 && minute(t)==30)
  {
    Serial.println("Alarma") ;
  }

}

En la siguiente imagen vemos como la alarma se activa en la hora programada.


monitor serial arduino

En nuestro caso hemos representado la palabra alarma en el monitor serial cuando ha llegado a la hora programada, pero al igual que representamos esta palabra, podríamos haber activado una salida digital para activar algun tipo de zumbador o led.

¡Hazte con tus materiales a un 10% de descuento! Disponible para los 20 primeros.
Código Descuento: A1

15 Comments

    • Avatar
      carla valenzuela
      may 19, 2016

      hola, estoy realizando mi tesis y es relacionado con la domotica, dentro de mis objetivos este realiza que la luz se prenda o apague con un comando, consulta con esta librería podría sacar el calculo de saber cuantas horas estuvo la luz prendida y cuantas horas estuvo apagada? gracias

    • Avatar
      miguel
      may 26, 2016

      Observo que hasta que no abrimos el monitor serie no empieza a contar el tiempo. Y si lo cerramos y volvemos a abrir el monitor serie empieza otra vez desde el principio a contar el tiempo. Esto es raro no?. Es como si el reloj interno del arduino se parara cuando cerramos el monitor serie.

    • Avatar
      pedro
      jun 7, 2016

      como enciendo una bomba de agua durante 5 minutos cada 24 horas

    • Avatar
      leo
      ago 9, 2016

      descargue e instalé la librería, Copie el código y lo compile pero me da error desde el princiio dice que no se ha declarado en el scope "set time" y todas las demás variables para optener la fecha y la hora

      • Avatar
        M
        ago 23, 2016

        Solo cambia como se declara la libería, no es "#include " debe ser "#include "

    • Avatar
      luis
      ago 31, 2016

      Tengo el mismo problema, me dice que no se ha declarado setTime en el ámbito,?? y no veo la diferencia que indica M entre no es "#include " debe ser "#include "

      • Avatar
        Edgar
        feb 15, 2017

        La libreria Time está incompleta, deben descargarla de GitHub https://github.com/PaulStoffregen/Time. Descargarán un archivo Zip que hay que añadir en las librerias de arduino y en el encabezado del probrama deben incluir la libreria time de tal manera que queden las siguientes dos lineas #include #include Si solo tienen #include marca el error debido a que necesita el #include Razón por la cual deben descargar el Time-master.zip en la liga que les dejo de GitHub

    • Avatar
      Edu
      sep 13, 2016

      mismo error" 'setTime' was not declared in this scope " esta es mi linea del setTime " setTime(12,21,56,13,9,2016);" y mi linea de la declaracion de la libreria "#include " aqui mi codigo (quiero que se active un relevador a los primeros 15 segundos) #include void setup(){ setTime(12,21,56,13,9,2016); // Las 12;00:00 del dia 1 de Ene de 2014 pinMode(12, OUTPUT); } void loop (){ time_t t = now(); if (second(t)<=15) { digitalWrite(12, HIGH); } else { digitalWrite(12, LOW); delay(1000); } }

      • Avatar
        Pablo R
        oct 6, 2016

        Tuve el mismo error, pero se debio a ue la libreria estaba mal instalada, hay que descargar la libreria, abrir el achivo .rar, copiar la carpeta en la ubicacion "libraries" ubicada en la carpeta donde se instalo el programa de arduino y listo. eso fue lo que me soluciono ese problema

    • Avatar
      Davket
      sep 20, 2016

      Tengo una duda, es que necesito conectarle un contador digital para un proyecto que me toca hacer, ¿podrían darme instrucción de como podría hacerlo?

    • Avatar
      dardo
      oct 8, 2016

      Hola, muy buena la explicación, yo tenia el mismo problema al cargar el código que tira el error de " 'setTime' was not declared in this scope " esta es mi linea del setTime ". lo solucione borrando en el código #include //Incluimos la librería Time e incluyendo la librería desde incluir librerias. aca les dejo el codigo: #include #include void setup() { Serial.begin(115200);//Inicializamos el puerto serie. //Anotamos la hora y la fecha desde la que nuestro programa empezará a contar. //Formato: hora, minutos, segundos, días, mes, año setTime(19,28,50,20,10,2015); } void loop() { time_t t = now();//Declaramos la variable time_t t //Imprimimos la fecha y lahora Serial.print(day(t)); Serial.print(+ "/") ; Serial.print(month(t)); Serial.print(+ "/") ; Serial.print(year(t)); Serial.print( " ") ; Serial.print(hour(t)); Serial.print(+ ":") ; Serial.print(minute(t)); Serial.print(":") ; Serial.println(second(t)); delay(1000);//Esperamos 1 segundo //Programamos la hora a la que la alarma se activará en este caso 19:30 if(hour(t)==19 && minute(t)==30) { Serial.println("Alarma") ; } } Saludos dardo

      • Avatar
        Johan
        dic 15, 2016

        he colocado el mismo codigo, y no se como solucionar el problema de la libreria de time. he leido acerca de la version del arduino. tengo la 1.6.1, si alguien sabe como poder arreglarlo, se lo agradecería..

    • Avatar
      Jose Salazar
      abr 18, 2017

      Yo necesito medir el tiempo real mediante software, con la libreria time, y necesito guardarel tiempo en la memoria interna del arduino, como lo haria ? gracias

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment:
Type Code

Blog Search

Recent Articles

Latest Comments

Accept Este sitio web hace uso de cookies