Blog Search

Recent Articles

Control de acceso con Arduino y RFID.

Control de acceso con Arduino y RFID.

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.
Despues 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 leantec -Arduino UNO.
rfid leantec -Módulo RFID.
cables leantec -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 Frequency IDentification, 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

rfid leantec


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 autorizar 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 completo
      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.

monitor arduino leantec

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.

rfid no encontrado leantec arduino

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.

rfid leantec

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 autorizar 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 completo
      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.

rfid arduino leantec

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.

rfid leantec arduino autorizado

rfid leantec arduino

Si acercamos una tarjeta no autorizada nos imprimirá NO AUTORIZADA y permanecerá encedido el led Rojo.



rfid leantec

leantec arduino rfid

Esperamos que les sea de utilidad y no olviden que en nuestro blog encontrará muchos otros post de su interes.
Etiquetas: arduino rfid tutorial rc522

45Comentarios

    • Avatar
      josfraba
      jul 11, 2015

      Hola: No funciona. Al compilar saltan errores porque en el programa hay referencias a rutinas que no están en la librería MFRC522.h. (he descargado la versión existente al 2015.07.11. También hay referencia a "nfc" que no está declarado.

      • Avatar
        Leantec Robotics&Electronics
        jul 14, 2015

        Hola josfabra, Gracias por el consejo. Acabamos de verificar que todo esté bien y parece funcionar a la perfección. Por favor, asegúrese de que el código lo tiene tal y como está en la web. Hemos copiado y pegado el código tal cual está y no nos ha dado ningún error. Esperamos su respuesta. Un saludo, Servicio Técnico Leantec.es www.leantec.es

        • Avatar
          rafavela
          jun 17, 2016

          me pasa lo mismo me marca error en nfc

      • Avatar
        ralf123
        jun 17, 2016

        igual me marca el mismo error en nfc queria saber si ya tiene alguna solucion??

    • Avatar
      Vicente
      ago 29, 2015

      Hola. Gracias en primer lugar, por compartir conocimientos entre los que no sabemos, pero nos gusta experimentar. Tengo que decirles que el montaje está realizado según el tutorial. El monitor serie me reconoce el módulo RFID, pero no lee las tarjetas que le presento; es decir, no me dice que estén o no autorizadas, y el led sigue en rojo, sin encender el led verde. He revisado el montaje varias veces, pero no encuentro dónde podría estar el fallo que cometo... Podrían darme una pista...? Saludos cordiales

      • Avatar
        Leantec Robotics&Electronics
        sep 3, 2015

        Buenos días Vicente. ¿Las tarjetas con las que estás probando son las misma que el módulo traía? ¿Con el llavero funciona? ¿Tiene a su alcance alguna tarjeta de alguna otra máquina que pueda probar? Si todo esta bien, y en el monitor serial aparece que ha reconocido el módulo, solo se nos ocurre que el problema este en las tarjetas que está utilizando. Un saludo. Servicio técnico Leantec.

    • Avatar
      josefernandez
      oct 15, 2015

      Buenas Tardes, muy agradecido, funciona a la perfección !!! José

    • Avatar
      alexis
      oct 23, 2015

      hola me funciono perfectamente pero sigo teniendo el mismo problema solo me lee el llavero ,me pasa lo mismo que a vicente paso el llavero y lo lee perfecto pero con la tarjeta es distinto no pasa nada ni siquiera sale que esta autorizada , en pocas palabras no pasa nada. espero me puedas ayudar.gracias

      • Avatar
        Leantec Robotics&Electronics
        nov 9, 2015

        Hola Alexis. ¿Tiene acceso a alguna otra tarjeta RFID de algún otro sistema electrónico? Si pudieras probar con una tarjeta que seguro funcione podemos averiguar más fácilmente cual es el problema. Un saludo. Servicio técnico Leantec.

    • Avatar
      harold
      nov 5, 2015

      buenos dias yo tengo un arduino leonado pero no entiendo como es la coneccion gracias y si hay que cambiar algo en el docigo

      • Avatar
        Leantec Robotics&Electronics
        nov 9, 2015

        Buenos días Harold. En principio el funcionamiento es el mismo. Un saludo. Servicio técnico Leantec

    • Avatar
      MarcosVE
      nov 13, 2015

      Hola buenos días, tengo una duda sobre como enviar los codigos de la tarjerta a otro arduino atraves de Radio Frecuencia para poder implementarlo en una base de datos. Quisiera saber lo que tendria que enviar al otro arduino para que le llegue el codigo. Lo siento si es una pregunta tonta, pero soy un estudiante de CS y estoy haciendo el proyecto de final de ciclo con arduino (control de acceso RFID en una clase enviado por RF y leido en base de datos MySQL). Muchas gracias y un saludo.

    • Avatar
      francisco
      dic 2, 2015

      buenas me detecta el RFID y no me detecta las tarjetas solo muestra Buscando RC522 Ha encontrado RC522 Firmware version 0xFF. lo curioso es que si le quito la energia 3.3V me dice: Buscando RC522 Ha encontrado RC522 Firmware version 0x80. es posible esto que sin energia siga encontrando el RFID gracias

    • Avatar
      francisco
      dic 2, 2015

      FUNCIONA, , dios , no habia soldado los cables y de ahi el error ahora solo saber donde poder mas llaveros

      • Avatar
        Jairo
        dic 4, 2017

        Tengo el mismo problema, mañana lo probare, soldando los cables, espero sea eso, si es asi, pasare a agradecertelo mucho

    • Avatar
      joan
      mar 13, 2016

      no reconoce ninguna tarjeta

    • Avatar
      Claudio
      mar 25, 2016

      Hola... muchas gracias por el aporte...

    • Avatar
      Gerardo
      abr 25, 2016

      Hola! muchas gracias por el aporte! Pero me tira un error que dice: 'class MFRC522' has no member named 'begin' Que soluciones me recomiendan para este error?

      • Avatar
        df
        jun 7, 2016

        Te ha pasado lo mismo que a mi gerardo, descarga la libreria del principio y listo

    • Avatar
      shirley ponton anaya
      jul 17, 2016

      hola buen día, a mi me funciona muy bien la programación, pero tengo una pregunta. como hago para que me pueda leer mas de una tarjeta. agradezco me puedas colaborar con esto.

    • Avatar
      Juan
      ago 12, 2016

      Buenas,esta noche probaré este por que he probado un montón de proyectos y todos me dan error de libreria, a ver si por fin consigo uno que funcione. Ya comentare

    • Avatar
      Juan
      ago 12, 2016

      Muchisimas gracias ,he probado muchos proyectos y ninguno me funciono ,el vuestro a funcionado a la primera ,lo dicho muchisimas gracias y siguir con nosotros.

    • Avatar
      JUAN B
      ago 17, 2016

      Compañero no entiendo como poder añadir mas tarjetas. gracias

    • Avatar
      Juan
      ago 27, 2016

      Buenas noches, yo tampoco doy con la manera de añadir mas targetas ,he probado de varias maneras pero siempre me da error al compilar

    • Avatar
      jose
      oct 13, 2016

      no se entiende donde va el numero que tira la tarjeta y si los que esta en el ejemplo quedan o no podrias explicarnos

    • Avatar
      jose
      oct 13, 2016

      no se entiende donde va el numero que tira la tarjeta y si los que esta en el ejemplo quedan o no podrias explicarnos

      • Avatar
        Gaik
        oct 20, 2016

        Lo que no se entiende es tu forma de expresarte con esas patadas al lenguage. Deberías volver a la guardería y empezar de cero.

    • Avatar
      alex
      oct 17, 2016

      Hola José, Yo e conseguido meter más targetas: #define AUTHORIZED_COUNT 2 //Para autoriazar más tarjetas ponemos el número aqui en authorized_count 1,2,3,4,etc...byte Authorized[AUTHORIZED_COUNT][6] = { {0x88, 0x4, 0x38, 0x49, 0xFD,},{0x95, 0xEF, 0xCD, 0x65, 0xD2,} //despues del primero coma y el codigo

    • Avatar
      Uriel
      nov 1, 2016

      Hola buen dia como le podria hacer para poner dos lectores al mismo tiempo?

    • Avatar
      Percy
      feb 11, 2017

      Se puede clonar una llave rfid? Si es así, hay alguna manera de codificarla para que sea única?

    • Avatar
      Percy
      feb 11, 2017

      Se puede puede clonar la llaves rfid? Si es así, hay alguna forma de hacerlas únicas?

    • Avatar
      joan
      feb 18, 2017

      Hola, me funciona el codigo tengo todas las librerias y en el monitor serie me reconoce el Rc522 pero solo me sale esto "Buscando RC522 Ha encontrado RC522Firmware version 0x11." no me sale ningun numero mas, entonces no puedo configurarla bien. Gracias

      • Avatar
        Jairo
        dic 4, 2017

        Hola, que tal, tengo el mismo problema, encontraste solucion? te lo agradeceria mucho

    • Avatar
      jaedth
      jun 3, 2017

      el codigo no me da dice 'class MFRC522' has no member named 'begin' pero yo ya puse la libreria que nos diste y todavia nada, ya intente con dos librerias de RFID :'(

      • Avatar
        Milton
        jun 21, 2017

        Desacarga la librería del link que está al inicio de este post y agrégala; si es que descargaste alguna otra libreria desde la gestion de librerías, elimina la carperta que te debe haber generado en la direccion Libraries en tu PC y listo. Tuve el mismo error y con eso se solucionó.

    • Avatar
      Pedro
      jul 2, 2017

      Hola, si hay una tarjeta con una asignación previa en otra parte [A] y la configuro en otra [B], se va a borrar del sitio A?

    • Avatar
      JORFY
      sep 2, 2017

      OYE UNA PREGUNTA COMO ASOCIO UN NOMBRE A UNA TARJETA GRACIAS ....

    • Avatar
      YO
      sep 11, 2017

      nO ME APARECE SERIAL

    • Avatar
      Alfredo
      sep 12, 2017

      Gracias, funciona de maravilla Como puedo hacer para que solo permita 3 intentos para un mismo tag o tarjeta?

    • Avatar
      cristian
      nov 11, 2017

      hola tengo un problema, no me reconoce las tarjetas y los llaveros no me tira el serial de 5 dígitos hexadecimal me pone Buscando RC522 Ha encontrado RC522Firmware versión 0x92 y luego no me ve nada ni la tarjeta ni el llavero ya no se con que probar necesito ayuda urgente tengo que rendir este trabajo para calificar nota final y me dieron tiempo hasta el dia 21 que cae martes.

      • Avatar
        Jairo
        dic 4, 2017

        Hola que tal, tengo exactamente el mismo problema, encontraste cual era el detalle o alguna solucion?

    • Avatar
      javier
      dic 3, 2017

      me funciono de maravilla, como podria añadirle una salida para que active un rele cuando de autorizado? saludos

    • Avatar
      Jairo Najera
      dic 4, 2017

      Buenas tardes, cuando cargo el programa en el monitor serial me aparece: "Buscando RC522 Ha encontrado RC522 Firmware versionx12" Paso el llavero o la tarjeta y no pasa nada todo queda igual, no se si tenga que ver que descargue la libreria de RFID del link que dejo en esta pagina, pero por ejemplo en el codigo, la primer parte donde estan las librerias #include //Descargar e incluir la librería #include En esa parte, lo que es "SPI.h" me aparece remarcado color naranja, y lo que es "MFRC522.h" sigue del mismo color, tal cual y aparece aqui, no se si eso signifique que no esta llamando a la libreria o que pasara?

    • Avatar
      walter
      dic 6, 2017

      Hola,tengo un problema ,la tarjeta leida es D7 5E AD 35 11,en donde se coloca este codigo,no entiendo,al lado de que? con comas o solo..Ayuda.

    • Avatar
      Dario
      dic 11, 2017

      Hola, Te consulto para hacer una experiencia con mis alumnos. Existe algún RFID con Arduino que pueda identificarse a 5 o 6 metros. Si lo conoces podrías decirme cuales son?? Saludos

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment:
Type Code