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

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.

sistema_RFID
Transmissão por radiofrequência.

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.

Circuito
Circuito Elétrico.

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".

Caminho para o Gerenciador de Bibliotecas
Caminho para o "Gerenciador de Bibliotecas".

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.

Biblioteca MFRC522 Encontrada
Biblioteca "MFRC522" Encontrada.

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.

Biblioteca ADAFRUIT
Requisição de Instalação de Biblioteca Adicional.

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.

Monitor Serial
Resultado Final da Leitura.

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.

Circuito
Circuito Elétrico.

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.

Exemplo de Tag Autorizada.

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.

Exemplo de Tag Negada.

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.

Avatar