Entrar

Login para a sua conta

Senha
O objetivo deste artigo é demonstrar a implementação de um leitor de cartões utilizando a tecnologia RFID passiva (Radio Frequency IDentification – Identificação por Rádio Freqüência).

Princípios Básicos de RFID


Antes de iniciarmos a análise do projeto propriamente dito, é importante termos uma idéia básica sobre o princípio de funcionamento de um sistema de RFID: o mesmo é composto basicamente de um leitor e de um transponder (ou tag, etiqueta).

O leitor consiste em um transceptor de radiofreqüência que opera em uma das freqüências padronizadas para este tipo de aplicação (125 kHz, 13,56 Hz, 862 a 932 MHz ou 2,4 GHz).

Do outro lado temos um transponder, que irá responder aos comandos recebidos do leitor. Existem três tecnologias para implementação dos transponders: passivos (não possuem qualquer fonte de alimentação integrada), semipassivos (possuem uma fonte de energia integrada apenas para alimentar a etapa de recepção) e ativos (possuem uma fonte de energia integrada e um circuito de transmissão ativo, o que garante um alcance muito maior).

A figura 1 mostra o diagrama em blocos de um leitor RFID típico e uma tag (etiqueta) passiva.


Figura 1


No momento em que a tag é aproximada do leitor, a radiação eletromagnética emitida pela antena do leitor permeia a tag, induzindo uma tensão AC no circuito LC da mesma. Essa tensão é retificada e armazenada em um capacitor.

Quando o circuito de controle da tag detecta que a tensão (VCC_TAG na figura 1) ultrapassou um determinado valor, as demais etapas da tag entram em operação e ela decodifica o sinal proveniente do leitor, devolvendo em seguida um outro sinal codificado.

Esta transmissão da tag para o leitor é feita normalmente curto-circuitando-se a bobina, o que provoca uma alteração no campo eletromagnético que pode ser percebida pelo leitor.

O leitor recebe este sinal e o envia a um circuito de processamento que irá verificar os dados recebidos. Todo este processo é realizado em uma fração de segundo.

Módulo Leitor

O módulo leitor utilizado neste projeto foi o AK-05, um dispositivo pequeno que opera na freqüência de 125 kHz e com alcance de aproximadamente 5 cm. Este módulo integra todo o bloco leitor demarcado na figura 2 e pode comunicar-se com cartões do formato EM4001 ou compatíveis que utilizem codificação Manchester de 64 bits. No entanto, este dispositivo não permite a escrita de informações no cartão, apenas a leitura do mesmo.

O módulo possui uma interface de saída que utiliza o protocolo Wiegand de 26 bits. Este protocolo será visto com mais detalhes a frente.


A figura 2 ilustra a pinagem do mesmo.


Figura 2

Além das linhas de alimentação (VCC e GND), os sinais mais importantes são os dois pinos de comunicação D0 e D1, que apresentam o sinal no protocolo Wiegand. Estão disponíveis outros sinais para simplificar a construção de elementos de feedback como LEDs e buzzer (sinais G-LED, R-LED e BEEP), além de um sinal de controle (ACCEPT).

A tensão de alimentação deve estar entre 4,6 e 5,4 V e o consumo é de aproximadamente 35 mA quando operando em 5 V.


O Protocolo Wiegand

Como já dissemos, o sinal de saída do AK-05 é apresentado nas saídas D0 e D1 utilizando-se o protocolo Wiegand de 26 bits. A saída D0 é usada para indicar um bit em nível “0” enquanto que a saída D1 indica um bit em nível “1”. A figura 3 apresenta uma seqüência de bits codificados neste sistema.


Figura 3

Os bits recebidos encontram-se organizados conforme a figura 4.


Figura 4

A transmissão inicia-se pelo bit 25 (P1) que é o primeiro bit de paridade, seguido por dois blocos de 13 bits e um segundo bit de paridade (P2).

O primeiro bit de paridade (P1) representa a paridade do primeiro bloco de 13 bits (D23 a D12). Este primeiro bloco possui paridade par, ou seja, a soma de todos os bits em nível lógico “1” mais o bit de paridade P1 deve resultar em um número par.

O mesmo vale para o segundo bloco e o bit de paridade P2, mas neste caso, o resultado deve ser ímpar.


Descrição do Circuito

Uma vez que já conhecemos o módulo AK-05 e o formato de saída do sinal, fica fácil implementar o hardware e o software necessários para a comunicação com o mesmo.

A implementação do sistema foi realizada na Microlab X1, foi criada uma placa de expansão contendo o módulo AK-05, a qual foi inserida na área EXPANSÃO-2. Foi utilizado um módulo de CPU contendo um microcontrolador MSP430F149 fabricado pela Texas Instruments. Trata-se de um MCU de 16 bits, dotado de 60 kB de FLASH e 2 kB de RAM, muito mais do que o necessário a esta aplicação. De fato, a função responsável pela recepção e tratamento do sinal Wiegand ocupa apenas 206 bytes.

A figura 5 exibe o esquemático básico do sistema implementado na Microlab X1. Foram suprimidos os circuitos não utilizados e também a etapa da fonte de alimentação (+5V para o módulo LCD e o AK-05 e +3,3V para a CPU).


Figura 5


