CONTROL DE ACCESO CON RFID YMODULO RTC DS3231
CONTROL DE ACCESO CON RFID YMODULO RTC DS3231
LIBRERIAS
https://github.com/adafruit/RTClib
https://github.com/miguelbalboa/rfid
CODIGO PROGRAMACION INICIAL MODULO RTC DS3231
Este código se debe cargar dos (2) veces a la placa Arduino, la primera carga se hace con el código exactamente como se encuentra a continuación, luego se elimina o inhabilita la siguiente linea: rtc.adjust(DateTime(__DATE__, __TIME__));
#include <Wire.h> // incluye libreria para interfaz I2C
#include <RTClib.h> // incluye libreria para el manejo del modulo RTC
RTC_DS3231 rtc; // crea objeto del tipo RTC_DS3231
void setup () {
Serial.begin(9600); // inicializa comunicacion serie a 9600 bps
if (! rtc.begin()) { // si falla la inicializacion del modulo
Serial.println("Modulo RTC no encontrado !"); // muestra mensaje de error
while (1); // bucle infinito que detiene ejecucion del programa
}
rtc.adjust(DateTime(__DATE__, __TIME__)); // funcion que permite establecer fecha y horario
// al momento de la compilacion. Comentar esta linea
} // y volver a subir para normal operacion
void loop () {
DateTime fecha = rtc.now(); // funcion que devuelve fecha y horario en formato
// DateTime y asigna a variable fecha
Serial.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.year()); // funcion que obtiene el año de la fecha completa
Serial.print(" "); // caracter espacio en blanco como separador
Serial.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.println(fecha.second()); // funcion que obtiene los segundos de la fecha completa
delay(1000); // demora de 1 segundo
}
********************************************************************************************************************************************************************************
CODIGO FINAL PROYECTO - CONTROL DE ACCESO CON RFID YMODULO RTC DS3231
#include <SPI.h> // incluye libreria bus SPI
#include <MFRC522.h> // incluye libreria especifica para MFRC522
#include <Wire.h> // incluye libreria para interfaz I2C
#include <RTClib.h> // incluye libreria para el manejo del modulo RTC
RTC_DS3231 rtc; // crea objeto del tipo RTC_DS3231
#define RST_PIN 9 // constante para referenciar pin de reset
#define SS_PIN 10 // constante para referenciar pin de slave select
MFRC522 mfrc522(SS_PIN, RST_PIN); // crea objeto mfrc522 enviando pines de slave select y reset
byte LecturaUID[4]; // crea array para almacenar el UID leido
byte Usuario1[4]= {0xCD, 0x7A, 0xD8, 0x01} ; // UID de tarjeta 1
byte Usuario2[4]= {0x79, 0xAB, 0xFC, 0x5C} ; // UID de tarjeta 2
byte Usuario3[4]= {0x06, 0x3B, 0xEE, 0xF9} ; // UID de tarjeta 3
int ledrojo = A0;
int ledverde = A3;
void setup() {
Serial.begin(9600); // inicializa comunicacion por monitor serie a 9600 bps
if (! rtc.begin()) { // si falla la inicializacion del modulo
Serial.println("Modulo RTC no encontrado !"); // muestra mensaje de error
while (1); // bucle infinito que detiene ejecucion del programa
}
pinMode(ledrojo, OUTPUT);
pinMode(ledverde, OUTPUT);
SPI.begin(); // inicializa bus SPI
mfrc522.PCD_Init(); // inicializa modulo lector
Serial.println("Listo"); // Muestra texto Listo
digitalWrite(ledrojo, HIGH);
digitalWrite(ledverde, LOW);
Serial.println("CONTROL DE ACCESO IETAL");
Serial.println("COLOQUE TARJETA RFID");
}
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent()) // si no hay una tarjeta presente
return; // retorna al loop esperando por una tarjeta
if ( ! mfrc522.PICC_ReadCardSerial()) // si no puede obtener datos de la tarjeta
return; // retorna al loop esperando por otra tarjeta
Serial.print("Tarjeta #:"); // muestra texto UID:
for (byte i = 0; i < mfrc522.uid.size; i++) { // bucle recorre de a un byte por vez el UID
if (mfrc522.uid.uidByte[i] < 0x10){ // si el byte leido es menor a 0x10
Serial.print(" 0"); // imprime espacio en blanco y numero cero
}
else{ // sino
Serial.print(" "); // imprime un espacio en blanco
}
Serial.print(mfrc522.uid.uidByte[i], HEX); // imprime el byte del UID leido en hexadecimal
LecturaUID[i]=mfrc522.uid.uidByte[i]; // almacena en array el byte del UID leido
}
Serial.print("\t"); // imprime un espacio de tabulacion
if(comparaUID(LecturaUID, Usuario1)){ // llama a funcion comparaUID con Usuario1
DateTime fecha = rtc.now(); // funcion que devuelve fecha y horario en formato
Serial.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.year()); // funcion que obtiene el año de la fecha completa
Serial.print(" "); // caracter espacio en blanco como separador
Serial.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.second()); // funcion que obtiene los segundos de la fecha completa
Serial.print("\t"); // imprime un espacio de tabulacion
Serial.println("Profesor Jorge Royero"); // si retorna verdadero muestra texto bienvenida
digitalWrite(ledverde, HIGH);
digitalWrite(ledrojo, LOW);
delay (1000);
digitalWrite(ledverde, LOW);
digitalWrite(ledrojo, HIGH);
}
else if(comparaUID(LecturaUID, Usuario2)){ // llama a funcion comparaUID con Usuario2
DateTime fecha = rtc.now(); // funcion que devuelve fecha y horario en formato
Serial.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.year()); // funcion que obtiene el año de la fecha completa
Serial.print(" "); // caracter espacio en blanco como separador
Serial.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.second()); // funcion que obtiene los segundos de la fecha completa
Serial.print("\t"); // imprime un espacio de tabulacion
Serial.println("Estudiante Jared Garcia - Grado 10a"); // si retorna verdadero muestra texto bienvenida
digitalWrite(ledverde, HIGH);
digitalWrite(ledrojo, LOW);
delay (1000);
digitalWrite(ledverde, LOW);
digitalWrite(ledrojo, HIGH);
}
else if(comparaUID(LecturaUID, Usuario3)){ // llama a funcion comparaUID con Usuario2
DateTime fecha = rtc.now(); // funcion que devuelve fecha y horario en formato
Serial.print(fecha.day()); // funcion que obtiene el dia de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.month()); // funcion que obtiene el mes de la fecha completa
Serial.print("/"); // caracter barra como separador
Serial.print(fecha.year()); // funcion que obtiene el año de la fecha completa
Serial.print(" "); // caracter espacio en blanco como separador
Serial.print(fecha.hour()); // funcion que obtiene la hora de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.minute()); // funcion que obtiene los minutos de la fecha completa
Serial.print(":"); // caracter dos puntos como separador
Serial.print(fecha.second()); // funcion que obtiene los segundos de la fecha completa
Serial.print("\t"); // imprime un espacio de tabulacion
Serial.println("Profesora Selfy De Los Reyes"); // si retorna verdadero muestra texto bienvenida
digitalWrite(ledverde, HIGH);
digitalWrite(ledrojo, LOW);
delay (1000);
digitalWrite(ledverde, LOW);
digitalWrite(ledrojo, HIGH);
}
else // si retorna falso
Serial.println("Tarjeta no autorizada"); // muestra texto equivalente a acceso denegado
mfrc522.PICC_HaltA(); // detiene comunicacion con tarjeta
}
boolean comparaUID(byte lectura[],byte usuario[]) // funcion comparaUID
{
for (byte i=0; i < mfrc522.uid.size; i++){ // bucle recorre de a un byte por vez el UID
if(lectura[i] != usuario[i]) // si byte de UID leido es distinto a usuario
return(false); // retorna falso
}
return(true); // si los 4 bytes coinciden retorna verdadero
}
Comentarios
Publicar un comentario