Guia do Arduino MFRC522 – A TAG/Cartão RFID está presente ou removida?

Tempo de leitura: 3 minutes

Guia do Arduino MFRC522 – A TAG/Cartão RFID está presente ou removida?

 

 

 

 

Por que precisamos detectar a presença ou remoção de cartões RFID?

A maioria dos tutoriais sobre RFID na Internet ensinará você a ler cartões RFID. Mas isso não informa quando a tag está ausente. Por exemplo, em um sistema de atendimento baseado em RFID, não precisamos saber por quanto tempo o cartão esteve lá. Ainda assim, em alguns casos, precisamos saber que o cartão está presente ou foi removido. Por exemplo, em 6 jogos de velas, é necessário colocar todas as velas em um local especificado para acionar a saída. Para que o cartão sob velas deve permanecer nessa posição. Caso contrário, isso perturbará a sequência. Usaremos o Arduino e o mfrc522 para aprender esse conceito.

 

 

Detectando a remoção de etiquetas RFID

Neste tutorial, escreveremos um código que, ao detectar a placa, acenderá o LED vermelho. E quando removermos a etiqueta, ela apagará o LED vermelho. Além disso, os resultados aparecerão no monitor serial. Você pode modificar o código e usá-lo para várias finalidades. Parece bom? Vamos começar.

 

 

Do que precisamos?

Neste  tutorial precisamos os itens mostrados na foto abaixo, listados abaixo.

  1. Arduino Uno (ou equivalente)
  2. o leitor de RFID MFRC522
  3. um TAG (Plástico ou cartão)
  4. os fios de ligação
  5. a placa para ligar (ProtoBoard)
  6. o LED
  7. um Resistor (220ohms)

Foto da Lista.

Guia do Arduino - MFRC 522 - Lista

 

 

 

Arduino MFRC522 Interface

Guia do Arduino MFRC522 Pinout

PINOS MFRC522 PINOS ARDUINO UNO
SDA D10
SCK D13
MOSI D11
MISO D12
GND GND
RST D9
3.3V 3.3V

 

Diagrama

Após conectar o MFRC522, conecte o LED ao pino D7 e GND.

 

Código

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN         9           
#define SS_PIN          10 
#define Green 7 

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Criar instância MFRC522

void setup(){
  pinMode(Green,OUTPUT);
  Serial.begin(9600);                                           // Initialize serial communications with the PC
  SPI.begin();                                                  // Init SPI bus
  mfrc522.PCD_Init(); 
}

uint8_t buf[10]= {};

MFRC522::Uid id;
MFRC522::Uid id2;

bool is_card_present = false;
uint8_t control = 0x00;

void PrintHex(uint8_t *data, uint8_t length) // imprime dados de 8 bits em hexadecimal com zeros à esquerda
{
   char tmp[16];
   for (int i=0; i<length; i++) { 
     sprintf(tmp, "0x%.2X",data[i]); 
     Serial.print(tmp); 
     Serial.print(" ");
   }
}

//*****************************************************************************************//

void cpid(MFRC522::Uid *id){
  memset(id, 0, sizeof(MFRC522::Uid));
  memcpy(id->uidByte, mfrc522.uid.uidByte, mfrc522.uid.size);
  id->size = mfrc522.uid.size;
  id->sak = mfrc522.uid.sak;
}

void loop(){
  MFRC522::MIFARE_Key key;
  for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
  MFRC522::StatusCode status;

   // Procure novos cartões
  if ( !mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  if ( !mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  bool result = true;
  uint8_t buf_len=4;
  cpid(&id);
  Serial.print("Novo Cartão ");
  PrintHex(id.uidByte, id.size);
  Serial.println("");

  while(true){
    digitalWrite(Green,HIGH);
    control=0;
    for(int i=0; i<3; i++){
      if(!mfrc522.PICC_IsNewCardPresent()){
        if(mfrc522.PICC_ReadCardSerial()){
          //Serial.print('a');
          control |= 0x16;
        }
        if(mfrc522.PICC_ReadCardSerial()){
          //Serial.print('b');
          control |= 0x16;
        }
        //Serial.print('c');
          control += 0x1;
      }
      //Serial.print('d');
      control += 0x4;
    }
    
    //Serial.println(control);
    if(control == 13 || control == 14){
      //o cartão ainda está lá
    } else {
      break;
    }
  }
  Serial.println("Cartão Retirado");
  digitalWrite(Green,LOW);
  delay(500);// altere o valor se você quiser ler cartões mais rapidamente

  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();
  
}

Demonstração nas fotos.

Guia do Arduino - MFRC522 - Ligado
Como pode ver o Modulo MFRC522 (Fica com o LED acesso) e o Led da protoboard, desligado.

 

Guia do Arduino - MFRC522 - Rodando
Como pode ver o Modulo MFRC522 está tornando o LED da ProtoBoard, ligado pois o TAG esta encostado no sensor.

Conclusão

Seguindo este guia, você poderá saber como o RFID funciona, como fazer a interface do módulo RFID com o Arduino e como detectar a remoção de tags RFID.

Visits: 2 Visits: 1200563