Shefarol Soluções Web

RFID - Controle de Acesso com LCD I2C - Voltar

RFID - Controle de Acesso com LCD I2C

Neste sketch vamos montar um sistema utilizando o kit RFID RC522 (placa + cartão + tag) e controlar quem pode ter acesso, a tag acenderá o led verde "acesso liberado" e o cartão acenderá o led vermelho, indicando "acesso negado" e um LCD para mostrar os textos necessários.

Kit RFID-RC522
CURIOSIDADE
Diferente de sistemas mais básicos de 125kHz que só leem um ID, ele opera em 13.56MHz (padrão Mifare) e permite não só ler, mas também gravar dados em setores de memória dos cartões/tags, suportando comunicação rápida via SPI e integrando-se facilmente com Arduino para criar sistemas de controle de acesso, segurança e automação onde você pode personalizar as tags com informações, além de ter baixo consumo e modo de suspensão para economia de energia.
Download das bibliotecas

LiquidCrystal_I2C-1.1.2.zip aqui
MFRC522.zip aqui

 

 

Sketch básico RFID - Controle de Acesso com LCD I2C
// =====================================
//   RFID - CONTROLE DE ACESSO COM LCD
// =====================================
      

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

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

// Endereço I2C do display
LiquidCrystal_I2C lcd(0x27, 16, 2);

// LEDs
#define LED_OK 8      // LED verde
#define LED_ERRO 7    // LED vermelho

// Buzzer
#define BUZZER 6

void setup() 
{
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();

  pinMode(LED_OK, OUTPUT);
  pinMode(LED_ERRO, OUTPUT);
  pinMode(BUZZER, OUTPUT);

  digitalWrite(LED_OK, LOW);
  digitalWrite(LED_ERRO, LOW);
  digitalWrite(BUZZER, LOW);

  lcd.init();
  lcd.backlight();
  mensageminicial();

  Serial.println("Aproxime o seu cartao do leitor...");
  Serial.println();
}

void loop() 
{
  if (!mfrc522.PICC_IsNewCardPresent()) return;
  if (!mfrc522.PICC_ReadCardSerial()) return;

  Serial.print("UID da tag :");
  String conteudo = "";

  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();
  conteudo.toUpperCase();

  // -------------------------------------------------
  // UID PERMITIDO
  // -------------------------------------------------
  if (conteudo.substring(1) == "5D EE F4 05")
  {
    Serial.println("Acesso Liberado!");

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Ola Usuario!");
    lcd.setCursor(0,1);
    lcd.print("Acesso Liberado!");

    digitalWrite(LED_OK, HIGH);
    digitalWrite(LED_ERRO, LOW);

    somPermitido();   // <<< SOM DE SUCESSO

    delay(3000);
    digitalWrite(LED_OK, LOW);

    mensageminicial();
  }

  // -------------------------------------------------
  // UID NEGADO
  // -------------------------------------------------
  else if (conteudo.substring(1) == "42 2D 52 05")
  {
    Serial.println("Acesso Negado!");

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Ola Cartao!");
    lcd.setCursor(0,1);
    lcd.print("Acesso Negado!");

    digitalWrite(LED_OK, LOW);
    digitalWrite(LED_ERRO, HIGH);

    somNegado();     // <<< SOM DE ERRO

    delay(3000);
    digitalWrite(LED_ERRO, LOW);

    mensageminicial();
  }
}

void somPermitido()
{
  // Som alegre: duas notas curtas subindo
  tone(BUZZER, 3000, 50);
  delay(100);
  tone(BUZZER, 3000, 50);
  delay(100);
  tone(BUZZER, 3000, 50);
  delay(100);
}

void somNegado()
{
  // Som grave: duas notas curtas descendentes
  tone(BUZZER, 50, 500);
  delay(200);
}

void mensageminicial()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(" Aproxime o seu");
  lcd.setCursor(0,1);
  lcd.print("cartao do leitor");
}

 

Esquema de ligação

Esquema de ligação

 

Lista de materiais