#21 Control de Acceso

Introducción

En este tutorial explicaremos como hacer uso de la tecnología RFID, simulando el permiso de entrada a una empresa.  Se debe utilizar una tarjeta RFID y acercarla al lector, en caso de ser una tarjeta válida para el sistema, permitirá la apertura de la puerta, en caso contrario, se observara el encendido de un LED Azul, de igual manera por medio de un display se podrá visualizar si el acceso está permitido o negado.

  Para entender un poco de que trata la tecnología RFID, en español identificación por radiofrecuencia, es un sistema de almacenamiento y recuperación de datos remotos que usa dispositivos denominados etiquetas, tarjetas, transponedor 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.

   Lo que haremos en nuestro proyecto es conectar la tarjeta Access Control Shield sobre la PICARO, allí a la salida del Relé, se conectara el Solenoide el cual será energizado por una fuente externa de 36Vdc, este dispositivo simulara la apertura de la puerta, los pines digitales 2 y 4 estarán conectados a los LED rojo y azul, donde podremos visualizar si la tarjeta está permitida en la empresa y a través del pin TX transmitiremos de manera serial a la Serial Backpack V2, para mostrar en la LCD uno de los siguientes mensajes: “Acceso permitido” o “Acceso Negado”. Debido a que los pines del lector RFID ID-20 son muy pequeños y no se puede colocar en la Protoboard, se debe conectar el lector ID-20 a una tarjeta adaptadora llamada Breakout, donde soldamos los cables y estos irán directamente al conector lector RFID. En caso de querer soldar directamente los pines del lector ID-20 al cable, puedes observar aquí el esquema de la conexión.

    Así como conectamos un solenoide a la salida del relé, puedes conectar lo que que desees y puedes generar la aplicación que quieras haciendo uso del lector RFID, el control de acceso es solo una idea de las tantos usos que le puedes dar a esta tecnología.

Pasos a seguir:

 

#1 Armar el circuito según la imagen

#2 Abrir el IDE de Arduino y conectar la tarjeta PICARO al computador

#3 Seleccionar el tipo de tarjeta como Arduino Uno

#4 Elegir el puerto serial en que se encuentra conectada la tarjeta PICARO

#5 Copiar el código de ejemplo al IDE, compilarlo y subirlo

Listado de componentes :

Código:

, está ha sido desarrollada para permitir la comunicación en serie utilizando los pines digitales 5 y 3 del Arduino. El código se basa en el almacenamiento de tags o etiquetas de las tarjetas RFID que estarán permitidas en la empresa, después de iniciar los puertos seriales, se envía un mensaje a la LCD de inicio del programa, de configuran los pines de los LED y del Relé como salida. En el void loop() se encuentran los procesos que queremos que se ejecuten constantemente, allí se estará leyendo el puerto serial para recibir los datos del lector RFID, estos datos se estarán almacenando en una variable llamada tagString[]. Se hara uso de tres funciones en el void loop(), la primera llamada checktag(), esta se encarga se chequear si hay coincidencia entre los tags almacenados previamente con la variable tagString, en caso de ser positivo, se encenderá el LED rojo, se mostrara el mensaje “Acceso permitido en la LCD y se activara el Relé, en caso de no encontrar coincidencia, encenderá el LED Azul y mostrara un mensaje de “Acceso denegado” en la LCD , la segunda función es clearTag(), es encargada de limpiar la variable tagString, para tomar una nueva lectura y por último la función resetReader() que inicializa el módulo de lectura. 
#include 

SoftwareSerial rfid (5,3 );

int RFIDResetPin = 13;

//Registra tus RFID

char tag1[13] = "45003C3F783E";

char tag2[13] = "45003C074B35";

void setup(){

  Serial.begin(9600); //Inicia puerto Serial

  rfid.begin(9600); //Inicia puerto Serial

  selectLineOne();

  Serial.print("MCI Electronics"); //Muestra en la LCD

  pinMode(RFIDResetPin, OUTPUT);

  digitalWrite(RFIDResetPin, HIGH);

  pinMode(2, OUTPUT); //LED Rojo

  pinMode(4, OUTPUT); //LED Azul

  pinMode(7, OUTPUT); //Rele

}

