Módulo RFID 125KHz com saída UART – RDM6300

Com este módulo você poderá ler tags RFID de 125khz no arduino, ou em qualquer computador, desde que use também um adaptador serial TTL-USB.

Não deixe a quantidade de pinos intimidar você. A conexão mínima só requer três fios:

  • +5V
  • GND
  • TX (para o Arduino, PC, etc)

Nota: O módulo tem um pino RX, mas seu propósito não é esclarecido.

Diagrama de conexão, com o módulo visto por baixo:

O módulo tem um microcontrolador próprio, que se encarrega de todo o trabalho de decodificação RFID, já entregando na saída o número da tag (chaveiro, cartão, etc).

A saída é serial UART TTL padrão (9600bps, 8,N,1). Para usar com qualquer Arduino, nenhum hardware extra é necessário, porque basta ligar o TX do módulo ao RX do Arduino. Caso você use um Arduino que só tem uma porta serial como o Duemilanove e o Uno, pode usar a biblioteca NewsoftSerial para criar uma porta “virtual” em qualquer outro pino e assim liberar a porta serial padrão para outras tarefas.

Para usar com um computador, é preciso usar um conversor USB-serial TTL ou RS232 – TTL.

Alcance da antena: no máximo 3cm.

Proteção contra inversão de polaridade por diodo em série.

O número da tag é transmitido em um formato codificado que é explicado no datasheet em anexo, que é o único oferecido pelo fabricante. Eu o acho um bocado confuso, por isso escrevi um programa em Delphi, também em anexo, que ajudará você a entender como o número transmitido se relaciona com o real, escrito na tag. Porém em boa parte das aplicações o número escrito na tag é irrelevante, pois o que importa é que o usuário apresente uma tag que está registrada no sistema. O número impresso só se torna importante quando você quer testar a tag ou correlacionar o uso das tags com um usuário específico.

Exemplo da tela do programa:

Para testar com um arduino você pode usar o ótimo exemplo de Mario Boehmer, que reproduzo abaixo ligeiramente traduzido (ligue o TX ao pino D6 do arduino):

Atenção: Requer a biblioteca NewsoftSerial e para funcionar no Arduino 1.x requer modificações (testei no 0.22).


//http://marioboehmer.blogspot.com.br/2011/01/rfid-with-arduino.html

#include "NewSoftSerial.h"
#define stx 2
#define etx 3

NewSoftSerial mySerial(6, 7);
int counter;
byte data[14];
byte hexBlock1,hexBlock2,hexBlock3,hexBlock4,hexBlock5;
byte hexCalculatedChecksum,hexChecksum;

void setup() {
Serial.begin(9600);
mySerial.begin(9600);
}

void loop() {
if (mySerial.available() > 0) {
data[counter] = mySerial.read();
counter++;
if(counter > 13) {
//we read the whole message, so reset counter
counter = 0;
//check if start of text and end of text is correct
if(data[0] == stx && data[13] == etx) {
Serial.println("Caracteres STX e ETX corretamente recebidos");
Serial.print("ID: ");
//show ID
for(int x = 1; x < 11; x++) {
Serial.print(data[x], BYTE);
}
Serial.println("");
Serial.print("Checksum: ");
//show checksum
Serial.print(data[11], BYTE);
Serial.println(data[12], BYTE);

//Hex ID blocks. Two transmitted Bytes form one Hex ID block.
//Hex ID blocks:      6   2  |  E   3  |  0   8  |  6   C  |  E   D
//Transmitted Bytes: 36H 32H | 45H 33H | 30H 38H | 36H 43H | 45H 44H
hexBlock1 = AsciiCharToNum(data[1])*16 + AsciiCharToNum(data[2]);
hexBlock2 = AsciiCharToNum(data[3])*16 + AsciiCharToNum(data[4]);
hexBlock3 = AsciiCharToNum(data[5])*16 + AsciiCharToNum(data[6]);
hexBlock4 = AsciiCharToNum(data[7])*16 + AsciiCharToNum(data[8]);
hexBlock5 = AsciiCharToNum(data[9])*16 + AsciiCharToNum(data[10]);

//Transmitted checksum.
hexChecksum = AsciiCharToNum(data[11])*16 + AsciiCharToNum(data[12]);

//XOR algorithm to calculate checksum of ID blocks.
hexCalculatedChecksum = hexBlock1 ^ hexBlock2 ^ hexBlock3 ^ hexBlock4 ^ hexBlock5;
if ( hexCalculatedChecksum == hexChecksum )
{
Serial.println("Checksum calculado confere com checksum transmitido.");
}
else {
Serial.println("Checksum calculado NAO confere com checksum transmitido. Dados corrompidos!");
}
}
}
}
}

uint8_t AsciiCharToNum(byte data) {
//First substract 48 to convert the char representation
//of a number to an actual number.
data -= '0';
//If it is greater than 9, we have a Hex character A-F.
//Substract 7 to get the numeral representation.
if (data > 9)
data -= 7;
return data;
}

RFID RDM6300 Tag Tester
RFID RDM6300 Tag Tester
RFID_RDM6300_Tag_Tester.exe
Version: 0.1 beta
1.1 MiB
907 Downloads
Detalhes...
RFID-RDM630-Spec
RFID-RDM630-Spec
RFID-RDM630-Spec.pdf
199.0 KiB
1348 Downloads
Detalhes...
This entry was posted in Produtos and tagged . Bookmark the permalink.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *