← Todos os projetos
Intermediário ⏱ 45 min 02 de julho de 2026

Leitor RFID RC522: controle de acesso com Arduino

Monte um leitor de cartões RFID que valida o acesso na hora: aproxime uma tag autorizada e o LED verde acende; uma tag desconhecida acende o vermelho. É a base de fechaduras eletrônicas, catracas, controle de ponto e sistemas de segurança.

Leitor RFID RC522: controle de acesso com Arduino

Como funciona

O módulo RC522 lê a identificação única (UID) de cartões e tags RFID por aproximação, usando radiofrequência a 13,56 MHz. Cada cartão tem um UID diferente e impossível de duplicar facilmente — é o mesmo princípio dos crachás de empresa e cartões de transporte. O Arduino lê esse UID, compara com uma lista de cartões autorizados que você define no código e decide: se estiver na lista, acende o LED verde; se não, o vermelho. A comunicação entre o Arduino e o RC522 é feita por SPI, por isso ele usa vários fios.

O que você vai precisar

Todos os componentes disponíveis na A2 Robotics — clique em cada item para comprar

Arduino Uno R3

1 unidade

Ver produto ↗

Módulo RFID RC522 (com cartão e tag)

1 kit

Ver produto ↗

LED difuso 5mm verde

1 unidade

Ver produto ↗

LED difuso 5mm vermelho

1 unidade

Ver produto ↗

Resistor 330Ω (1/4W)

2 unidades

Ver produto ↗

Protoboard

1 unidade

Ver produto ↗

Jumpers (cabos de ligação)

1 kit

Ver produto ↗

Esquema de ligação

ARDUINO UNO R3 131211 10987 3.3VGND RC522 SDA SCK MOSI MISO GND RST 3.3V Verde (8) Vermelho (7)
SDA → 10 SCK → 13 MOSI → 11 MISO → 12 RST → 9 3.3V GND
Atenção à alimentação O RC522 funciona com 3.3V — nunca ligue no 5V, pois pode queimar o módulo.

Mapa de pinos

Pino do RC522Ligação no Arduino
SDA (SS)Pino 10
SCKPino 13
MOSIPino 11
MISOPino 12
RSTPino 9
3.3V3.3V (nunca 5V!)
GNDGND
LED verde / vermelhoPinos 8 / 7 (com resistor 330Ω)

Antes de programar: instale a biblioteca

Este projeto usa a biblioteca MFRC522. Na IDE do Arduino, vá em Ferramentas → Gerenciar Bibliotecas, procure por "MFRC522" (a de GithubCommunity) e clique em Instalar. Sem ela, o código não compila.

Passo 1: descubra o UID dos seus cartões

Cada cartão tem um código único (UID). Antes de montar a validação, você precisa descobrir o UID dos seus cartões. Carregue o código abaixo, abra o Monitor Serial (Ferramentas → Monitor Serial, a 9600 bauds) e aproxime cada cartão: o UID aparecerá na tela. Anote-os.

// Passo 1 — Descobrir o UID dos cartões — A2 Robotics
#include <SPI.h>
#include <MFRC522.h>

#define PINO_SS  10
#define PINO_RST 9

MFRC522 leitor(PINO_SS, PINO_RST);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  leitor.PCD_Init();
  Serial.println("Aproxime um cartao do leitor...");
}

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

  String uid = lerUID();
  Serial.print("UID do cartao: ");
  Serial.println(uid);
  leitor.PICC_HaltA();
}

// Monta o UID como texto em maiusculas
String lerUID() {
  String uid = "";
  for (byte i = 0; i < leitor.uid.size; i++) {
    if (leitor.uid.uidByte[i] < 0x10) uid += "0";
    uid += String(leitor.uid.uidByte[i], HEX);
  }
  uid.toUpperCase();
  return uid;
}

Passo 2: o código de controle de acesso

Agora, com os UIDs anotados, coloque-os na lista autorizados do código abaixo. Ao aproximar um cartão da lista, o LED verde acende; qualquer outro cartão acende o vermelho.

// Controle de acesso RFID — A2 Robotics
#include <SPI.h>
#include <MFRC522.h>

#define PINO_SS     10
#define PINO_RST    9
#define LED_VERDE   8
#define LED_VERMELHO 7

MFRC522 leitor(PINO_SS, PINO_RST);

// Coloque aqui os UIDs autorizados (descobertos no Passo 1)
String autorizados[] = {
  "A3D4F231",
  "12AB34CD"
};
const int totalAutorizados = 2;

void setup() {
  pinMode(LED_VERDE, OUTPUT);
  pinMode(LED_VERMELHO, OUTPUT);
  Serial.begin(9600);
  SPI.begin();
  leitor.PCD_Init();
  Serial.println("Sistema pronto. Aproxime seu cartao.");
}

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

  String uid = lerUID();
  Serial.print("Cartao lido: ");
  Serial.println(uid);

  if (estaAutorizado(uid)) {
    Serial.println("ACESSO LIBERADO");
    piscar(LED_VERDE);
  } else {
    Serial.println("ACESSO NEGADO");
    piscar(LED_VERMELHO);
  }

  leitor.PICC_HaltA();
}

// Verifica se o UID está na lista de autorizados
bool estaAutorizado(String uid) {
  for (int i = 0; i < totalAutorizados; i++) {
    if (autorizados[i] == uid) return true;
  }
  return false;
}

// Acende um LED por 1 segundo
void piscar(int pino) {
  digitalWrite(pino, HIGH);
  delay(1000);
  digitalWrite(pino, LOW);
}

// Monta o UID como texto em maiusculas
String lerUID() {
  String uid = "";
  for (byte i = 0; i < leitor.uid.size; i++) {
    if (leitor.uid.uidByte[i] < 0x10) uid += "0";
    uid += String(leitor.uid.uidByte[i], HEX);
  }
  uid.toUpperCase();
  return uid;
}

Passo a passo

  1. Ligue o RC522 ao Arduino

    Siga o mapa de pinos: SDA→10, SCK→13, MOSI→11, MISO→12, RST→9. Alimente com 3.3V e GND. Lembre: nunca use 5V no RC522.

  2. Instale os LEDs

    LED verde no pino 8 e vermelho no pino 7, cada um com um resistor de 330Ω em série.

  3. Instale a biblioteca MFRC522

    Na IDE do Arduino, em Gerenciar Bibliotecas, procure e instale a MFRC522.

  4. Descubra os UIDs

    Carregue o código do Passo 1, abra o Monitor Serial e aproxime seus cartões para anotar o UID de cada um.

  5. Configure e teste

    Coloque os UIDs autorizados no código do Passo 2, carregue no Arduino e teste: cartão autorizado acende verde, os demais acendem vermelho.

Vá além

Com a validação funcionando, você pode evoluir o projeto: trocar os LEDs por uma fechadura solenoide ou trava elétrica para uma porta real, adicionar um buzzer de confirmação, um display LCD mostrando "Bem-vindo", ou registrar cada acesso com data e hora. É o ponto de partida para um sistema de segurança completo.

Gostou do projeto? Monte o seu Todos os componentes disponíveis com entrega para todo o Brasil
Ver produtos →