void loop(){

  char tagString[13];

  int index = 0;

  boolean reading = false;

    while(rfid.available()){

    int readByte = rfid.read(); //leer siguiente byte disponible

    if(readByte == 2) reading = true; //Inicio de la etiqueta de control

    if(readByte == 3) reading = false; //fin de la etiqueta

    if(reading && readByte != 2 && readByte != 10 && readByte != 13){

      //Almacena la etiqueta en la vriable

      tagString[index] = readByte;

      index ++;

    }

  }

  checkTag(tagString); //Verifica si hay coincidencia

  clearTag(tagString); //Limpia las variables

 resetReader(); //Resetea el lector RFID

}

void checkTag(char tag[]){

  if(strlen(tag) == 0) return; //Si esta vacio, no continua

   if(compareTag(tag, tag1)){ // Si coincide con tag1

    lightLED(2);

    }else if(compareTag(tag, tag2)){ // Si coincide con tag2

    lightLED(2);

    }else { //Si no coincide con los tag almacenados

    selectLineTwo();

    Serial.print(tag); //Muestra la eqtiqueta de control de la tarjeta

    digitalWrite(4, HIGH); //Enciende LED Azul

    selectLineOne();

    Serial.print("Acceso Negado"); //Escribimos

    delay(2000);

    digitalWrite(4, LOW); //Apaga led Azul

    clearLCD(); //Limpia la LCD

    }

}

void lightLED(int pin){ //Si encuentra coincidencia

  digitalWrite(pin, HIGH); //Enciende el LED Rojo

  digitalWrite(7,HIGH); //Activa el Rele, que abre la puerta

  selectLineOne();

  Serial.print("Acceso Permitido"); //Escribimos

  delay(2000);

  digitalWrite(pin, LOW); //Apaga el LED

  digitalWrite(7,LOW); //Desactiva el Rele

  clearLCD(); //Limpia la LCD

}

void resetReader(){

  digitalWrite(RFIDResetPin, LOW);

  digitalWrite(RFIDResetPin, HIGH);

  delay(150);

}

void clearTag(char one[]){ //Limpia el String donde se encuentra almacenado el tag

  for(int i = 0; i < strlen(one); i++){

    one[i] = 0;

  }

}

boolean compareTag(char one[], char two[]){ //Compara las aetiquetas

  if(strlen(one) == 0) return false; //Si El string alamacenado es igual a 0, esta vacio

  for(int i = 0; i < 12; i++){ //Se crea un ciclo

    if(one[i] != two[i]) return false; //Si el valor almacena coincide en cada posicion con el que se recibio

  }

  return true; //no hay coincidencia

 

}

 //--------Funciones para mostrar en la la LCD por medio de la Serial LCD Backpack V2------------------------------------

void selectLineOne(){ //pone el cursor en la linea 1

   Serial.write(0xFE); //comando para iniciar

   Serial.write(128); //indica la posición

   delay(10);

}

void selectLineTwo(){ //pone el cursor en la linea 2

   Serial.write(0xFE); //comando para iniciar

   Serial.write(192); //indica la posición

   delay(10);

}

void clearLCD(){

   Serial.write(0xFE); //comando para iniciar

   Serial.write(0x01); //comando para limpiar

   delay(5);

}

 

Demostración

Acá tenemos un vídeo donde podremos observar el funcionamiento de nuestro circuito. Como se explicó anteriormente, tenemos la tarjeta PICARO conectada a la Access Control Shield, donde se encuentra conectado el lector RFID ID-20, a través de el se leerán diferentes tarjetas RFID, en caso de que alguna sea permitida, activara el Relé que da paso al Solenoide simulando la apertura de la puerta.

¿En busca del Kit PICARO?

Con el PICARO Starter Kit podrás realizar estos ejemplos ¡y mucho más!
Producto Chileno. Encuéntralo en MCI Electronics.

Contacto

Direccion Luis Thayer Ojeda 0115 Of. 1104,

(Piso 11) Providencia, Santiago, Chile.

Phone: +56 2 2333 9579

Horario Lunes a Viernes de 8:30 a 18:00 horas. 

Nosotros

En MCI Electronics, estamos aquí para mantener la industria en movimiento. Nuestro objetivo es difundir y hacer accesible el uso de la electrónica a todo aquel que tenga el interés. Para ello nos esforzamos para traer los mejores componentes y módulos de manera que puedas aprender desarrollando tus propios proyectos.

Somos tu aliado en electrónica.

Suscríbete a nuestro boletín