Descrición:
Un módulo RTC (Real Time Clock) ou “Reloxo de tempo real” consiste nun circuíto integrado alimentado por unha batería que rexistra en todo momento a data, o día da semana e o tempo, así como un reloxo dixital convencional. Resulta interesante utilizalo cando queremos que a data, día da semana, e a hora estean sempre dispoñibles independentemente da alimentación da tarxeta arduino.
Hai moitos modelos. O que temos no taller é o reloxo DS1302.
O chip DS1302 contén un reloxo/calendario en tempo real con 31 bytes de RAM estática. O RTC DS1302 proporciona información sobre segundos, minutos, horas, día, data, mes e ano. A data de fin de mes axústase automaticamente para meses con menos de 31 días, incluídas as correccións do ano bisesto. O reloxo funciona en formato 24 ou 12 horas cun indicador AM/PM.
Conexión:
O módulo RTC DS1302 comunícase co microprocesador a través dunha interface serie. Temos 5 pins, os dous de alimentación (VCC 5V e GND 0V) e os tres de envío de datos (CLK, DAT, RST) que imos conectar nos seguintes pins:
- CLK: D6
- DAT: D7
- RST: D8
Programa:
Necesitamos instalar a librería que controla o módulo RTC. Podes descargala aquí: DS1302.zip.
Para programar podes utilizar as seguintes variables:
- t.sec (segundos)
- t.min (minutos)
- t.hour (hora)
- t.date (día)
- t.mon (mes)
- t.dow (día da semana)
- t.year (ano)
1. Mostrar o tempo
// Librarías: #include <DS1302.h> // Declaración de variables: DS1302 rtc(8,7,6); // DS1302 rtc(RST_PIN, IO_PIN, CLK_PIN); Time t; // Inicia unha variable t con estrutura de datos de tempo // Configuración: void setup() { Serial.begin(9600); // inicia a comunicación serie. /* Estas ordes soamente se usan a primeira vez para poñer en hora o reloxo Introduce a data e horas actuais, quita os comentarios e carga o programa Comenta estas instrucións e volve cargar o programa */ // rtc.setTime(14, 50, 00); // Configurar hora en formato 24hs con min y seg: 13:28:00 HORAS. // rtc.setDate(26, 4, 2021); // Configurar fecha en formato dia/mes/año: 28/6/2018. // rtc.setDOW(MONDAY); } // Programa: void loop() { t = rtc.getTime(); // Colle os datos de tempo do reloxo DS1302 e dalle ese valor á variable t Serial.print("Data:"); Serial.print(rtc.getDOWStr()); // Imprime o día da semana Serial.print(" "); Serial.print(rtc.getDateStr()); //imprime a data Serial.print(" - Hora:"); Serial.println(rtc.getTimeStr()); //imprime a hora delay(2000); //lectura cada 2 segundos /* Tamén podemos chamar ás variables por separado. Por exemplo: Serial.print("hora:"); Serial.println(t.hour); */ }
2. programar acendido/apagado
// Librarías: #include <DS1302.h> // Declaración de variables: DS1302 rtc(8,7,6); // DS1302 rtc(RST_PIN, IO_PIN, CLK_PIN); Time t; // Inicia unha variable t con estrutura de datos de tempo int led = 13; // LED no pin 13 // Configuración: void setup() { pinMode(led, OUTPUT); // Configura o LED como saída Serial.begin(9600); // inicia a comunicación serie. /* Estas ordes soamente se usan a primeira vez para poñer en hora o reloxo Introduce a data e horas actuais, quita os comentarios e carga o programa Comenta estas instrucións e volve cargar o programa */ // rtc.setTime(14, 50, 00); // Configurar hora en formato 24hs con min y seg: 13:28:00 HORAS. // rtc.setDate(26, 4, 2021); // Configurar fecha en formato dia/mes/año: 28/6/2018. // rtc.setDOW(MONDAY); // Configurar o sía da semana } // Programa: void loop() { t = rtc.getTime(); // Colle os datos de tempo do reloxo DS1302 e dalle ese valor á variable t Serial.print("Hora:"); Serial.println(rtc.getTimeStr()); //imprime a hora delay(2000); //lectura cada 2 segundos if (t.min >= 50 && t.min<=55){ digitalWrite(led, HIGH); } else{ digitalWrite(led, LOW); } }
Propostas:
- Proba o segundo programa do led, pero nun período de minutos que se achegue ao deste momento. Por exemplo, se agora son as 9:20 prográmao para que se acenda de 9:25 a 9:27.
- Fai que un led se acenda cada día desde as 10h e 30 min ata as 11h en punto.
- Fai que un led se acenda cada luns desde as 16 ata as 19h.