Note que os resistores R2 a R7 foram empreados para permitir a interface dos componentes operando em 5 V (LCD e AK-05) e o MCU operando em 3,3 V. Os resistores R2 a R5 poderiam ser suprimidos já que na presente configuração do LCD, o seu pino WR está permanentemente aterrado, fazendo com que o mesmo esteja sempre no modo de escrita (as linhas de dados do mesmo nunca irão operar como saídas).

O cristal Q1 deve ser de 4 MHz e o cristal Q2 (32768 Hz) não foi usado nesta aplicação (apesar de estar montado no módulo de CPU utilizado). Os capacitores C1 e C2 não foram montados no nosso protótipo e o seu valor irá depender das especificações do cristal Q1. Normalmente utilizam-se valores em torno de 10 pF.

O conector JP4 é utilizado para conexão com uma interface de depuração JTAG, como a ferramenta FET da Texas Instruments ou o MicroFET da ScTec.

O módulo LCD utilizado é o INTECH ITM1602B, que usa um controlador compatível com o HD44780. Os pinos 1 e 2 do mesmo não foram conectados no esquema da figura 5 e são empregados para a alimentação da iluminação de fundo (backlight) do display.

Na figura 6, podemos verificar o tamanho de um cartão RFID utilizado nos nossos testes, ele possui as dimensões aproximadas de um cartão de visitas (visto acima dele).


Figura 6


Na figura 7, temos uma foto do sistema completo montado na placa Microlab X1.


Figura 7

O funcionamento do programa é simples: o núcleo principal é baseado no sistema de interrupções da porta 1. O programa configura os pinos P1.0 e P1.1 como entradas de interrupção e a cada transição de subida, a função trata_porta1() é chamada.

A cada interrupção da porta 1, a variável dado_temp (que armazena temporariamente o dado recebido) é deslocada um bit à esquerda. Se a interrupção foi causada pelo pino P1.0 (linha D1 do AK-05) é somado “1” ao valor da variável, caso contrário o seu valor não é alterado (o que na prática se traduz como um deslocamento aritmético à esquerda).

O bit 0 e o bit 25 são ignorados e armazenados diretamente nas variáveis de paridade. Ao término da recepção, os contadores de paridade são somados às respectivas variáveis de paridade para determinar se os valores lidos estão corretos.


Utilizam-se duas variáveis globais para o controle da leitura do cartão: a variável novo_dado é usada para indicar que um novo cartão foi lido e encontra-se armazenado na variável dado. A função principal do programa verifica continuamente a variável novo_dado e ao detectar que a mesma é verdadeira (não zero), inicia o processamento do valor lido (armazenado na variável global dado), de acordo com o modo de operação atual (identificação, gravação ou apagamento).

A tecla K2 é utilizada para selecionar o modo de identificação, K5 seleciona o modo de gravação e K8 seleciona o modo de apagamento.

No modo de identificação, o sistema compara o código lido do cartão com os códigos armazenados na memória e libera a saída (pino P3.0) por 1 segundo, caso o cartão esteja cadastrado.

A figura 8 mostra a mensagem apresentada no display para um cartão identificado. O número 12915769 corresponde ao código gravado no cartão.


Figura 8


Na figura 9, podemos ver a mensagem apresentada quando um cartão não cadastrado é lido. As letras NI indicam Não Identificado.


Figura 9

No modo de gravação, o cartão é lido e armazenado na memória FLASH do MCU. O número no canto inferior direito do display (figura 10) indica a quantidade de cartões armazenados na memória. Cada cartão ocupa 4 bytes de memória (1 long word) e o programa está preparado para armazenar até 8 cartões, mas este número pode ser facilmente aumentado respeitando-se a capacidade da memória de informação (e a quantidade de RAM livre).


Figura 10


No modo de gravação, o cartão é lido e comparado com a lista de cartões armazenada na memória. Caso o cartão seja encontrado, o mesmo é retirado da lista. A figura 11 indica que o cartão 12915769 foi apagado da memória e o número 0 indica que não há cartões cadastrados.


Figura 11

Considerações Finais


O leitor AK-05 e as tags utilizadas neste artigo foram cedidos pela Akiyama.

A listagem do programa pode ser encontrada no site da revista Saber Eletrônica.

Para que o programa possa ser compilado na versão kickstart do EW430 (a versão de demonstração), é necessário fazer alguns ajustes na configuração do projeto: modifique o formatador do printf para small (aba Library Options, categoria General Options) e a otimização do compilador para Size: High (aba Optimizations, categoria C/C++ Compiler). Com estas opções ativas, a versão 3.41a do compilador gerou um código de apenas 3196 bytes para este programa.

Se reescrevermos as funções de conversão binário para decimal (que atualmente utilizam a função sprintf), poderemos obter reduções de código ainda maiores. No entanto, este não é o objetivo deste artigo.

Como sugestões para o incremento do sistema podemos destacar a implementação de comunicação serial, o que pode ser facilmente realizado por meio das duas USARTs disponíveis no MSP430F149. Outra funcionalidade adicional poderia ser a utilização da FLASH principal para gravação dos cartões (e não da memória de informação). Com isso, o sistema poderia ser expandido para armazenar centenas ou mesmo milhares de cartões.

*Artigo publicado originalmente na revista Saber Eletrônica - Ano 42 - N°403 - Agosto/2006