sexta-feira, 25 de novembro de 2016

Controle de acesso por meio do RFID

RFID - Identificão por rádio frequência

A identificação por rádio frequência ou Radio Frequency Identification, consiste em uma tecnologia que utiliza sinais de radio para leitura/gravação de uma tag (etiqueta). Dentro dessa tag uma série de informações estão gravadas e relacionadas com o serviço ou produto, para identificação ou acesso ou outras aplicações. Para ter uma ideia, hoje em dia é comum o uso do RFID no controle à acesso no sistema de transporte público ("Bilhete Único") e no controle sobre acesso em rodovias ("Sem Parar") e logística.


fonte: Wikipedia

No modulo RFID RC522, consegue ler e gravar tag em cartões tipo Mifare que operam na frequência 13,56 Mhz. Utiliza interfaec SPI para comunicação com o Arduino e sua ligação por meio dos pinos digitais de 9 a 13.


Para cada tag do leitor RFID existe uma identificação única que pode ser inserido na programação para definir acessos e prioridades.

fonte:http://rfidblog.com.br/tag/rfid


A pinagem para uma correta ligação do RFID com Arduino deve obedecer a seguinte ordem:

3,3V: Deve ser ligada ao pino de tensão 3,3V do Arduino
RST: Deve ser conectado ao pino 9 do Arduino
GND: GND
IRQ: Não Conectar
MISO: Conectar ao pino 12
MOSI: Conectar ao pino 11
SCK: Conectar ao pino 13
SDA: Conectar ao pino 10

Controle de nível de acesso RFID

O projeto consiste em um controle de acesso para simular uma situação onde as tags relacionadas determinam ao usuário se existe uma atribuição relacionada ao seu número.
Primeiro vamos elaborar um circuito que possibilite ao usuário descobrir os dados que estão gravados no seu cartão, assim poderemos identificar as tags que devem ser inseridas no código e definir as prioridades.

O esquema de ligação

Para começar demos realizar uma montagem conforme o esquema abaixo:


fonte: próprio autor


A ligação de alimentação do módulo deve ser de 3,3V para evitar efeitos prejudiciais à placa

O código

Antes de copiar e colar o código, é importante ressaltar que a biblioteca que estou usando pode ser baixado por este Link.
Agora copie e cole o código para ler as tags do seu cartão ou chaveiro RFID.

#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
 
void setup() 
{
  Serial.begin(9600);   // Inicia a serial
  SPI.begin();      // Inicia  SPI bus
  mfrc522.PCD_Init();   // Inicia MFRC522
}
 
