fbpx
ArduinoNovidadeVideo aula

Controle de Acesso via RFID e Arduino

Olá Pessoas! Nesse tutorial do Blog da Robótica será explicado como realizar um projeto ou sistema para controle de acesso utilizando a tecnologia RFID (módulo RC522) e o Arduino UNO. Espero que gostem da metodologia aplicada no vídeo.


MATERIAIS NECESSÁRIOS

1 x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
1 x Cabo USB;
1 x Kit Leitor RFID RC522, Cartão e Tag Mifare 13.56mhz;
1 x Protoboard 830;
1 x Led Verde;
1 x Led Vermelho;
2 x Resistor 330 Ω;
1 x Buzzer 5V;
Jumpers Macho x Macho.


VÍDEOAULA COMPLETA


ARQUIVOS

Arquivos utilizados no vídeo: link1


ESQUEMÁTICO DE LIGAÇÃO

Ligações entre o Módulo RFID RC522 e Arduino Uno:

A Figura 1 demonstra o esquemático geral das ligações (Esquemático Corrigido em relação ao apresentado no vídeo):

Figura 1 – Esquemático para o projeto Controle de Acesso via RFID.


CÓDIGO DO PROJETO

/*
-------- CONTROLE DE ACESSO VIA RFID ------------
=================================================
==   BLOG DA ROBOTICA - www.blogdarobotica.com ==
=================================================
Autor: Kleber Bastos
E-mail: contato@blogdarobotica.com
Fanpage: facebook.com/blogdarobotica
YouTube: youtube.com/user/blogdarobotica
*/
//Bibliotecas
#include <SPI.h>
#include <MFRC522.h>
//Pinos
#define LED_VERDE 6
#define LED_VERMELHO 7
#define BUZZER 8
#define SS_PIN 10
#define RST_PIN 9
String IDtag = ""; //Variável que armazenará o ID da Tag
bool Permitido = false; //Variável que verifica a permissão 
//Vetor responsável por armazenar os ID's das Tag's cadastradas
String TagsCadastradas[] = {"ID_1", 
                            "ID_2",
                            "ID_3"};
MFRC522 LeitorRFID(SS_PIN, RST_PIN);    // Cria uma nova instância para o leitor e passa os pinos como parâmetro
void setup() {
        Serial.begin(9600);             // Inicializa a comunicação Serial
        SPI.begin();                    // Inicializa comunicacao SPI 
        LeitorRFID.PCD_Init();          // Inicializa o leitor RFID
        pinMode(LED_VERDE, OUTPUT);     // Declara o pino do led verde como saída
        pinMode(LED_VERMELHO, OUTPUT);  // Declara o pino do led vermelho como saída
        pinMode(BUZZER, OUTPUT);        // Declara o pino do buzzer como saída
}
void loop() {  
  Leitura();  //Chama a função responsável por fazer a leitura das Tag's
}
void Leitura(){
        IDtag = ""; //Inicialmente IDtag deve estar vazia.
        
        // Verifica se existe uma Tag presente
        if ( !LeitorRFID.PICC_IsNewCardPresent() || !LeitorRFID.PICC_ReadCardSerial() ) {
            delay(50);
            return;
        }
        
        // Pega o ID da Tag através da função LeitorRFID.uid e Armazena o ID na variável IDtag        
        for (byte i = 0; i < LeitorRFID.uid.size; i++) {        
            IDtag.concat(String(LeitorRFID.uid.uidByte[i], HEX));
        }        
        
        //Compara o valor do ID lido com os IDs armazenados no vetor TagsCadastradas[]
        for (int i = 0; i < (sizeof(TagsCadastradas)/sizeof(String)); i++) {
          if(  IDtag.equalsIgnoreCase(TagsCadastradas[i])  ){
              Permitido = true; //Variável Permitido assume valor verdadeiro caso o ID Lido esteja cadastrado
          }
        }       
        if(Permitido == true) acessoLiberado(); //Se a variável Permitido for verdadeira será chamada a função acessoLiberado()        
        else acessoNegado(); //Se não será chamada a função acessoNegado()
        delay(2000); //aguarda 2 segundos para efetuar uma nova leitura
}
void acessoLiberado(){
  Serial.println("Tag Cadastrada: " + IDtag); //Exibe a mensagem "Tag Cadastrada" e o ID da tag não cadastrada
    efeitoPermitido();  //Chama a função efeitoPermitido()
    Permitido = false;  //Seta a variável Permitido como false novamente
}
void acessoNegado(){
  Serial.println("Tag NAO Cadastrada: " + IDtag); //Exibe a mensagem "Tag NAO Cadastrada" e o ID da tag cadastrada
  efeitoNegado(); //Chama a função efeitoNegado()
}
void efeitoPermitido(){  
  int qtd_bips = 2; //definindo a quantidade de bips
  for(int j=0; j<qtd_bips; j++){
    //Ligando o buzzer com uma frequência de 1500 hz e ligando o led verde.
    tone(BUZZER,1500);
    digitalWrite(LED_VERDE, HIGH);   
    delay(100);   
    
    //Desligando o buzzer e led verde.      
    noTone(BUZZER);
    digitalWrite(LED_VERDE, LOW);
    delay(100);
  }  
}
void efeitoNegado(){  
  int qtd_bips = 1;  //definindo a quantidade de bips
  for(int j=0; j<qtd_bips; j++){   
    //Ligando o buzzer com uma frequência de 500 hz e ligando o led vermelho.
    tone(BUZZER,500);
    digitalWrite(LED_VERMELHO, HIGH);   
    delay(500); 
      
    //Desligando o buzzer e o led vermelho.
    noTone(BUZZER);
    digitalWrite(LED_VERMELHO, LOW);
    delay(500);
  }  

}

Não funcionou? Tem dúvidas? Deixa abaixo, assim que possível nós iremos responder.

Obrigado por chegar até aqui!

Att. Kleber Bastos

Dúvidas? Deixe seu comentário

Kleber Bastos

Bacharel em Engenharia de Computação. Um dos criadores do Blog da Robótica. Faz parte da equipe Casa da Robótica desde 2017. Apaixonado por tecnologias e pelas “loucuras” que é possível criar usando microcontroladores e impressoras 3D. Ex-BBB, mas isso é uma longa história... que poderá ser contada posteriormente.

Deixe uma pergunta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.