La comunicación entre Arduino y el lector RFID RC522 es bastante compleja a nivel de programación. Afortunadamente, como ocurre en otros muchos casos, hay una librería de Arduino que nos facilita enormemente la tarea.
También puedes instalarla a través del gestor de bibliotecas del IDE de Arduino buscando rc522.
El módulo RC522 tiene un alcance máximo de 5 cm. Por encima de este valor puede que el sistema no funcione correctamente
Este programa no escribe ningún dato en la etiqueta RFID. Simplemente lee si puede la etiqueta RFID y muestra la información por el monitor serie.
No conectes el pin VCC al pin de 5V de cualquier placa ¡Esto puede hacer que el módulo se rompa! Comprobar siempre antes de conectar ningún cable que el voltaje es menor de 3,3V.
A continuación se muestra un sketch para leer el código de identificación de nuestros Tags:
#include <SPI.h>#include <MFRC522.h>#define RST_PIN 9 //Pin 9 para el reset del RC522#define SS_PIN 10 //Pin 10 para el SS (SDA) del RC522MFRC522 mfrc522(SS_PIN, RST_PIN); //Creamos el objeto para el RC522void setup() {Serial.begin(9600); //Iniciamos la comunicación serialSPI.begin(); //Iniciamos el Bus SPImfrc522.PCD_Init(); // Iniciamos el MFRC522Serial.println("Lectura del UID");}void loop() {// Revisamos si hay nuevas tarjetas presentesif ( mfrc522.PICC_IsNewCardPresent()){//Seleccionamos una tarjetaif ( mfrc522.PICC_ReadCardSerial()){// Enviamos serialemente su UIDSerial.print("Card UID:");for (byte i = 0; i < mfrc522.uid.size; i++) {Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");Serial.print(mfrc522.uid.uidByte[i], HEX);}Serial.println();// Terminamos la lectura de la tarjeta actualmfrc522.PICC_HaltA();}}}
Bien, visto el ejemplo anterior, ahora apliquémoslo para un control de acceso, que puedes aplicarse en una puerta eléctrica, caja fuerte, sistema de encendido, desactivar alarmas, etc.Para este ejemplo estamos usando 4 Tags de los cuales solo dos deben tener acceso al sistema. Para implementar esto partimos del sketch anterior y solo le agregamos unas líneas más al final del programa para comparar los códigos y determinar si tienen o no acceso.
A continuación se muestra la programación:
#include <SPI.h>#include <MFRC522.h>#define RST_PIN 9 //Pin 9 para el reset del RC522#define SS_PIN 10 //Pin 10 para el SS (SDA) del RC522MFRC522 mfrc522(SS_PIN, RST_PIN); ///Creamos el objeto para el RC522void setup() {Serial.begin(9600); //Iniciamos La comunicacion serialSPI.begin(); //Iniciamos el Bus SPImfrc522.PCD_Init(); // Iniciamos el MFRC522Serial.println("Control de acceso:");}byte ActualUID[4]; //almacenará el código del Tag leídobyte Usuario1[4]= {0x4D, 0x5C, 0x6A, 0x45} ; //código del usuario 1byte Usuario2[4]= {0xC1, 0x2F, 0xD6, 0x0E} ; //código del usuario 2void loop() {// Revisamos si hay nuevas tarjetas presentesif ( mfrc522.PICC_IsNewCardPresent()){//Seleccionamos una tarjetaif ( mfrc522.PICC_ReadCardSerial()){// Enviamos serialemente su UIDSerial.print(F("Card UID:"));for (byte i = 0; i < mfrc522.uid.size; i++) {Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");Serial.print(mfrc522.uid.uidByte[i], HEX);ActualUID[i]=mfrc522.uid.uidByte[i];}Serial.print(" ");//comparamos los UID para determinar si es uno de nuestros usuariosif(compareArray(ActualUID,Usuario1))Serial.println("Acceso concedido...");else if(compareArray(ActualUID,Usuario2))Serial.println("Acceso concedido...");elseSerial.println("Acceso denegado...");// Terminamos la lectura de la tarjeta tarjeta actualmfrc522.PICC_HaltA();}}}//Función para comparar dos vectoresboolean compareArray(byte array1[],byte array2[]){if(array1[0] != array2[0])return(false);if(array1[1] != array2[1])return(false);if(array1[2] != array2[2])return(false);if(array1[3] != array2[3])return(false);return(true);}
No hay comentarios.:
Publicar un comentario