Reloj digital de seguridad
Proyecto realizado por el grupo 22 : Ángel Cólliga García para la asignatura de Diseño de Sistemas Empotrados.
Objetivo:
El objetivo de este proyecto era crear un reloj capaz de ser usado como despertador con la capacidad de sonar cuando llegase la hora de despertarse y con unos botones para poder modificar la hora.
Al final de momento solo cumple la función de dar la fecha y la hora pero en actualizaciones posteriores hare que cumpla con los objetivos establecidos.


Materiales y presupuesto:

Esquema de conexiones:

Uso:
Lo primero que debemos hacer sera tener en mano la llave autenticadora y enchufar el reloj a la corriente.
Una vez iniciado el reloj deberemos acercar la llave por el lector y ya nos aparecerá la hora y la fecha actual.
Problemas y soluciones:
A la hora de conectar la pantalla y el módulo RFID se ha tenido que cambiar la configuración de pines de la pantalla, el 7 y el 6 concretamente, que iban en el 12 y13, porque el módulo RFID al usar la interfaz SPI necesita los pines 12 y 13 para funcionar.
Para el módulo RFID se ha usado la librería <MFRC522.H> en vez de la librería <Easy MFRC522> porque esta última daba problemas a la hora de leer la llave.
Código:
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // reset pin para rfc522
#define SS_PIN 10 // ss pin para rfc522
MFRC522 mfrc522(SS_PIN, RST_PIN); // declaracion de objeto rfid
RTC_DS1307 RTC; // declaracion de objeto RTC
const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // declaracion de objeto pantalla lcd
int reloj_on_off = 0; // flag para controlar encendido de reloj
void setup() {
//inicializacion y configuracion
Serial.begin(57600);
delay(100);
lcd.begin(16, 2);
Wire.begin();
SPI.begin();
mfrc522.PCD_Init();
mfrc522.PCD_DumpVersionToSerial();
RTC.begin();
delay(300);
if (!RTC.isrunning()) {
Serial.println("RTC apagado");
Serial.println("Configurando fecha hora");
//configuracion de fecha y hora
RTC.adjust(DateTime(__DATE__, __TIME__));
}
Serial.println("RTC encendido"); //RTC funciona
}
void loop() {
lcd.setCursor(0, 0);
// control de encendido
while (reloj_on_off == 0) {
lcd.print(" reloj apagado ");
delay(10);
lcd.clear();
if (mfrc522.PICC_IsNewCardPresent()) {
reloj_on_off = 1;
lcd.clear();
lcd.print(" reloj encendido ");
delay(2000);
lcd.clear();
}
}
DateTime now = RTC.now();
// imprimir hora
lcd.setCursor(0, 0);
lcd.print(" ");
if (now.hour() < 10) {
lcd.print('0');
}
lcd.print(now.hour(), DEC);
lcd.print(":");
if (now.minute() < 10) {
lcd.print('0');
}
lcd.print(now.minute(), DEC);
lcd.print(":");
if (now.second() < 10) {
lcd.print('0');
}
lcd.print(now.second(), DEC);
// imprimir fecha
lcd.setCursor(0, 1);
lcd.print(" ");
if (now.day() < 10) {
lcd.print('0');
}
lcd.print(now.day(), DEC);
lcd.print("/");
if (now.month() < 10) {
lcd.print('0');
}
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
}
Memoria:
Video del proyecto: