Zusammenfassung der Ressource
Flussdiagrammknoten
- Incluir las librerías necesarias:
#include <MFRC522.h>
#include <LiquidCrystal.h>
#include <SPI.h>
#include <SD.h>
#include <RTClib.h> // for the RTC
- Definir los pines para el módulo RFID:
#define CS_RFID 10
#define RST_RFID 9
- Definir los pines para el módulo SD CARD:
#define CS_SD 11
- Crear el archivo en el cual se guardarán los datos:
File myFile;
- Definir los pines para el LCD:
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
- Instanciar la clase para el módulo RFID:
MFRC522 rfid(CS_RFID, RST_RFID);
- Crear la variable para guardar el código de las tarjetas:
String uidString;
- Instanciar la clase para el módulo de RTC:
RTC_DS1307 rtc;
- Definir el pin para la cerradura eléctrica:
const int SOLENOID = 13;
- Imprimir mensaje de bienvenida en el LCD:
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" BIENVENIDO ");
lcd.setCursor(0, 1);
lcd.print(" SISTEMA ACCESO ");
delay(3000);
lcd.clear();
- Iniciaizar comunicación serial con el microcontrolador:
Serial.begin(9600);
- Inicializar comunicación de protocolo SPI:
SPI.begin();
- Inicializar comunicación con el módulo RFID:
rfid.PCD_Init();
- Inicializar la SD CARD:
Serial.print("Inicializando SD CARS...");
if(!SD.begin(CS_SD)) {
Serial.println("initialización fallida!");
return;
}
Serial.println("initialización realizada.");
- Inicializar el RTC:
if(!rtc.begin()) {
Serial.println("No se encontró RTC");
while(1);
}
else {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
if(!rtc.isrunning()) {
Serial.println("RTC no está funcionando");
}
- Imprimir Mensaje en el LCD:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Ingrese tarjeta");
lcd.setCursor(0, 1);
lcd.print("................");
delay(300);
- Buscar tarjeta:
if(rfid.PICC_IsNewCardPresent()) {
readRFID();
logCard();
}
- uidString == "54 188 204 37"
- MessageOnLCD();
lcd.setCursor(0, 1);
lcd.print("Administrador 1");
Serial.println("Acceso autorizado");
OpeningDoor();
- uidString == "3 200 110 58
- MessageOnLCD();
lcd.setCursor(0, 1);
lcd.print("Administrador 2");
Serial.println("Acceso autorizado");
OpeningDoor();
- uidString == "99 168 178 58"
- MessageOnLCD();
lcd.setCursor(0, 1);
lcd.print("Empleado 1");
delay(3000);
Serial.println(" Registrado...");
- uidString == "115 95 108 58"
- MessageOnLCD();
lcd.setCursor(0, 1);
lcd.print("Empleado 2");
delay(3000);
Serial.println(" Registrado...");
- lcd.setCursor(0, 0);
lcd.print("ID : ");
lcd.print(uidString);
lcd.setCursor(0, 1);
lcd.print("Acceso denegado");
delay(3000);
- Método para leer tarjeta:
void readRFID() {
rfid.PICC_ReadCardSerial();
Serial.print("Tag UID: ");
uidString = String(rfid.uid.uidByte[0]) + " " + String(rfid.uid.uidByte[1]) + " " +
String(rfid.uid.uidByte[2]) + " " + String(rfid.uid.uidByte[3]);
Serial.println(uidString);
}
- Método para guardar archivos en la SD CARD:
void logCard() {
digitalWrite(CS_SD,LOW);
myFile=SD.open("DATA.txt", FILE_WRITE);
if (myFile) {
Serial.println("File opened ok");
myFile.print(uidString);
myFile.print(", ");
DateTime now = rtc.now();
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(',');
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.println(now.minute(), DEC);
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.println(now.minute(), DEC);
Serial.println("sucessfully written on SD card");
myFile.close();
userCheckInHour = now.hour();
userCheckInMinute = now.minute();
}
else {
Serial.println("error opening data.txt");
}
digitalWrite(CS_SD,HIGH);
}
- Método para imprimir mensaje genérico en la SD CARD:
void MessageOnLCD(){
lcd.setCursor(0, 0);
lcd.print("ID : ");
lcd.print(uidString);
}
- Método para habilitar la apertura de la cerradura eléctica:
void OpeningDoor(){
digitalWrite(SOLENOID , HIGH);
delay(5000);
digitalWrite(SOLENOID , LOW);
delay(5000);
}