Aprenda a construir um sistema de controle de acesso, utilizando um Kit RFID com Arduino!
Os cartões RFID são usados em uma série de aplicações na vida cotidiana, desde cartões de crédito até cartões de identificação automática para controle de acesso.
Esses cartões possuem uma tarja magnética que armazena dados digitais e podem ser lidos e escritos por meio de ondas de rádio.
RFID é a sigla para: Radio Frequency Identification. É uma tecnologia que pertence a uma área chamada de Automatic Identification and Data Capture (AIDC).
Os métodos AIDC identificam objetos e pessoas automaticamente, coletam dados sobre eles e entram com esses dados diretamente em softwares com pouca ou nenhuma intervenção humana.
Neste artigo, vou ensinar você a construir um sistema de controle de acesso, utilizando um Kit RFID com Arduino. Confira!
O módulo leitor RFID baseado no chip MFRC522 é utilizado para comunicação sem fio a uma frequência de 13,56 MHz. A empresa que desenvolveu o módulo é a NXP, uma das gigantes do setor de semicondutores.
Trata-se de um chip de consumo extremamente baixo e dimensões reduzidas. A sua principal aplicação é a leitura de cartões que utilizam o padrão Mifare.
Com o kit é possível desenvolver e validar projetos de sistemas de controle de acesso, sistemas de segurança e outras variações.
As tags RFID podem ser usadas para ler várias informações sobre o portador do cartão, permitindo sua identificação automática para validação ou não do acesso.
Métodos e tecnologias que usam RFID baseiam-se em ondas de rádio para ler e gravar dados. Os sistemas RFID são feitos dos seguintes componentes principais:
Os kits RFID, como o usado nessa montagem, vem com todos esses componentes. A RFID tag e antena vem integrados no cartão ou numa tag tipo chaveiro.
O módulo leitor também faz parte do kit e é por meio dele que é feita a gravação/leitura de dados. No nosso caso, o leitor é baseado no CI MFRC522.
Ao se aproximar o cartão do módulo leitor, a antena transmite os dados na frequência de operação (13,56MHz) para o leitor, que recebe os dados e converte para um formato que possa ser processado pelo CI e manipulado por um MCU externo (Arduino, Raspberry ou outro sistema qualquer).
As aplicações vão muito além do controle de acesso. Algumas das mais comuns são:
Para saber mais sobre essas e outras aplicações, recomendamos o blog Atlasrfidstore. Para mais informações sobre a tecnologia RFID, recomendamos este texto da UFRJ e este artigo do Instituto Newton Braga.
Confira o passo a passo da descrição do nosso projeto de sistema de controle de acesso utilizando um Kit RFID com Arduino:
De posse de todos os componentes, você pode montar o circuito conforme o diagrama abaixo. A pinagem do RC522 com Arduino é a seguinte:
Lembre-se de ligar o Vcc do RFID-RC522 no 3.3V! O circuito do RFID trabalha com a tensão de 3.3V, e não os 5V tradicionais do Arduino.
Daí a necessidade de usar o level shifter bidirecional entre um e outro. Alguns canais são unidirecionais, mas como você já vai usar um circuito de level shifter, recomendamos já comprar um totalmente bidirecional, como o indicado na lista de componentes.
Montagem Cartão RFID + Display LCD
As conexões do LCD estão bem explicitadas no código mais abaixo. Cada pino do LCD está associado a uma macro por meio da qual nós definimos o pino de ligação com o Arduino.
O software para carregar no Arduino é o seguinte:
#include <SPI.h> #include <LiquidCrystal.h> #include <MFRC522.h> #define LCD_RS 7 #define LCD_E 6 #define LCD_D4 2 #define LCD_D5 3 #define LCD_D6 4 #define LCD_D7 5 #define SDA_PIN 9 #define RST_PIN 8 #define CartaoLiberado " 22 C9 0A 10" #define AcionaBuzzer 10 #define BeepsLiberado 2 #define BeepsNegado 4 MFRC522 mfrc522(SDA_PIN, RST_PIN); // Create MFRC522 instance. LiquidCrystal lcd(LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7); char st[20]; void mensageminicial(); String UID= ""; byte letra; void setup() { pinMode(AcionaBuzzer,OUTPUT); Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); lcd.begin(16, 2); StandardMessage(); } void loop() { // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) { return; } getUID(); //separa a string com o UID para ser testada if (UID == CartaoLiberado) { lcd.clear(); lcd.setCursor(0,0); //Mostra mensagem de acesso liberado e aciona buzzer lcd.print("Acesso Liberado!"); BuzzerBeeps(BeepsLiberado); delay(2000); StandardMessage(); } else { lcd.clear(); lcd.setCursor(0,0); //Mostra mensagem de acesso negado e aciona buzzer lcd.print("Acesso Negado!"); BuzzerBeeps(BeepsNegado); delay(2000); StandardMessage(); } delay(1000); } void StandardMessage() { lcd.clear(); lcd.setCursor(0,0); lcd.print(" Pronto para"); lcd.setCursor(0,1); lcd.print(" Leitura!"); } void getUID() { Serial.print("UID da tag : "); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); if( mfrc522.uid.uidByte[i] < 0x10) UID.concat(" 0"); else UID.concat(" "); // conteudo.concat( String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); UID.concat(String(mfrc522.uid.uidByte[i], HEX)); } UID.toUpperCase(); Serial.println(" "); } void BuzzerBeeps(int NumeroBeeps) { int i; for(i=0; i<NumeroBeeps; i++) { digitalWrite(AcionaBuzzer, HIGH); delay(500); digitalWrite(AcionaBuzzer, LOW); delay(500); } }
Na função void setup() nós fazemos todas as inicializações necessários:
Além disso, nós já chamamos a função StandardMessage() para exibir uma mensagem padrão no LCD.
Na função void Loop(), temos dois if’s que estão presentes em todos os exemplos de programas da biblioteca MFRC522.h.
Nesses dois if’s são chamadas as funções específicas da biblioteca para procurar por algum cartão nas proximidades do leitor e selecionar/ler esse cartão, caso o mesmo esteja presente.
Após essa primeira etapa, chamamos a função getUID(), na qual nós separamos os bytes de identificação do cartão lido em uma string de nome UID. Além disso, nós apresentamos esse UID na porta serial.
Caso você não saiba ainda qual o UID do seu cartão, a primeira vez que você rodar o programa, sempre que você aproximar o cartão do leitor vai aparecer a mensagem de acesso negado, pois o UID que está no programa (22 C9 0A 10) é do cartão que usamos na elaboração do post.
Basta você abrir o terminal serial e aproximar o cartão do leitor, assim o UID do seu cartão será exibido no terminal serial e você pode substituir a flag CartaoLiberado no programa pelo seu UID.
Após carregar o programa com a flag atualizada, a mensagem exibida para o seu cartão será de “Acesso Liberado”.
De posse do UID do cartão lido, nós fazemos um if-else para saber se esse UID é o mesmo que está salvo no programa(na flagCartaoLiberado).
Se for o mesmo, o programa mostra a mensagem “Acesso Liberado” e dispara 2 beeps com o buzzer. Se for qualquer outro cartão, é mostrada a mensagem “Acesso Negado” e disparamos 4 beeps com o Buzzer,
Temos três funções auxiliares, são elas;
A função BuzzerBeeps é para acionar o buzzer um determinado número de vezes. O parâmetro NumeroBeeps é o número de vezes que o buzzer será acionado com um intervalo de 500ms(você pode ajustar o intervalo se quiser).
A função StandarMessage() mostra uma mensagem padrão no LCD, dizendo: ” Pronto para Leitura”;
Por fim, a função getUID(), como dissemos mais acima, utiliza a função mfrc522.uid.uidByte[i] da biblioteca MFRC522.h para acessar as informações lidas do cartão anteriormente(esses dados foram lidos com a função mfrc522.PICC_ReadCardSerial(), no início do void loop().
Você também pode conferir o código completo e atualizado visitando o repositório desse post no GitHub da Eletrogate.
O UID do cartão será exibido no terminal serial como a seguir:
UID do cartão que será exibido no terminal serial
A montagem pode ficar um pouco mais cheia do que o normal, devido aos fios para conectar o RF522 aos level shifters e deles ao Arduino.
Mas esperamos que você veja uma mensagem como a mostrada abaixo:
Montagem RFID com Arduino
Antes de fecharmos mais esse post, fica a recomendação de leitura dos exemplos disponibilizados na biblioteca MFRC522.h.
Ao fazer o download do arquivo e extraí-lo para seu computador, uma pasta chamada “examples” poderá ser acessada. Nela estão vários exemplos de programas com aplicações de RFID com arduino.
A partir dos códigos de exemplo, é possível criar aplicações próprias e aprender muito mais sobre essa tecnologia.
Se tiver alguma dúvida mais, ou tiver alguma sugestão de melhoria ou correção, deixe nos comentários e compartilhe com os demais leitores.
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!