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; }
No funciona el programa RFID_RDM6300_Tag_Tester.exe en windows 10.