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: