Arduino + RFID  [Simulación Control de Acceso]

Arduino + RFID [Simulación Control de Acceso]

Que tal queridos lectores de este su Blog Favorito.

Vamos a hacer una practica sencilla con Arduino y el modulo RFID Modelo MFRC522.

Al final habremos logrado leer un par de Tags y asignar uno como Permitido y el otro como NO Permitido para simular el acceso con dos leds.

Materiales usados en esta practica:

1 Arduino UNO.

1 Lector RFID Modelo MFRC522.

1 Led Verde.

1 Led Rojo.

Cables para conexión.

Aqui la conexión:

 

RFID según Wikipedia:

RFID (siglas de Radio Frequency IDentification, en español identificación por radiofrecuencia) es un sistema de almacenamiento y recuperación de datos remoto que usa dispositivos denominados etiquetastarjetastranspondedores o tags RFID. El propósito fundamental de la tecnología RFID es transmitir la identidad de un objeto (similar a un número de serie único) mediante ondas de radio. Las tecnologías RFID se agrupan dentro de las denominadas Auto ID (automatic identification, o identificación automática).

Las etiquetas RFID (RFID Tag, en inglés) son unos dispositivos pequeños, similares a una pegatina, que pueden ser adheridas o incorporadas a un producto, un animal o una persona. Contienen antenas para permitirles recibir y responder a peticiones por radiofrecuencia desde un emisor-receptor RFID. Las etiquetas pasivas no necesitan alimentación eléctrica interna, mientras que las activas sí lo requieren. Una de las ventajas del uso de radiofrecuencia (en lugar, por ejemplo, de infrarrojos) es que no se requiere visión directa entre emisor y receptor.

 

Para esta practica usaremos el protocolo SPI para la comunicación entre el modulo y Arduino.

A continuación les dejo una tabla con la conexión de el modulo a Arduino:

 

Características de el Modulo RFID MFRC522:

  • Corriente de operación: 13-26mA a 3.3V
  • Corriente de stand by: 10-13mA a 3.3V
  • Corriente de sleep-mode:80uA
  • Corriente máxima: 30mA
  • Frecuencia de operación: 13.56Mhz
  • Distancia de lectura: 0 a 60mm
  • Protocolo de comunicación: SPI
  • Velocidad de datos máxima: 10Mbit/s
  • Dimensiones del módulo: 40 x 60 mm
  • Temperatura de operación: -20 a 80º

 

Primero tendremos que saber cual es el ID de nuestros TAGS, para eso vamos a cargar este codigo que les dejo a continuación:

/*Distribucion de pines en Arduino UNO
Dispositivo---------Arduino UNO
  RFID
  SDA------------------10
  SCK------------------13
  MOSI-----------------11
  MISO-----------------12
  GND------------------GND
  RST------------------9
  3.3 V----------------3.3 v
  */
#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 RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); ///Creamos el objeto para el RC522
 
byte ActualID[4]; //almacenará el código del Tag leído
 
void setup() {
  Serial.begin(9600); //Iniciamos La comunicacion serial
  SPI.begin();        //Iniciamos el Bus SPI
  mfrc522.PCD_Init(); // Iniciamos el MFRC522  
}
 
void loop() {
  // Revisamos si hay nuevas tarjetas  presentes
  if ( mfrc522.PICC_IsNewCardPresent()){
     
    //Seleccionamos una tarjeta
    if ( mfrc522.PICC_ReadCardSerial()){
      // Enviamos serialemente su ID
      Serial.print(F("Tag ID:"));
      for (byte i = 0; i < mfrc522.uid.size; i++) {
        Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
        Serial.print(mfrc522.uid.uidByte[i], HEX);  
        ActualID[i]=mfrc522.uid.uidByte[i];          
      }
    Serial.println("     ");
   
    // Terminamos la lectura de la tarjeta tarjeta  actual
    mfrc522.PICC_HaltA();
    }
  }
}

