Módulo RFID RC522 Mifare com Arduino
Neste tutorial entenderemos um como funciona um sistema RFID e aprenderemos como utilizar o módulo RFID RC522 Mifare através do Arduino.
[toc]
Entendendo o RFID
A tecnologia de RFID (Radio Frequency IDentification – identificação por radiofrequência) é um método de identificação através de sinais de rádio. Existem diversos métodos de identificação, mas o mais comum é armazenar um número de série que identifique uma pessoa ou um objeto, ou outra informação em um microchip.
Tal tecnologia permite a captura automática de dados para identificação de objetos com dispositivos eletrônicos conhecidos como etiquetas eletrônicas, RF tags, cartões RF ou transponders, que emitem sinais de radiofrequência para leitores que captam estas informações. Tal tecnologia existe desde a década de 40 e veio para complementar a tecnologia de código de barras, bastante difundida no mundo.
O RFID pode ser utilizado em diferentes aplicações, inclusive na parte de segurança, onde podemos citar como exemplos de sua utilização o controle de acesso em catracas, alarmes contra furtos em lojas e até mesmo para o desbloqueio de computadores. Outra função muito comum que é atribuída a essa tecnologia são os cartões de utilização de transporte público.
Como funciona os sistemas RFID
Um sistema de RFID é composto, basicamente, de:
- Um transceptor com decodificador e uma antena;
- Um transponder (chamado também de Tag) que é eletronicamente programado com informações.
O transceptor emite, através de uma antena, sinais de rádio para ativar o Tag, que por sua vez, reponde uma mensagem ao receptor com a informações armazenadas em seu chip.
Uma tag é composta, basicamente, por um chip, que armazena informações, e uma antena.
Os transponders RFID são divididos em dois tipos : passivos e ativos.
Os transponders passivos utilizam a energia da onda de rádio frequência emitida pelo leitor para transmitir o seu sinal de resposta. Geralmente vêm com suas informações gravadas permanentemente quando são fabricadas. Contudo, em algumas é possível alterar as informações armazenadas em seu chip.
A grande vantagem dos transponders passivos é a facilidade de usa-lo em diversas aplicações, tais como: etiquetas, passaportes, chaveiros, cartões, etc.
Os transponders ativos contam com uma fonte de energia própria para transmitir seu sinal de resposta, aumentando o alcance. Esse tipo de Tag pode contar com memória RAM, capaz de armazenar até 32 KB de informação.
Outra característica importante dos sistema RFID é a frequência de operação. A frequência interfere na taxa de transferência de dados entre a etiqueta e o leitor e em seu alcance.
As três frequências mais utilizadas para o sistema RFID passivo são: baixa frequência (LF), de 125kHz, alta frequência (HF), 13,56 MHz, e ultra alta frequência (UHF), operando na faixa de 860 a 960MHz.
Quanto maior a frequência, maior será o alcance máximo, mas esse não é o único fator. Também influenciam no alcance do sistema RFID: potencia e sensibilidade do transceptor e o tipo de transponder.
Módulo RFID-RC522 13,56MHz Mifare
Este módulo RFID usa o chip MFRC522 da empresa NXP, que por sua vez, pode ser usado em comunicações a uma frequência de 13,56MHz, permitindo, por exemplo, sem contato, a leitura e escrita em cartões que seguem o padrão Mifare.
Para usar a tecnologia RFID precisamos de um receptor e de um emissor. Geralmente o módulo leitor RFID RC522 acompanha um kit com uma tag e um cartão RFID o qual usaremos nesse projeto.
Mão à obra – Usando o Módulo Leitor RFID-RC522 13,56MHz Mifare com Arduino
Componentes necessários
- Módulo RFID MFRC522 13,56MHz + Cartão e tag RFID
- Placa Arduino Uno ou similar
- LED Difuso Vermelho
- LED Difuso Verde
- 2 Resistores entre 220 e 470 Ohm
Montando o projeto
Programando
– Biblioteca
Para desenvolver o projeto proposto com o Módulo RFID RC522 utilizou-se a biblioteca MFRC522.h. Esta biblioteca foi produzida por Miguel Balboa e está disponível neste link.
Você pode expandir o tutorial abaixo para aprender como instalá-la.
Adquirindo e instalando a biblioteca que será utilizada
Para adquirir a biblioteca em questão, basta acessar o link apresentado anteriormente, clicar no botão clone or Download e por fim, no botão Download ZIP, conforme a figura abaixo.
Após a realização do download dos arquivos compactados no formato ZIP, abra a IDE do Arduino, selecione o menu Sketch, o submenu Incluir Bilioteca e por fim, basta clicar na opção Adicionar biblioteca .ZIP (Add ZIP Library) e encontrar o arquivo que acabou de ser baixado.
Uma outra forma de fazer isso é extrair o conteúdo do arquivo ZIP dentro da pasta Libraries (onde foi instalada a IDE do Arduino).
– Código do projeto
Não ligar o módulo RFID-RC522 em 5V, o mesmo deve ser ligado em 3,3V.
//Vida de Silício //Felipe Gbur #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 9 #define LED_R 2//LED Vermelho #define LED_G 3 //LED Verde char st[20]; MFRC522 mfrc522(SS_PIN, RST_PIN); void setup() { // Inicia a serial Serial.begin(9600); // Inicia SPI bus SPI.begin(); // Inicia MFRC522 mfrc522.PCD_Init(); Serial.println("Aproxime o seu cartao/TAG do leitor"); Serial.println(); pinMode(LED_R, 2); pinMode(LED_G, 3); } void loop() { digitalWrite (LED_G, LOW); digitalWrite (LED_R, HIGH); // Busca novos cartões if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Seleciona um catão a ser lido if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Mostra ID na serial Serial.print("ID 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) == "D6 35 19 7E") //ID CARTÃO { Serial.println("Acesso autorizado !"); Serial.println(); digitalWrite (LED_G, HIGH); digitalWrite (LED_R, LOW); delay(5000);//Delay apagar LED Verde digitalWrite (LED_G, LOW); digitalWrite (LED_R, HIGH); } }
Colocando para funcionar
– Descobrindo o endereço do cartão ou tag
Depois de carregar o código para seu Arduino você deve entrar no monitor serial e verificar a UID de sua tag que esta sendo detectada pelo modulo e esta sendo impressa no monitor serial, posteriormente você deve substituir a UID que já esta no código para a UID de sua tag. É possível ver na imagem a baixo Duas tag diferentes sendo utilizadas, sendo que uma delas não esta cadastrada.
– Projeto com Cartão cadastrado
Entendendo a fundo
Software
– Incluindo as bibliotecas a serem utilizadas no projeto
Inicialmente, observe que foi necessário incluir duas bibliotecas no código para que o mesmo pudesse funcionar corretamente. A biblioteca SPI.h é a responsável pela comunicação utilizando o protocolo SPI enquanto a biblioteca MFRC522.h atua sobre a biblioteca SPI.h simplificando o processo de comunicação através do protocolo citado, para que assim, o usuário possa utilizar o Módulo Leitor RFID-RC522 de maneira mais fácil.
#include <SPI.h> #include <MFRC522.h>
– Nomeando os pinos de entrada e saída através da diretiva #define
Em seguida, utilizamos a diretiva #define para associar os pinos digitais 10 e 9 para serem usado na comunicação SPI. Também nomeamos o pinos digitais que serão usados para acionar os LED’s.
#define SS_PIN 10 #define RST_PIN 9 #define LED_R 2 //LED Vermelho #define LED_G 3 //LED Verde
Vale ressaltar que isso é apenas um recurso para facilitar a didática da programação, portanto, não obrigatório.
– Declarando o objeto mfrc522
Em seguida, cria-se o objeto chamado que irá representar o módulo RFID
Lembre-se:mfrc522 é apenas um nome que escolhemos, sendo assim, é importante ressaltar que, o objeto identificado por mfrc522 poderia ser chamado de qualquer outro nome, como por exemplo, moduloRFID.
MFRC522 mfrc522(SS_PIN, RST_PIN);
– Definindo as configurações iniciais
Primeiramente, na função setup(), utiliza-se a função Serial.begin() para inicializar a comunicação serial do Arduino UNO com o computador (onde será possível ver o resultado do projeto)
Serial.begin(9600);
Em seguida, utiliza-se a função SPI.begin() para inicializar a comunicação.
// Inicia SPI bus SPI.begin();
Posteriormente, recorre-se à função mfrc522.PCD_Init() para inicializar o RFID-MFRC522.
// Inicia MFRC522 mfrc522.PCD_Init();
A função mfrc522.PICC_IsNewCardPresent() inserida dentro de um laço de repetição, faz com que o modulo fique buscando por um novo cartão a ser lido.
// Busca novos cartões if ( ! mfrc522.PICC_IsNewCardPresent()) { return; }
Suscetivamente a função mfrc522.PICC_ReadCardSerial() tem como objetivo ler a TAG ler o cartão que foi encontrado anteriormente.
// Seleciona um catão a ser lido if ( ! mfrc522.PICC_ReadCardSerial()) { return; }
Esta parte do código tem como finalidade imprimir no monitor serial a UID da TAG que foi lido.
//Mostra ID na serial Serial.print("ID 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)); }
Aqui é onde você define a UID do seu cartão/tag if (conteudo.substring(1) == “Sua tag”), onde no código é usada como exemplo a seguinte TAG: 75 25 17 CB.
Nesta parte também é onde esta definida a função do projeto, em nosso caso, quando o tag for lido o LED verde deve se acender para sinalizar que o acesso foi autorizado.
É importante ressaltar que caso queira registrar mais de uma tag você deve copiar o código a partir do if e posteriormente registrar a UID da nova tag.
Serial.print("Mensagem : "); conteudo.toUpperCase(); if (conteudo.substring(1) == "75 25 17 CB") //UID CARTÃO { Serial.println("Acesso autorizado !"); Serial.println(); digitalWrite (LED_G, HIGH); digitalWrite (LED_R, LOW); delay(5000);//Delay apagar LED Verde digitalWrite (LED_G, LOW); digitalWrite (LED_R, HIGH); }
Desafio
- Implemente um projeto que imprima em um Display LCD 16×2, ou no monitor serial caso não tenha o LCD, o nome do portador do Cartão;
- Faça um controle de ponto identificando o horário de saída e de entrada de uma pessoa usando o RTC DS3231.
Tutoriais vão de ajudar nesses desafios:
- Display LCD 16×2 com Arduino
- Display LCD 20×4 e 16×2 com Adaptador I2C
- RTC DS3231 – Registrando data e hora com Arduino
Considerações finais
Hoje aprendemos um pouco sobre a tecnologia RFID, e como utilizamos o módulo RFID-RC522 13,56MHz. Comente o que achou da postagem, e compartilhe conosco como pretende utilizar desta tecnologia em seu projeto.
12 Comments
Deixe uma pergunta, sugestão ou elogio! Estamos ansiosos para ter ouvir!Cancelar resposta
Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.
Tem como exportar esse código RFID para um arquivo txt no pc?
Muito bom, embora esteja iniciando no mundo do Arduino, gostaria de saber se tal módulo (Ou algum outro a indicar) é possível ler e gravar dados num chip cuja frequência seja de 134,2 kHz
parabens artigo muito bom
Olá! Parabéns pelo blog e por compartilhar as informações. Estou aprendendo bastante por aqui!
Gostaria apenas de deixar um sugestão de correção no código.
Nas linhas 25 e 26 ao invés de:
pinMode(LED_R, 2);
pinMode(LED_G, 3);
Deve-se colocar:
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
Pois as portas são de saídas, assim os LEDs irão acender corretamente!
No demais, parabéns mais uma vez!
=D
gostaria de replicar a montagem do circuito, porem não tem nenhuma imagem do mesmo :/
Opa Felipe!
Parabéns pelo artigo.
Era isso que eu estava procurando, um artigo simples e objetivo sobre RFID.
Quero trocar a fechadura da porta dos fundos da minha casa por solenoide alterando o seu sketck para se adequar ao que preciso.
Abraço.
olá, ao tentar descobrir o endereço do meu cartão no monitor serial, nada aconteceu. Continuou a mesma frase: “Aproxime o seu cartao/TAG do leitor”, e mesmo aproximando, nada ocorreu. Alguem pode me ajudar a saber oq ta acontecendo e como resolver?
Estou com o mesmo problema, conseguiu resolver ou alguém poderia me ajudar?
Boa tarde pessoal, esse leitor detecta o cartão em até qual distancia?
Boa tarde, Parabéns pelo artigo.
Gostaria de saber se pode me ajudar a implementar um programa que mantenha o led verde aceso enquanto o cartão correto estiver presente. Já fiz teste com a função while, porém o programa trava no loop e não consegue fazer um novo scan e notar a retirada do ID.
Felipe Martins, conseguiu resolver seu problema? Estou tentando fazer a mesma coisa mas sem sucesso ate o momento
Parabéns pelo artigo. A página é muito bem estruturada e de fácil acesso aos assuntos. O artigo é bem explicado de forma que qualquer iniciante entenda. Gostei muito. Show!