Controle de Acesso usando Leitor RFID com Arduino Deixe um comentário

Tag e leitor RFID (Radio Frequency Identification, ou Identificação por Radiofrequência) costumam ser utilizados para controle de acesso e identificação de pessoas e equipamentos, seja por meio de crachás ou etiquetas aplicadas à produtos. No nosso dia-a-dia, podemos encontrar a tecnologia RFID nos pedágios (no popular “Sem Parar”), ou em cartões tipo Bilhete Único, utilizados em várias cidades brasileiras para acesso ao transporte coletivo.

Circuito controle de acesso com RFID

As etiquetas (ou tags) RFID, podem conter vários dados sobre o proprietário do cartão, como nome e endereço e, no caso de produtos, informações sobre procedência e data de validade, apenas para citar alguns exemplos.

Como são compostas apenas por um pequeno circuito, as tags RFID podem ser embutidas facilmente em vários objetos, nos mais variados tamanhos e formatos. No caso do Kit Leitor Rfid Mfrc522 Mifare disponível na loja FILIPEFLOP (imagem acima), temos duas tags: uma no formato de chaveiro, outra em formato de cartão.

Cada etiqueta/tag do leitor RFID tem a sua própria identificação (UID), e é com essa identificação que vamos montar um controle de acesso que irá ler o UID do cartão e exibir as informações de acesso num display LCD 16×2. Com pequenas alterações no programa é possível acionar as outras portas do Arduino e ligar motores, sensores, luzes e outros dispositivos.

Pinagem Leitor RFID:

O leitor RFID tem 8 pinos que seguem a seguinte sequência de ligação. Atenção à tensão de alimentação, que neste caso é de 3.3 volts

  • Pino SDA ligado na porta 10 do Arduino
  • Pino SCK ligado na porta 13 do Arduino
  • Pino MOSI ligado na porta 11 do Arduino
  • Pino MISO ligado na porta 12 do Arduino
  • Pino NC – Não conectado
  • Pino GND  ligado no pino GND do Arduino
  • Pino RST ligado na porta 9 do Arduino
  • Pino 3.3 – ligado ao pino 3.3 V do Arduino

Montagem Leitor RFID com Arduino:

Utilizamos no circuito o Display 16×2 HD44780 com ligação semelhante ao do artigo Mostrando informações de temperatura no LCD 16×2 com o DHT11. Trocamos apenas os pinos 12 do Arduino Uno pelo pino 6, e o 11 pelo 7, pois os mesmos já estão sendo utilizados pelo leitor RFID. O potenciômetro é utilizado para controlar o contraste do LCD, e no circuito foi usado um de 10 K :

Circuito RFID - LCD 16x2

Programando Arduino com Leitor RFID:

Para o programa, baixe a biblioteca MFRC522 nesse link. Descompacte o arquivo e renomeie a pasta rfid-master para MFRC522, colocando-a dentro da pasta LIBRARIES da IDE do seu Arduino.

O programa exibe na tela mensagens referentes ao cartão utilizado, sendo que no nosso caso, o display apresenta mensagem de “Acesso Liberado” para a tag no estilo chaveiro, e “Acesso Negado” para a tag no estilo cartão.

Adapte o programa às tags que você possui, alterando as linhas com “UID 1 – Chaveiro” e “UID 2 – Cartao” (Linhas 54 e 67), lembrando que o formato da UID deve ser mantido (XX YY ZZ WW).

Para descobrir o número da tag do seu dispositivo, aproxime-o do leitor RFID e verifique o serial monitor :

RFID - Identifcação tag

//Programa : RFID - Controle de Acesso leitor RFID
//Autor : FILIPEFLOP

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);	// Create MFRC522 instance.

LiquidCrystal lcd(6, 7, 5, 4, 3, 2); 

char st[20];

void setup() 
{
  Serial.begin(9600);	// Inicia a serial
  SPI.begin();		// Inicia  SPI bus
  mfrc522.PCD_Init();	// Inicia MFRC522
  Serial.println("Aproxime o seu cartao do leitor...");
  Serial.println();
  //Define o número de colunas e linhas do LCD:  
  lcd.begin(16, 2);  
  mensageminicial();
}

void loop() 
{
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Select one of the cards
  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();
  if (conteudo.substring(1) == "ED 78 03 CA") //UID 1 - Chaveiro
  {
    Serial.println("Ola FILIPEFLOP !");
    Serial.println();
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Ola FILIPEFLOP !");
    lcd.setCursor(0,1);
    lcd.print("Acesso liberado!");
    delay(3000);
    mensageminicial();
  }

  if (conteudo.substring(1) == "BD 9B 06 7D") //UID 2 - Cartao
  {
    Serial.println("Ola Cartao !");
    Serial.println();
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Ola Cartao !");
    lcd.setCursor(0,1);
    lcd.print("Acesso Negado !");
    delay(3000);
    mensageminicial();
  }
} 

void mensageminicial()
{
  lcd.clear();
  lcd.print(" Aproxime o seu");  
  lcd.setCursor(0,1);
  lcd.print("cartao do leitor");  
}

Gostou? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Faça seu comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *