
Se você já passou por um caixa de autoatendimento em um supermercado e viu como, ao colocar seus itens em uma bandeja, eles aparecem automaticamente na tela , você já viu a tecnologia RFID em ação. Não é mágica nem telepatia tecnológica: é um sistema baseado em radiofrequência que permite identificar objetos sem contato direto, e você pode replicá-lo em casa com um Arduino simples e um leitor barato como o RC522.
Neste guia, você aprenderá, passo a passo, como usar o Arduino e um leitor RFID RC522 para ler e gravar tags, entender exatamente o que é RFID, quais tipos de sistemas existem, como os cartões passivos são alimentados, como a memória de um cartão MIFARE Classic 1K é organizada e como construir projetos práticos, como um sistema de controle de acesso ou um cartão de transporte recarregável. Acomode-se, pois vamos nos aprofundar no assunto de forma completa, porém clara e acessível.
O que é a tecnologia RFID e como ela funciona?
A identificação por radiofrequência, ou RFID, é um sistema que permite o reconhecimento de objetos por meio de um identificador único transmitido por rádio. Esse identificador é geralmente chamado de UID (Identificação Única) e pode ser considerado o ID da etiqueta. O sistema completo consiste em dois elementos principais: a etiqueta RFID (ou transponder) e o leitor RFID (transceptor).
As etiquetas RFID vêm em diversos formatos: cartões de plástico semelhantes a cartões de crédito, chaveiros eletrônicos, adesivos que colam em produtos para evitar roubo e até mesmo chips implantados sob a pele de animais para identificação. Internamente, todos compartilham os mesmos componentes: uma antena e um pequeno chip que armazena informações e se comunica com o leitor.
Existem etiquetas somente leitura, cujo UID é programado de fábrica e não pode ser modificado, e etiquetas de leitura/gravação, que um leitor adequado, como o módulo RC522, pode tanto ler quanto gravar dados . Isso possibilita aplicações como cartões de transporte recarregáveis, sistemas de controle de acesso com saldos pré-pagos, sistemas de ponto eletrônico e muito mais.
Por outro lado, temos o leitor ou transceptor RFID. Este dispositivo não só recebe dados, como também emite um campo eletromagnético de radiofrequência . Este campo é fundamental para compreendermos como as etiquetas passivas são alimentadas e como a informação é trocada entre o cartão e o leitor.
Alimentação elétrica e princípio de funcionamento das etiquetas RFID
Uma pergunta muito comum é: se as etiquetas RFID em produtos de supermercado ou cartões de acesso não têm baterias, de onde vem a energia para funcionar? A resposta é que muitas dessas etiquetas são passivas e alimentadas por indução eletromagnética a partir do campo gerado pelo leitor.
Ao aproximar uma etiqueta passiva de um leitor, sua antena entra no campo eletromagnético gerado pelo módulo (por exemplo, a 13,56 MHz no caso do RC522). Esse campo induz uma corrente na antena da etiqueta, que é usada para alimentar momentaneamente o chip interno . Uma vez "ativado", o chip modula o sinal que envia de volta ao leitor (isso é chamado de retroespalhamento), codificando o UID e, se aplicável, outros dados armazenados na memória.
Ao contrário de tecnologias como o infravermelho, não é necessária uma linha de visão direta entre a etiqueta e o leitor : a radiofrequência pode penetrar certos materiais, embora seu comportamento dependa da frequência, da presença de metal, água, etc. O leitor capta o sinal retroespalhado, interpreta-o e, em seguida, envia os dados para um microcontrolador (como Arduino, ESP8266 ou ESP32) ou um computador.
Tipos de sistemas RFID de acordo com a frequência
O espectro de radiofrequência é muito amplo e as ondas de rádio não se comportam da mesma maneira em todas as frequências . Portanto, diferentes bandas são usadas em RFID dependendo da aplicação. O leitor e a etiqueta devem ser projetados para funcionar na mesma frequência, assim como um rádio precisa sintonizar a estação correta.
De forma geral, podemos agrupar os sistemas RFID em três categorias principais de acordo com a banda que utilizam:
- Baixa frequência (BF): em torno de 125-134 kHz.
- Alta frequência (AF): em torno de 13,56 MHz, que inclui tecnologias como MIFARE e NFC.
- Frequência ultra-alta (UHF): entre aproximadamente 433 MHz e 860-960 MHz.
Sistemas RFID de baixa frequência (LF)
Os sistemas RFID de baixa frequência possuem um comprimento de onda relativamente longo, o que lhes permite penetrar melhor em materiais finos e objetos com alto teor de água , como frutas ou bebidas. Eles também apresentam um desempenho razoável próximo a metais finos.
No entanto, essa vantagem apresenta limitações significativas: o alcance típico é de apenas alguns centímetros e a taxa de transmissão de dados é baixa, resultando em menor capacidade de memória e custos mais elevados das etiquetas . Esses sistemas são comumente usados para controle de acesso simples, chaves de proximidade mais antigas e identificação de animais.
Sistemas RFID e NFC de alta frequência (HF)
A banda de alta frequência, em 13,56 MHz, é provavelmente a mais popular no nível de projetos "faça você mesmo" e "faça você mesmo", porque é onde se encontram os cartões MIFARE e a tecnologia NFC (Near-Field Communication) , que muitos telefones celulares usam para pagamentos sem contato.
Os sistemas HF funcionam bem perto de metal e na presença de níveis moderados a altos de água, normalmente oferecendo um alcance de alguns centímetros até cerca de um metro em condições ideais. As taxas de dados permanecem modestas, mas são suficientes para aplicações de identificação, acesso e transferência de pequenos volumes de dados. Muitos padrões globais são baseados em HF, facilitando a interoperabilidade de equipamentos e placas.
Sistemas RFID de ultra-alta frequência (UHF)
No extremo oposto do espectro estão os sistemas UHF, capazes de alcançar distâncias que variam de alguns centímetros a mais de 20 metros. Eles são ideais quando muitas etiquetas precisam ser lidas rapidamente e à distância , por exemplo, para gerenciamento de estoque em armazéns, contagem de pessoas em eventos ou cronometragem de atletas na linha de chegada em corridas.
A desvantagem é que, por terem um comprimento de onda mais curto, o sinal atenua-se mais e penetra menos eficazmente em metais e água . Mesmo assim, são amplamente utilizados em sistemas de portagem, controlo de acessos a estacionamentos e rastreamento logístico em larga escala.
Módulo RFID RC522: características e pinos
Para projetos Arduino, um dos leitores mais populares é o RC522, baseado no chip NXP MFRC522. É um módulo muito acessível e amplamente utilizado que opera em alta frequência (13,56 MHz) com cartões MIFARE e permite tanto a leitura quanto a gravação em tags compatíveis.
Geralmente é vendido em um kit que inclui o próprio leitor, um cartão de crédito e um chaveiro RFID. Esses cartões são tipicamente cartões MIFARE Classic de 1K ou 4K, um padrão extremamente popular em transporte, controle de acesso e soluções de baixo custo. O RC522 gera um campo eletromagnético de alta frequência e, na prática, seu alcance útil é de cerca de 3 a 5 cm, embora teoricamente possa alcançar um pouco mais longe.
Em relação à comunicação com o microcontrolador, o RC522 é integrado principalmente via SPI (Serial Peripheral Interface) e suporta velocidades de até 10 Mbps. Ele também suporta I2C e UART, embora na maioria dos projetos Arduino seja utilizado o SPI devido à sua maior velocidade e simplicidade nesse contexto.
Eletricamente, o módulo opera com uma tensão de alimentação entre 2,5 V e 3,3 V. A placa geralmente possui um pino VCC claramente marcado para conexão a 3,3 V. Não o alimente diretamente com 5 V , pois você corre o risco de danificá-lo. Como ponto positivo, os níveis lógicos geralmente toleram 5 V, portanto, ele pode ser conectado aos pinos digitais do Arduino UNO sem conversores de nível para testes básicos, embora em um projeto profissional, a adaptação dos níveis seja recomendável.
Fixação do módulo RC522
O RC522 típico inclui 8 pinos de conexão para o microcontrolador:
- VCCFonte de alimentação, entre 2,5 V e 3,3 V.
- RSTPino de reinicialização; permite desligar e reiniciar o módulo definindo o nível como BAIXO/ALTO.
- GND: massa ou referência da Terra.
- IRQPino de interrupção que pode alertar o microcontrolador quando uma etiqueta entra no campo do leitor.
- MISO / SCL / TXPino multifuncional; como MISO em SPI, SCL em I2C ou TX em UART.
- MOSI: linha de dados de saída do mestre para o escravo em SPI.
- SCK: Clock da interface SPI.
- SS / SDA / RX: pino de seleção de escravo em SPI, SDA em I2C ou RX em UART.
Em placas Arduino UNO e outras baseadas no ATmega328P, os pinos SPI já estão definidos por hardware, portanto, o diagrama de conexão típico para usar SPI é:
- VCC → 3,3 V do Arduino.
- GND → GND do Arduino.
- SCK → pino 13 no UNO/Nano.
- MOSI → pino 11 no UNO/Nano.
- MISO → pino 12 no UNO/Nano.
- SS (SDA) → pino 10 (ou aquele que você escolher como SS, mas você precisa especificá-lo no código).
- RST → por exemplo, pino 9 do Arduino.
- IRQ → Opcional, pode ser deixado desconectado se nenhuma interrupção for usada.
Em placas como Arduino Mega, Leonardo ou Micro, as linhas SPI podem estar em pinos diferentes ou no conector ICSP, por isso é importante verificar a tabela de equivalência na documentação oficial antes de fazer qualquer ligação.
Instalando a biblioteca MFRC522 e leitura básica de tags.
Embora o MFRC522 possa ser programado do zero, sua comunicação interna é bastante complexa, sendo prática comum utilizar a biblioteca desenvolvida por Miguel Balboa , disponível no GitHub e no gerenciador de bibliotecas da IDE do Arduino. Essa biblioteca encapsula todas as operações necessárias para inicializar o leitor, detectar cartões, autenticar setores e ler ou gravar blocos.
Para instalar a partir da IDE do Arduino, basta abrir o Gerenciador de Bibliotecas, procurar por “MFRC522” e selecionar a versão mantida pela comunidade (GitHub Community) . Você também precisa incluir a biblioteca SPI, que já está incluída na IDE.
Após a instalação, o fluxo típico em um esboço simples para ler o UID de um rótulo é:
- Incluir livrarias SPI.hy MFRC522.h.
- Defina os pinos RST e SS que o leitor utilizará.
- Crie um objeto MFRC522 passando esses pinos para ele.
- Na função setup(), inicialize a Serial, a SPI e o leitor com PCD_Init().
- Em loop(), use PICC_IsNewCardPresent() para descobrir se há um cartão por perto e PICC_ReadCardSerial() para ler seus dados básicos.
- Acesse o UID usando mfrc522.uid.uidByte e ao tamanho com mfrc522.uid.size.
- Encerre a comunicação com a gravadora ligando para PICC_HaltA().
Este tipo de esboço é perfeito para obter o UID de vários cartões ou chaveiros eletrônicos e realizar testes rápidos, por exemplo, para um controle de acesso simples, onde apenas o UID lido é comparado com uma lista de UIDs autorizados.
Estrutura de memória em cartões MIFARE Classic 1K
Os cartões que normalmente acompanham o RC522 são tipicamente MIFARE Classic 1K . Esses cartões oferecem 1 KB de memória organizada hierarquicamente em setores e blocos, com um sistema de chaves e permissões bastante peculiar que deve ser compreendido antes de gravar qualquer coisa.
A memória total é dividida em 16 setores numerados de 0 a 15. Cada setor contém 4 blocos, numerados de 0 a 3 dentro desse setor. Cada bloco armazena 16 bytes de dados , ou seja, 16 posições numeradas de 0 a 15, portanto, cada setor oferece 64 bytes.
Dentro desses quatro blocos por setor, apenas três são destinados ao armazenamento de dados do usuário: os blocos 0, 1 e 2 de cada setor (exceto o setor 0, que possui características especiais). O último bloco de cada setor, o bloco 3, é conhecido como bloco de rodapé . Ele armazena as chaves de criptografia e os bits de acesso que controlam quais operações são permitidas naquele setor.
No trailer, os 16 bytes estão divididos da seguinte forma:
- Chave A: 6 bytes.
- Condições de acesso: 3 bytes que definem permissões de leitura/gravação, autenticação e visibilidade da chave.
- Byte não utilizado (U): 1 byte que não é utilizado.
- Chave B: 6 bytes.
Os cartões que vêm de fábrica com os módulos geralmente têm as chaves A e B inicializadas com FF FF FF FF FF FF , o que é extremamente inseguro, já que qualquer pessoa que conheça o padrão pode autenticar e modificar o conteúdo do cartão. Uma prática relativamente comum em projetos DIY é usar as mesmas chaves em todos os setores, embora para uma segurança real seja melhor diversificar.
Além disso, o bloco 0 do setor 0 é especial: ele armazena o UID do cartão (geralmente 4 bytes nesses cartões MIFARE Classic) e os dados do fabricante. Na prática, esse bloco é considerado somente leitura; tentar modificá-lo pode corromper o cartão de forma irreversível.
Altere as teclas A e B em um setor.
Se você deseja usar um cartão MIFARE em um projeto Arduino e RC522 de forma significativa, a primeira coisa a fazer é alterar as chaves padrão . Isso impede que qualquer pessoa com um leitor e a biblioteca padrão adultere seu cartão sem autorização.
A ideia básica para atualizar as chaves de um setor específico (por exemplo, o setor 15) é a seguinte:
- Defina as chaves atuais no código (os valores padrão de fábrica, caso não tenham sido alterados).
- Defina as novas palavras-chave A e B que você deseja usar nesse setor.
- Calcule o número do bloco de reboque para esse setor, que é setor * 4 + 3 (para o setor 15, bloco 63).
- Primeiro, autentique-se com a chave A atual usando PCD_Autenticar() sobre o bloco de reboques.
- Leia o bloco de trailer com MIFARE_Read() para obter seu conteúdo.
- Modifique os bytes correspondentes às novas chaves em um buffer.
- Autentique-se novamente, se necessário (por exemplo, com a chave B).
- Escreva o bloco de trailer atualizado com MIFARE_Write().
Durante esse processo, é crucial não mover o cartão do leitor até que a operação esteja concluída , pois uma gravação interrompida no bloco de rodapé pode tornar o setor inacessível. Depois que as chaves forem alteradas, você também precisará atualizar o código do Arduino para usar essas novas chaves em operações futuras nesse setor.
Blocos de leitura e escrita: simulando um cartão de transporte.
Uma aplicação bastante ilustrativa da leitura e escrita com MIFARE Classic é a simulação do comportamento de um cartão de transporte público recarregável . A ideia é simples: o cartão armazena uma série de viagens em um bloco específico, e o sistema permite carregar viagens (recarregar) ou usá-las (validar ao embarcar no ônibus ou bonde).
Para isso, o setor 15 poderia ser reservado para dados do usuário, por exemplo, e um de seus blocos de dados (por exemplo, o bloco 60) poderia ser usado para armazenar o contador de viagens. O número de viagens disponíveis é armazenado no byte 0 do bloco. Os bytes restantes do bloco poderiam ser usados para outros dados ou simplesmente deixados em zero.
O fluxo de código típico para a parte de recarregamento seria:
- Definir Tecla A e Tecla B regulamentações vigentes que protegem o setor em questão (por exemplo, aquelas que alteramos na etapa anterior).
- Defina o número do setor, o bloco de dados (60) e o bloco de trailer (63).
- Declare um array de 16 bytes (blockData) onde o primeiro byte representará o número de viagens.
- Cada vez que um cartão é aproximado do leitor, Leia o bloco 60 Utilizando MIFARE_Read() para obter as viagens atuais.
- Adicione o número de viagens para recarregar (por exemplo, 10) ao valor lido.
- Atualizar dados. Bloquear com o novo número de viagens.
- Autentique com a chave A no bloco de trailer correspondente.
- Escreva o bloco 60 com MIFARE_Write().
- Leia novamente para verificar se o valor foi atualizado corretamente.
Na parte de consumo de viagens (validação no ônibus), o código é praticamente idêntico, mas em vez de somar, subtrai-se um do contador. Antes de subtrair, verifica-se se o valor lido é zero: se não houver viagens restantes, o acesso é negado e o usuário é solicitado a recarregar a página . Se o contador for maior que zero, ele é decrementado, o bloco é reescrito e o número de viagens restantes é exibido na tela.
Em ambos os casos, é importante lidar corretamente com os códigos de retorno das funções da biblioteca MFRC522 (por exemplo, erros de autenticação ou de gravação) e sempre interromper a comunicação criptografada com PCD_StopCrypto1() e o próprio cartão com PICC_HaltA() no final de cada ciclo.
Controle de acesso simples baseado em UID
Outro projeto clássico que utiliza o RC522 e o Arduino é um sistema básico de controle de acesso, onde a entrada é concedida ou negada com base no UID da placa apresentada. Essa abordagem não utiliza a memória interna da placa, apenas seu identificador único, sendo, portanto, bastante limitada em termos de segurança, mas serve como um exemplo rápido.
A abordagem típica é:
- Leia o UID do cartão usando as funções básicas da biblioteca (PICC_IsNewCardPresent, PICC_ReadCardSerial, etc.).
- Copie os bytes do UID lido para uma matriz temporária (por exemplo, ActualUID).
- Defina no código vários arrays com os UIDs dos cartões autorizados (por exemplo, User1, User2).
- Crie uma função de comparação de arrays de bytes que retorne Verdadeiro se ambos forem idênticos..
- Compare o ActualUID com cada UID autorizado e, se houver alguma correspondência, ative uma saída digital, exiba uma mensagem de "Acesso concedido" ou ative uma fechadura elétrica.
- Se não corresponder a nenhuma delas, exiba "Acesso negado" e mantenha o sistema fechado.
Em um ambiente real, um sistema como esse é vulnerável à clonagem de tags, pois muitos leitores baratos permitem que os UIDs sejam copiados ou emulados. Para aumentar a segurança, seria necessário usar a memória interna do cartão, chaves personalizadas e, possivelmente, mecanismos criptográficos mais robustos do que os do MIFARE Classic, cuja segurança é atualmente amplamente questionada. Mesmo assim, serve como um excelente exemplo pedagógico para aprender o fluxo de trabalho de leitura de cartões e a integração com atuadores físicos.
Com tudo isso, você agora possui um sólido domínio dos conceitos essenciais de RFID, entende como as diferentes faixas de frequência se comportam, conhece o funcionamento interno de um cartão MIFARE Classic 1K, domina a conexão e o uso básicos do módulo RC522 com Arduino e viu em detalhes como ler e gravar blocos para criar sistemas reais, como controle de acesso ou cartões de transporte . A partir daqui, o próximo passo natural é combinar RFID com outros módulos (telas LCD, relés, Wi-Fi, bancos de dados em nuvem) e aprender a controlar lâmpadas inteligentes para construir soluções mais abrangentes, ainda mais próximas dos sistemas profissionais que você vê todos os dias em lojas, transporte público e dispositivos de pagamento sem contato.
