Arduino Control de Tiempo

Muchas veces, es necesario en nuestros proyectos controlar el tiempo que pasa o poder obtener la fecha; con los microcontroladores atmel que nos trae Arduino, puede ser una tarea tediosa y que si no tenemos cuidado, puede hacer que nuestro proyecto se bloquee o no funcione como debería.

Muchos os preguntaréis que a que es debido esto si vuestro código ha funcionado durante días sin ningun problema pero que derrepente ha dejado de funcionar. Pues amigos esto es debido a una sencilla razón la función milis. Esta función nos permite obtener el número de milisegundos que lleva nuestro arduino encendido. Con dicha función podemos controlar el tiempo pasado y podemos realizar acciones. Sin embargo, he aquí el problema. Dicha función devuelve un long por lo que si lo dejamos encendido mucho tiempo puede desbordarse. Cuanto tiempo? pues calculemos:

Captura de pantalla 2015-07-07 a las 10.57.00

 

Por lo tanto tenemos 24 días antes de que se desborde la variable long. Es por esto que tenemos que tener esto en cuenta a la hora de hacer proyectos que van a estar mucho tiempo encendidos. Para solucionarlo, podemos realizar las siguientes acciones:

  1. Reiniciar el propio microcontrolador cada cierto tiempo para así evitar el desbordamiento. Sin embargo, tenemos que tener los datos que no queramos perder en la EEPROM antes de reiniciar ya que perderemos los datos de la RAM al reiniciarse.
  2. Utilizar un reloj de Tiempo Real (DS1327) para poder controlar el tiempo. Este dispositivo, nos permite obtener la fecha actual y no depender del reloj del propio microcontrolador. Os dejamos un enlace por si queréis comprarlo.
    Reloj Tiempo Real (DSC1327)

En este tutorial, vamos a mostraros el fragmento de código para poder utilizar el reloj interno del microcontrolador teniendo en cuenta el anterior problema dado.

 

long timepassed;
int time;
void setup(){
pinMode(13,OUTPUT);
time=millis();
}
 
void blink(){
for(int i=0;i<5;i++){
 digitalWrite(13,HIGH);
 delay(1000);
 digitalWrite(13,LOW);
 delay(1000);
 }
 } 
 
void loop(){   
   timepassed= millis();
   if(timepassed- time >5000){
    blink();
    time = mills();
  }
 
}

Como podemos ver cuando el tiempo pasado y la última vez que entró en el if, es mayor que 5000(5 segundos) realizará un blink de unos 10 segundos parpadeando. Por lo que se realizará la acción cada 5 segundos.

Sin embargo no olvidemos que debemos reiniciar nuestro arduino cada cierto tiempo para evitar el problema que hemos visto ó utilizar un reloj de tiempo real.

Os mantendremos informados sobre más pequeños trucos sobre arduino para mejorar vuestros proyectos.

3 Comments on "Arduino Control de Tiempo"

  1. hola, necesito realizar un programa con arduino y no tengo mucha idea, podríais ayudarme.
    Mi correo es nvenece@ymail.com

  2. Buenísima la información, Gracias

Deja un comentario.

Tu dirección de correo no será publicada.


*


*