Primeiros Passos com o RFID MIFARE MFRC522
This tutorial is not available in English

Introdução
Você já deve ter se deparado com controladores de acesso em algum portão, seja em um condomínio ou em uma empresa, onde o controle de acesso é feito por meio da leitura de tags (chaveiros ou cartões RFID). Neste tutorial, veremos como realizar leituras com o Kit RFID MFRC522 (13,56MHz) e criar um simples controle de acesso.
Lista de Materias
Lista completa de produtos
comprar

Kit RFID Mfrc522 (13,56MHz)

Display oLED 0.96 I2C Azul

LED 5mm Vermelho (10 unidades)

LED 5mm Verde (10 unidades)

Buzzer Passivo 5V - Pacote com 5 unidades

Resistor 300Ω - Pacote com 10 unidades

Protoboard 830 Pontos

Jumpers Macho-Macho x40 Unidades

Cabo USB AB 30cm
Conceitos Teóricos
RFID é a sigla em inglês para "Radio-Frequency Identification" ou identificação por radiofrequência. É uma tecnologia pela qual os dados digitais codificados em dispositivos de radiofrequência (cartões, etiquetas, entre outros) são captados por um leitor por meio de ondas de rádio. Quando aproximamos estes dispositivos do leitor RFID, o campo de radiofrequência do leitor alimenta o circuito da tag, assim, a tag envia ou recebe informações do leitor. Contudo, vale ressaltar que nem todas as tags podem receber informações.

Primeiros Passos com o RFID
Nesse projeto, você aprenderá de forma simples a fazer a leitura da UID (identificação única) de um cartão ou chaveiro RFID.
Circuito
Para realizar as leituras da identificação das tags através do leitor RFID MFRC522, monte o circuito a seguir.
Atenção: o leitor RFID não vai com a barra de pinos soldada, portanto é necessário realizar a soldagem antes do uso. Caso você ainda não possua os itens necessários para isso, confira o nosso Kit de Solda que temos disponível para facilitar a soldagem.

Biblioteca
Para os projetos deste tutorial, é necessário realizar a instalação de algumas bibliotecas, a do leitor RFID e a do display OLED. As bibliotecas estão disponíveis para serem instaladas diretamente pelo "Gerenciador de Bibliotecas" da Arduino IDE. Para acessá-lo, siga o caminho da imagem abaixo ou então pressione "Ctrl+Shift+I".

Com o gerenciador aberto, instalaremos primeiro a biblioteca do leitor RFID. Digite "MFRC522" e em seguida clique em instalar a biblioteca desenvolvida por "GithubCommunity", conforme mostrado na imagem abaixo. Após alguns instantes, será exibido INSTALADA ao lado do seu nome, indicando que a instalação foi feita com sucesso.

O mesmo deve ser feito com a biblioteca do display OLED. Digite "ADAFRUIT_SSD1306" e clique em instalar no primeiro resultado listado. Em seguida, será exibida uma mensagem perguntando se deseja instalar uma biblioteca de complemento da Adafruit, e como se trata de uma biblioteca auxiliar necessária para o controle do display, clique em "Instalar Tudo", como na imagem abaixo.

Código
Com as bibliotecas adicionadas à Arduino IDE, carregue o código a seguir para sua placa:
Entendendo o Código
Primeiramente, incluímos a biblioteca instalada anteriormente MFRC522.h
ao código e
incluímos a biblioteca de comunicação SPI
(essa biblioteca é nativa da IDE, portanto não
requer instalação). Então, criamos o objeto rfid
com os pinos SDA (10) e RST (9) da
BlackBoard, armazenados nas variáveis PINO_SDA
e PINO_RST
, respectivamente,
através do comando MFRC522 rfid(PINO_SDA, PINO_RST)
. Também definimos a variável
conteudo
, do tipo String, para armazenar as identificações lidas das tags.
Na função setup()
do código, utilizamos os comandos Serial.begin(9600)
para
inicializar o monitor serial, SPI.begin()
para inicializar a comunicação SPI e
rfid.PCD_Init()
para inicializar o módulo MFRC522. Em seguida, emitimos no monitor serial
uma mensagem de inicialização.
Já na rotina de repetição do código, inserimos uma condição
if (rfid.PICC_IsNewCardPresent())
que consiste em procurar uma tag presente. Caso
encontre, a leitura é validada através da condição if(!rfid.PICC_ReadCardSerial())
. Se o
leitor não conseguir realizar a leitura de todos os bytes da tag, será exibida no monitor serial
uma mensagem de erro.
Caso o laço if
anterior não seja verdadeiro, ou seja, se a leitura for verificada
corretamente, usamos o comando else
para executar uma rotina de conversão de decimal para
hexadecimal, salvando os bytes coletados como String para a variável conteudo
.
Após a conversão, imprimimos a UID identificada e zeramos o valor da variável conteudo
para
que esteja vazia ao armazenar a próxima tag. Em seguida, pelo comando
rfid.PICC_HaltA()
, colocamos o leitor em standby para aguardar uma nova tag
aproximada.
O que deve acontecer
Após carregar o código à placa com o circuito montado e abrir o monitor serial com a velocidade de 9600 bps, será exibida a mensagem "Aproxime a TAG:". Ao aproximar uma tag, você verá a identificação dela, como na imagem a seguir.

