Sei sulla pagina 1di 11

Control de acceso con Arduino y RFID.

En esta entrada explicaremos como montar tu propio control de acceso usando


Arduino como la placa encargada del control y el módulo RFID-RC522
encargado de la comunicación y la lectura.
Después de entender el funcionamiento del RFID se te abrirán las puertas de
muchos otros proyectos en los que necesites está tecnología.

Materiales necesarios:

-Arduino UNO.

-Módulo RFID.
-Cables, leds y resistencias

Algo sobre la tecnología RFID.

El cometido principal de la tecnología RFID es dotar de identidad a objetos,


productos, personas, animales... es similar a un número de serie.
La identificación por radiofrecuencia, RFID por sus siglas en ingles
de Radio Frecuencia Identificación, es un sistema para recuperar y almacenar
datos de forma remota y automática. Estos datos se almacenan en tarjetas,
etiquetas, tags RFID...
Las etiquetas RFID, son unos dispositivos de pequeño tamaño fácil de adherir
a cualquier objeto. Estas etiquetas o tags en ingles, tienen en su interior
antenas de radiofrecuencia las cuales les permiten responder a peticiones de
un emisor-receptor RFID.
Hay dos tipos de etiquetas, las pasivas y las activas. Las pasivas no necesitan
alimentación, mientras que las activas si.
La ventaja fundamental de esta tecnología con respecto a otras es que no
necesita contacto visual directo para transmitir los datos; como ocurre por
ejemplo con la transmisión por infrarrojos.
Conexión del módulo RFID con Arduino

Es fácil. El módulo RFID está serigrafiado. Solo hay que conectar los pines de
la siguiente forma.
En los comentarios del código que más abajo facilitamos también aparece
como conectarlo.

RFID-RC522 Pines Arduino UNO

SDA 10

SCK 13

MOSI 11

MISO 12

IRQ No se conecta

GND GND

RST 5

3,3V 3V3

LED´S

LedPinAbierto (Verde) 2

LedPinCerrado (Rojo) 3

Código de prueba.
Antes de cargar el código en Arduino, necesitamos descargar y añadir la
libraría para manejar el módulo RFID.
Puedes descargarla aquí.
Una vez tengamos la librería, cargamos el código en Arduino.

#include <MFRC522.h>//Descargar e incluir la librería

#include <SPI.h>

/*
Pins SPI UNO Mega2560 Leonardo
1 (NSS) SAD (SS) 10 53 10
2 SCK 13 52 SCK1
3 MOSI 11 51 MOSI1
4 MISO 12 50 MISO1
5 IRQ * * *
6 GND GND GND GND
7 RST 5 ? Reset
8 +3.3V (VCC) 3V3 3V3 3.3V
* No necesario
*/

#define SAD 10
#define RST 5
MFRC522 nfc(SAD, RST);

#define ledPinAbierto 2
#define ledPinCerrado 3

void setup() {
pinMode(ledPinAbierto , OUTPUT);
pinMode(ledPinCerrado, OUTPUT);
SPI.begin();
Serial.begin(115200);
Serial.println("Buscando RC522");
nfc.begin();
byte version = nfc.getFirmwareVersion();
if (! version) {//Entra si no encuentra el módulo.
Serial.print("No ha encontrado RC522");
while(1); //detener
}

Serial.print("Ha encontrado RC522");


Serial.print("Firmware version 0x");
Serial.print(version, HEX);
Serial.println(".");
}

#define AUTHORIZED_COUNT 1 //Para autoriazar más tarjetas ponemos el nú


mero aqui y la añadimos abajo
byte Authorized[AUTHORIZED_COUNT][6] = {

{0x83, 0xF4, 0x8D, 0xC6, 0x3C,}


//,{0x10, 0x14, 0x39, 0x2E, 0xFF, 0xFF, } ejemplo de como aut
orizar más tarjetas 0x83,.....

};

void printSerial(byte *serial);


boolean isSame(byte *key, byte *serial);
boolean isAuthorized(byte *serial);
void loop() {
byte status;
byte data[MAX_LEN];
byte serial[5];
boolean Abierto = false;
digitalWrite(ledPinAbierto, Abierto);
digitalWrite(ledPinCerrado, !Abierto);
status = nfc.requestTag(MF1_REQIDL, data);

if (status == MI_OK) {
status = nfc.antiCollision(data);
memcpy(serial, data, 5);

if(isAuthorized(serial))
{
Serial.println("Autorizado");
Abierto = true;
}
else
{
printSerial(serial);
Serial.println("NO autorizado");
Abierto = false;
}

nfc.haltTag();
digitalWrite(ledPinAbierto, Abierto);
digitalWrite(ledPinCerrado, !Abierto);
delay(2000);
}//if (status == MI_OK)

delay(500);

}//void loop()

boolean isSame(byte *key, byte *serial)


{
for (int i = 0; i < 4; i++) {
if (key[i] != serial[i])
{
return false;
}
}

return true;

}
boolean isAuthorized(byte *serial)
{
for(int i = 0; i<AUTHORIZED_COUNT; i++)
{
if(isSame(serial, Authorized[i]))
return true;
}
return false;
}

void printSerial(byte *serial)


{
Serial.print("Serial:");
for (int i = 0; i < 5; i++) {// aumentar a 5 para leer el número de la tarjeta comp
leto
Serial.print(serial[i], HEX);
Serial.print(" ");
}
}

Probando el montaje.

Para probar nuestro montaje abrimos el monitor serial de Arduino y lo hacemos


funcionar a 115200 baudios.

El programa, lo primero que hace es buscar el módulo RFID, si no lo encuentra


en el monitor serial se imprimirá un aviso informando de que no lo ha
encontrado.
En el caso de que no encuentre el módulo RFID, tenemos que comprobar que
todas las conexiones estan correctas y que nuestro módulo RFID esta en buen
estado.

Una vez que ya lo encuentra, solo tenemos que acercar nuestra tarjeta o
llavero; seguramente aparezca un mensaje en el que aparece unos números y
las palabras NO AUTORIZADO.
Para autorizar una tarjeta tenemos que añadir su número de identificación a
esta linea de código.

#define AUTHORIZED_COUNT 1 //Para autoriazar más tarjetas ponemos el nú


mero aqui y la añadimos abajo
byte Authorized[AUTHORIZED_COUNT][6] = {

{0x11, 0x1D, 0xD3, 0xE, 0xD1,}


//,{0x10, 0x14, 0x39, 0x2E, 0xFF, 0xFF, } ejemplo de como aut
orizar más tarjetas 0x83,.....

};

Para saber cual es el número de identificación de la tarjeta, solo tenemos que


cambiar un valor en un bucle del código. Esto hace que cuando la tarjeta no
está autorizada nos imprima el número de identificación de la tarjeta en
cuestión.
La línea de código en la que hay que hacer la modificación es la siguiente.

void printSerial(byte *serial)


{
Serial.print("Serial:");
for (int i = 0; i < 5; i++) {// aumentar a 5 para leer el número de la tarjeta comp
leto
Serial.print(serial[i], HEX);
Serial.print(" ");
}

Solo tenemos que copiar el número que nos imprime por el monitor serial y
añadirlo como tarjeta utorizada.
Una vez tenemos nuestra tarjeta autorizada solo tenemos que acercarla al
módulo RFID. En el monitor serial nos aparecerá como tarjeta autorizada y se
nos encenderá el led verde.
Si acercamos una tarjeta no autorizada nos imprimirá NO AUTORIZADA y
permanecerá encedido el led Rojo.
Esperamos que les sea de utilidad y no olviden que en nuestro blog encontrará
muchos otros post de su interes.

Potrebbero piacerti anche