RFID MFRC522 con Arduino UNO

publicado en: Tutoriales | 0

El modulo RFID MFRC522 (Radio Frequency IDentification) es un dispositivo de sistema de identificación, ya sea con tarjetas, llaveros u otros objetos. En la actualidad es más frecuente el uso de métodos de identificación para la vida diaria, como por ejemplo, sistemas de seguridad, control, identificación de personal, entre muchas más. Este modulo permite la detección de este tipo de objetos, dichos objetos cuentan con un microcontrolador y una antena (en PCB) los cuales son activadas por señales de radiofrecuencia proporcionada por el RFID-RC522 (en este caso con el MFRC522). El modulo MFRC522 utiliza comunicación SPI, por lo que es compatible con cualquier Arduino, tarjeta de desarrollo o microcontrolador. En este tutorial se realzara un ejemplo el cual consiste en dos LEDs indicadores, simulando un sistema de seguridad, que a su vez son activados con la tarjeta o llavero. Cuando la tarjeta o llavero sea detectado por el modulo RFID un LED color verde indicara la autorización

MFRC522

Características Generales MFRC522

  • Distancia aproximada de detección del tag= 4 cms.
  • Voltaje: 3.3 volts,
  • 13 mA. Corriente máxima = 30 mA.
  • Especificación del tag: Mifare MF1S503 con 1 Kb de EEPROM
  • Frecuencia de operación: 13.56 Mhz
  • Interfaz: conector header de 8 pines, SPI, con velocidad hasta 10 Mbps.
  • Temperatura de operación: -20 a +60 grados C.
  • Dimensiones: 40 x 60 mm.

Materiales

  • Arduino UNO R3
  • Modulo RFID-RC522
  • Llaveto y/o tarjeta del modulo RFID-RC522 MFRC522
  • Cables Jumper
  • Protoboard
  • 2 LEDs

Conexión del Modulo MFRC522 RFID-RC522 con Arduino

rfid arduino

MFRC522

Librerías para el Arduino compatibles con MFRC522 

MFRC522

Descargar el Archivo ZIP: https://github.com/miguelbalboa/rfid

MFRC522

– Paso 1: Descargar todo el archivo ZIP

– Paso 2: Abrir el Programa Arduino, irse a la opción “Programa” situada en

– Paso 3: Seleccionas el Archivo ZIP que se descargo en el link de arriba

Código del Modulo RFID-RC522

 

#include <MFRC522.h>;
#include <SPI.h>;
/*
Pins SPI UNO
1 (NSS) SAD (SS) 10
2 SCK 13
3 MOSI 11
4 MISO 12
5 IRQ *No lo usaremos en este código 
6 GND GND
7 RST 5
8 +3.3V (VCC) 3V3
1 on ICPS header
*/
#define SAD 10
#define RST 9
MFRC522 nfc(SAD, RST);
#define ledAbierto 5
#define ledCerrado 6

void setup() {
pinMode(ledAbierto , OUTPUT);
pinMode(ledCerrado, OUTPUT);
SPI.begin();
Serial.begin(115200);
Serial.println("BUSCANDO MFRC522.");
nfc.begin();
byte version = nfc.getFirmwareVersion();

if (! version) {
Serial.print("NO SE ENCONTRO MFRC522 ");

while(1); //halt
}

Serial.print("BUSCANDO CHIP MFRC522 ");
Serial.print("FIRMWARE VERSION. 0x");
Serial.print(version, HEX);
Serial.println(".");
}

#define TARJETA 1
#define LLAVE 1
//CLAVE DE LA TAJETA
byte Autorizado[TARJETA][6] = {{0xF9, 0x84, 0x16, 0x2B, 0xFF, 0xFF, }};
// CLAVE DEL LLAVERO
byte Autorizado2[LLAVE][6] = {{0x32, 0x86, 0x7B, 0x6F, 0xFF, 0xFF, }};

void imprimeClave(byte *serial);
boolean esIgual(byte *key, byte *serial);
boolean chekaKey(byte *serial);

void loop() {
byte status;
byte data[MAX_LEN];
byte serial[5];
boolean Abierto = false;
digitalWrite(ledAbierto, Abierto);
digitalWrite(ledCerrado, !Abierto);
status = nfc.requestTag(MF1_REQIDL, data);
if (status == MI_OK) {
status = nfc.antiCollision(data);
memcpy(serial, data, 5);
if(chekaKey(serial)){
Serial.println("AUTORIZADO");
imprimeClave(serial);
Abierto = true;
}

else{
imprimeClave(serial);
Serial.println("NO AUTORIZADO");
Abierto = false;
}

nfc.haltTag();
digitalWrite(ledAbierto, Abierto);
digitalWrite(ledCerrado, !Abierto);
delay(2000);
}

delay(500);
}

boolean esIgual(byte *key, byte *serial){
for (int i = 0; i &lt; 4; i++){
if (key[i] != serial[i]){
return false;
}
}

return true;
}

boolean chekaKey(byte *serial){
for(int i = 0; i&lt;TARJETA; i++){
if(esIgual(serial, Autorizado[i]))
return true;
}

for(int i = 0; i&lt;LLAVE; i++){
if(esIgual(serial, Autorizado2[i]))
return true;
}

return false;
}

void imprimeClave(byte *serial){
Serial.print("CLAVE: ");
for (int i = 0; i &lt; 4; i++) {
Serial.print(serial[i], HEX);
Serial.print(" ");
}

}

 

Dejar una opinión