Este código se encargara de mostrarnos el ID de cada TAG que acerquemos a el lector, en el monitor serial de esta manera:

 

Estos números los anotaremos para después incluirlos en el sketch principal, el cual les dejo a continuación:

/*Distribucion de pines en Arduino UNO
Dispositivo---------Arduino UNO
  RFID
  SDA------------------10
  SCK------------------13
  MOSI-----------------11
  MISO-----------------12
  GND------------------GND
  RST------------------9
  3.3 V----------------3.3 v
  */
#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 RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); ///Creamos el objeto para el RC522
 
byte ActualID[4]; //almacenará el código del Tag leído
byte Usuario1[4]= {0xE5, 0xF3, 0xFA, 0xAA} ; //código del usuario 1
 
//Para agregar mas usuarios permitidos solo modifique los arreglos de abajo con el ID del TAG.
byte Usuario2[4]= {0x05, 0x76, 0x12, 0x2B} ; //código del usuario 2
byte Usuario3[4]= {0x05, 0x76, 0x12, 0x2B} ; //código del usuario 3
byte Usuario4[4]= {0x05, 0x76, 0x12, 0x2B} ; //código del usuario 4
int ledVerde=2;
int ledRojo=3;
 
void setup() {
  Serial.begin(9600); //Iniciamos La comunicacion serial
  SPI.begin();        //Iniciamos el Bus SPI
  mfrc522.PCD_Init(); // Iniciamos el MFRC522
 
  pinMode(ledRojo,OUTPUT); //Definimos los pines de los Leds como Salidas.
  pinMode(ledVerde,OUTPUT);
 
  digitalWrite(ledRojo,LOW); //Apagamos los leds.
  digitalWrite(ledVerde,LOW);
 
  Serial.println("Control de Acceso, Arduino Center");
  Serial.println("Pase el TAG por el Lector...");
 
}
 
void loop() {
  // Revisamos si hay nuevas tarjetas  presentes
  if ( mfrc522.PICC_IsNewCardPresent()){  
    //Seleccionamos una tarjeta
    if ( mfrc522.PICC_ReadCardSerial()){
      // Enviamos serialemente su ID
      Serial.print(F("Tag ID:"));
      for (byte i = 0; i < mfrc522.uid.size; i++){
        Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
        Serial.print(mfrc522.uid.uidByte[i], HEX);  
        ActualID[i]=mfrc522.uid.uidByte[i];          
      }
      Serial.print("     ");
      //comparamos los ID para determinar si es uno de nuestros usuarios permitidos.
      if((compareArray(ActualID,Usuario1)) || (compareArray(ActualID,Usuario2))){
        Serial.println("Usuario Permitido");
        digitalWrite(ledVerde,HIGH);
        delay(2000);
        digitalWrite(ledVerde,LOW);
        Serial.println("Pase el TAG por el Lector...");
      }else{
        Serial.println("Usuario NO Permitido");
        digitalWrite(ledRojo,HIGH);
        delay(2000);
        digitalWrite(ledRojo,LOW);
        Serial.println("Pase el TAG por el Lector...");
      }
        // Terminamos la lectura de la tarjeta tarjeta  actual
        mfrc522.PICC_HaltA();
    }
  }
}
 
//Función para comparar dos vectores
 boolean 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);
}

 

El Tag ID que usaremos como «usuario permitido» lo ponemos en esta parte de el código:

Teniendo en cuenta de agregarlo después de «0x» para no tener ningún error, quedando como en la imagen de arriba.

Ejemplo: Si tu TAG te arrojó el ID «DA 05 90 AB», el arreglo quedaría así:

byte Usuario1[4]= {0xDA, 0x05, 0x90, 0xAB}.

Los ID de los TAGS que utilicemos como «NO Permitidos» no es necesario agregarlos.

Da clic aquí para ver el resultado final visitándonos en el foro

                      Por: @Riojas 

 

 

Posts Relacionados

Comments

comments

Written By

Riojas

Leave a Reply

×