Observação: copie e guarde a identificação de uma das tags do kit para que possamos utilizá-la no próximo projeto.
Projeto Controle de Acesso
Já que aprendemos a ler as identificações das tags, que tal criarmos um controle de acesso para liberar uma porta ou até mesmo um cofre? Neste projeto, o acesso liberado será simulado por LEDs e um Buzzer, porém você pode adaptar o projeto para fechaduras eletrônicas, por exemplo.
Circuito
No projeto a seguir, utilizaremos um display OLED para imprimir uma mensagem de liberação ou bloqueio. Também utilizaremos dois LEDs, sendo eles um vermelho para "acesso negado" e um verde para "acesso liberado", e um buzzer para efeitos sonoros.

Código
Para este projeto, carregue o código a seguir para a sua placa. Apenas se lembre de alterar a variável
ID_AUTORIZADO
pela UID (código de identificação) de sua tag coletada no projeto
anterior.
Entendendo o Código
Primeiramente, adicionamos uma nova biblioteca, a Adafruit_SSD1306.h
, para o controle
do display OLED. Além disso, definimos a largura e a altura do display em pixels e o endereço do mesmo
nas variáveis LARGURA_DISPLAY
, ALTURA_DISPLAY
e ENDERECO_DISPLAY
.
Em seguida, com o comando Adafruit_SSD1306 display(LARGURA_DISPLAY, ALTURA_DISPLAY)
criamos
o objeto display
com a definição da largura e altura.
Também declaramos as variáveis que armazenam os pinos conectados aos LEDs e ao buzzer. Em seguida,
definimos a variável conteudo
como uma variável do tipo String, que receberá a UID da
tag aproximada. No comando String ID_AUTORIZADO = "SUA-UID-AUTORIZADA_AQUI"
,
definimos a variável ID_AUTORIZADO
que armazena a UID autorizada.
Na função setup()
do código, configuramos os pinos dos LEDs (PINO_VERDE
e
PINO_VERMELHO
) e o pino do buzzer (PINO_BUZZER
) como saídas e com o nível
lógico baixo inicial. Inicializamos o display com o seu endereço I2C definido, inicializamos a
comunicação SPI e o leitor RFID. E em seguida chamamos a função de mensagem inicial.
No laço de repetição, criamos uma condição que consiste em procurar uma nova tag como no código
do projeto anterior, e assim que for identificada e lida corretamente, removemos qualquer espaço que
haja no começo ou no final da UID lida com o comando conteudo.trim()
e em seguida
utilizamos a condição if (conteudo == ID_AUTORIZADO)
para verificar se a UID da tag
lida é igual ao código salvo na variável ID_AUTORIZADO
. Caso a UID lida corresponda à UID
definida, imprimimos no display uma mensagem de acesso liberado, emitimos seis vezes uma animação no
buzzer e no LED verde e chamamos a função de mensagem inicial para reiniciar a tela.
Caso contrário, ou seja, se a tag lida não estiver liberada, por meio da condição
else
, imprimimos no display uma mensagem de acesso negado, acendemos o LED vermelho e
emitimos uma animação musical no buzzer. Feito isso, chamamos a função de mensagem inicial.
Na função mensageminicial()
, zeramos a variável conteudo
e colocamos o leitor
em standby para aguardar uma tag ser aproximada, em seguida imprimimos no display a
mensagem inicial para aproximar a tag.
O que deve acontecer
Após carregar o código à placa com o circuito montado, aproxime a tag com a UID cadastrada e veja uma mensagem de liberação no display, o LED verde piscando e o buzzer ativando, como no GIF a seguir.
Agora aproxime uma tag diferente da UID cadastrada e veja uma mensagem de bloqueio no display, o LED vermelho e o buzzer ativando, como no GIF a seguir.
Indo além
Você pode expandir esse projeto utilizando o Shield para Arduino - Ethernet W5500, que conta com conectividade à internet e um slot para cartão de memória. Com ele, é possível registrar as tags autorizadas e todas as tentativas de acesso em um banco de dados online. Além disso, em caso de falha ou instabilidade na conexão com a internet, o sistema pode utilizar o cartão de memória para armazenar localmente as informações de acesso, como data, hora, UID da tag e status da tentativa (liberada ou negada).
Conclusão
Neste tutorial aprendemos como realizar as leituras das tags RFID e aproveitar para fazer um simples controle de acesso.