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

Entradas populares de este blog

CLASIFICADOR DE COLORES CON SENSOR TCS3472 (I2C) CON ARDUINO NANO

PROTOTIPO - CONTROL DE ACCESO CON RFID + TECLADO CON ALMACENAMIENTO EN MICRO SD