TUTORIAL RTC DS3231 Con Arduino
TUTORIAL RTC DS3231 Con Arduino
Requisitos:
1. Computadora (mac)
2. Arduino UNO
3. Modulo RTC DS1307
4. Breadboard
5. Arduino IDE (https://www.arduino.cc/en/Main/Software)
El modulo DS1307 RTC es este:
Primero lo que vamos a hacer es configurar el RTC para que obtenga la hora correcta. En este caso
obtendrá la hora de nuestra computadora.
VCC(rtc) – 5V Uno
RTC_DS1307 rtc;
void setup ()
{
while (!Serial); // para Leonardo/Micro/Zero
Serial.begin(57600);
Wire.begin();
rtc.begin();
if (! rtc.isrunning())
{
Serial.println("RTC no esta configurada!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
void loop ()
{
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(3000);
}
http://www.elecrow.com/wiki/index.php?title=Tiny_RTC
Veamos que utilidad le podemos dar a esto. En la siguiente parte analizamos el uso de las alarmas!
Requisitos:
Computadora (mac)
1. Arduino UNO
2. Modulo RTC DS1307
3. Breadboard
4. Arduino IDE (https://www.arduino.cc/en/Main/Software)
#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
const char *monthName[12] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
tmElements_t tm;
void setup()
{
Serial.begin(9600);
bool parse=false;
bool config=false;
// obtener fecha de computadora
if (getDate(__DATE__) && getTime(__TIME__))
{
parse = true;
tm.Hour = Hour;
tm.Minute = Min;
tm.Second = Sec;
return true;
}
bool getDate(const char *str)
{
char Month[12];
int Day, Year;
uint8_t monthIndex;
if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
tm.Day = Day;
tm.Month = monthIndex + 1;
tm.Year = CalendarYrToTm(Year);
return true;
}
Ya tenemos a nuestra disposición 2 distintas librerías para lograr lo mismo. Recordemos que las librerías
son archivos de código que toman las instrucciones de nivel mas bajo que utilizan los modelos y sensores
y los convierten en funciones y valores fáciles de entender a los humanos.
Es decir, recordemos que nuestros sensores lo único que interpretan son corrientes y los distintos tipos.
Estas corrientes se traducen a bits y bytes que producen senales binarias de 0 y 1, que son interpretadas
por los distintos chips. Las librerías hacen un interfaz a este nivel mas bajo y funcionan como traductor.
Las librerías toman los comandos que nosotros queremos enviar (medir intensidad de luz, medir gas CO,
almacenar datos en SD, cual es la hora actual) y convierten esos comandos en lenguaje binario y
corrientes que los electrónicos pueden entender. Así mismo cuando los electrónicos contestan con
corrientes, las convierten en lenguaje binario y luego en funciones con resultados que nosotros podamos
entender.
Ok, podemos almacenar la hora en un modulo operado por su propia batería. Esto es lo mismo que hace
una computadora para almacenar la hora que siempre tiene aunque nosotros apaguemos la computadora al
final del dia.
Veamos el uso que podemos darle a tener esta hora referencia para usar alarmas.
Requisitos:
Computadora (mac)
1. Arduino UNO
2. Modulo RTC DS1307
3. Breadboard
4. Arduino IDE (https://www.arduino.cc/en/Main/Software)
5.
Arduino Tutorial Real Time Clock RTC DS1307
El código:
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.