Arduino (IoT): Simple Tutorial RTC: Parte III – Alarmas

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial RTC: Parte III – Alarmas

En esta parte utilizamos un DS1307 para disparar alarmas.  Las alarmas son muy útiles para realizar tareas en momentos específicos.  Algunos módulos de RTC traen alarmas incorporadas como el DS3231 y otros.  Pero el modulo DS1307 no trae alarmas incorporadas.  Es decir que solo puede llevar la hora pero no configurar y disparar alarmas cuando se le programe.  Para eso usaremos ayuda de las librerías Time y TimeAlarms.

Requisitos:

  1. Computadora (mac)
  2. Arduino UNO
  3. Modulo RTC DS1307
  4. Breadboard
  5. Arduino IDE (https://www.arduino.cc/en/Main/Software)
Arduino Tutorial Real Time Clock RTC DS1307 Santiapps Marcio Valenzuela
Arduino Tutorial Real Time Clock RTC DS1307

El código:

/** RTC Alarms without DS3231 without powering down */
#include <Wire.h>
#include "RTClib.h"
#include <Time.h>
#include <TimeAlarms.h>
RTC_DS1307 rtc;

void setup(){
 Serial.begin(9600);
 Wire.begin();
 rtc.begin();
 if (! rtc.isrunning()) {
 Serial.println("RTC is NOT running!");
 //rtc.adjust(DateTime(__DATE__, __TIME__));
 Serial.print("time set auto");
 }
 
 
 //setTime(8,29,0,1,1,11); // Fecha Saturday 8:29:00am Jan 1 2011
 DateTime now = rtc.now();
 setTime(now.hour(), now.minute(), now.second(), now.month(), now.day(), now.year());
 // create the alarms 
 // Crear alarmas 
 Alarm.alarmRepeat(16,35,0, MorningAlarm); // 8:00am every day
 Alarm.alarmRepeat(16,50,0,EveningAlarm); // 4:00pm every day 
 Alarm.alarmRepeat(17,05,0,EveningAlarm); // 1:00am every day 
 //Alarm.alarmRepeat(dowSaturday,8,30,30,WeeklyAlarm); // 8:30:30 every Saturday 
 //Alarm.timerRepeat(15, Repeats); // timer for every 15 seconds 
 //Alarm.timerOnce(10, OnceOnly); // called once after 10 seconds 
 Serial.print("Alarms listas!");
}

void loop(){ 
 digitalClockDisplay();
 Alarm.delay(1000); // esperar 1 segundo entre displays
}

// Funciones de Alarma:
void MorningAlarm(){
 Serial.println("Alarm: - read CO/V & post to web"); 
}

void EveningAlarm(){
 Serial.println("Alarm: - read CO/V & post to web"); 
}

void DawnAlarm(){
 Serial.println("Alarm: - read CO/V & post to web"); 
}

void WeeklyAlarm(){
 Serial.println("Alarm: - its Monday Morning"); 
}

void ExplicitAlarm(){
 Serial.println("Alarm: - this triggers only at the given date and time"); 
}

void Repeats(){
 Serial.println("15 second timer"); 
}

void OnceOnly(){
 Serial.println("This timer only triggers once"); 
}

void digitalClockDisplay()
{
 // digital clock display of the time
 Serial.print(hour());
 printDigits(minute());
 printDigits(second());
 Serial.println(); 
}

void printDigits(int digits)
{
 Serial.print(":");
 if(digits < 10)
 Serial.print('0');
 Serial.print(digits);
}

Veamos este proyecto.  Estamos usando las librerías de Time & TimeAlarms para crear alarmas y forrajear fechas y hora.

Primero, tenemos la opción de programar una hora específica al modulo en lugar de leer la del computador.  La linea para asignar la hora del computador como vimos anteriormente, esta comentada.

Segundo, creamos 5 alarmas.  Una es para las 8:30am y otra para las 5:45pm todos los días.  La otra es una alarma solo para los días Sábados a las 8:30am.  Las ultimas dos son timers donde uno se repite cada 15 segundos y el otro se dispara a los 10 segundos una única vez.

Finalemente los últimos 2 métodos solo imprimen la hora actual (en base a la referencia creada) en el Monitor Serial.

Las alarmas son útiles para realizar ciertas tareas en cierto tiempo.  Si, también se puede usar una alarma como una función integra de un proyecto Arduino tipo Reloj despertador”.  Pero aun mas util es usarlas para hacer que nuestro proyecto utilice menos energía.  Como veremos en el uso del modulo DS3231, se puede hacer dormir la UNO completa y hacer que el RTC DS3231 guarde su hora y según la alarma deseada, mande un pulso a la UNO para que aquella despierte a cierta hora todos los días y tome muestras.  Esto hace que el consumo energético de nuestro proyecto sea mucho menor y así incrementamos su autonomía.

Si quisiéramos ahorrar energía tendríamos que apagar la Arduino lo cual se puede lograr con el Internal WatchDog Timer (WDT) o usando la librería LowPower.  Aprenderemos a hacer esto en el siguiente tutorial.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s