void loop() 
{
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  delay(500);
  String conteudo= "";
  for (byte i = 0; i &lt; mfrc522.uid.size; i++) 
  {
     conteudo.concat(String(mfrc522.uid.uidByte[i] &lt; 0x10 ? " 0" : " "));
     conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.print("TAG LIDA: ");
  conteudo.toUpperCase();
  Serial.println(conteudo.substring(1));
}


fonte: próprio autor

O valor da Tag deve ser exibido por meio do monitor serial e informado a sequencia que pode ser utilizada no código de acesso ou não no projeto.

O projeto

Agora depois de descoberto as tags do cartão (ou chaveiro) vamos alterar o Código que vai executar o nosso projeto.
O projeto consiste na seguinte lógica, os cartões autorizados devem acessar o sistema indicando por meio de leds os funcionários que têm acesso e um pulso informa via internet, em um browser se o funcionário deu entrada  no local.
Para o projeto você deve ter em mãos:

1 Arduino Uno (ou compatível)
1 módulo RFID MC522
1 display LCD 16x2
1 protoboard
1 potenciômetro 10k 
2 leds (vermelho e verde)
2 resistores 220 ohm

Primeiro vamos montar o esquema abaixo em uma protoboard.

fonte: próprio autor

O código fonte do projeto

Feito toda a montagem, é hora de carregar o código no seu Arduino e testar, o projeto deve dar acesso às tags previamente autorizadas informando ao usuário a liberação por mensagem na LCD e acendendo um sinal visual por meio de um led verde, caso sua tag não esteja autorizada o usuário também recebe uma mensagem e um led vermelho pisca alertando-o.
Copie e cole o código para testar em seu circuito.
**a biblioteca utilizada pode ser baixada no link ao final do post!

// Programa : RFID - Controle de acesso / cancela
// Autor : Tony Emerson Marim
//basedo no original de Arduino e CIA
//www.mecatronizando.com.br

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>  //Carrega a biblioteca LCD 

#define SS_PIN 10
#define RST_PIN 9

// Definicoes pino modulo RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); 

//Define os pinos que serão ligados ao LCD
LiquidCrystal lcd(6, 7, 5, 4, 3, 2);

// Leds indicadores acesso liberado ou negado
int led_liberado = 8;
int led_negado = 16;
 
char st[20];

void setup() 
{
  
  Serial.begin(9600); //Inicializa a serial
  
  pinMode (led_liberado, OUTPUT);
  pinMode (led_negado, OUTPUT);
   
  lcd.begin(16,2); //Inicializa LCD
  lcd.clear();     //Limpa o LCD
  
  // Inicia a serial
  Serial.begin(9600);
  // Inicia  SPI bus
  SPI.begin();
  // Inicia MFRC522
  mfrc522.PCD_Init(); 
  // Mensagens iniciais no serial monitor
  Serial.println("Aproxime o seu cartao do leitor...");
  Serial.println();
  lcd.begin(16,2);
  mensageminicial();
 }

void loop() 
{

  // Aguarda a aproximacao do cartao
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Seleciona um dos cartoes
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  // Mostra UID na serial
  Serial.print("UID da tag :");
  String conteudo= "";
  byte letra;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Mensagem : ");
  conteudo.toUpperCase();
  
  // Testa se o cartao1 foi lido
  if (conteudo.substring(1) == "A5 76 7A 25")
  
  {
    digitalWrite(led_liberado, HIGH);
    Serial.println("Cartao1 - Acesso liberado !");
    Serial.println();
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Ola USUARIO 1!");
    lcd.setCursor(0,1);
    lcd.print("ACESSO PERMITIDO !");
    delay(2000);
    digitalWrite(led_liberado, LOW);
    mensageminicial();
  }
    
      // Testa se o cartao2 foi lido
    if (conteudo.substring(1) == "3A 42 0F BB")   
  {

    digitalWrite(led_liberado, HIGH);    
    Serial.println("Cartao2 - Acesso liberado !");
    Serial.println();
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Ola USUARIO 2!");
    lcd.setCursor(0,1);
    lcd.print("ACESSO PERMITIDO !");
    delay (2000);
    digitalWrite(led_liberado, LOW);
     mensageminicial();

    }
    
  // Testa se o cartao3 foi lido
  if (conteudo.substring(1) == "E5 77 17 53")
  {
    Serial.println("Cartao2 - Acesso negado !!!");
    Serial.println();
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("DESCONHECIDO !");
    lcd.setCursor(0,1);
    lcd.print("Acesso Negado !");
    delay (2000);
       
    // Pisca o led vermelho
    for (int i= 1; i<5 ; i++)
    {
      digitalWrite(led_negado, HIGH);
      delay(200);
      digitalWrite(led_negado, LOW);
      delay(200);
    }
      mensageminicial();
  }
  delay(500);
}
void mensageminicial()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("MECATRONIZANDO");
  delay(2000);
  lcd.clear();
  lcd.print(" Aproxime o seu");  
  lcd.setCursor(0,1);
  lcd.print("cartao do leitor");  

}

No vídeo abaixo é possível ver o funcionamento do projeto.



Caso seja necessário todo o projeto pode ser baixado por esse link.
Gostou?
Faça parte da nossa Fan Page!
Inscreva-se no canal!


3 comentários:

  1. Utilizando esta biblioteca , da problema quando se utiliza interrupção com as serias.
    #include
    alurdbinformatica@oi.com.br

    ResponderExcluir
    Respostas
    1. Você está utilizando a biblioteca que está junto com os arquivos que foram dispostos?

      Excluir
  2. 'It' não tem declaração, para se fazer a leitura do cartão.

    ResponderExcluir