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.
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.
LiquidCrystal_I2C-1.1.2.zip aqui
MFRC522.zip aqui
// =====================================
// 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");
}