Esse tutorial demonstra o uso da tecnologia RFID (Identificação por Rádio Frequência) com o arduino. Eu obtive um modulo de escrita e leitura que se pode encontra facilmente no mercado livre e em sites de venda do exterior como o ebay. o modulo utilizado é o mostrado abaixo:
este modulo funciona respeitando um determinado protocolo descriminado pelo fabricante e que vcs podem baixa no link no fim da pagina. O modulo se conecta pela USART (Universal Synchronous Asynchronous Receiver Transmitter, significando Transmissor/Receptor Universal Síncrono e Assíncrono) do arduino com um BAUD-RATES de 19200. veja abaixo como funciona o protocolo para envio de instruções:
Header - O Cabeçalho sempre é o composto por 2 bytes e sempre tem o mesmo valor 0xAA 0xBB;
Length - O tamanho da informação que consiste no somatório de Length = Command + Data(se necessário) + Checksum;
Command - Corresponde ao comando a ser executado;
Data - Dependendo do comando esse campo é suprimido;
CSUM - O checkSum consiste numa operação Xor (ou exclusivo) entre o Length, Command e Data;
Agora vejamos o protocolo de recebimento.
Vejam a lista de comandos do protocolo:
Vejam o programa utilizado no arduino para ler o serial number do cartao.
#include <NewSoftSerial.h>
int val = 0;
int ledPin = 13;
int i;
int status = 0;
unsigned char searchCMD[] = {0xAA, 0xBB, 0x02, 0x20, 0x22};
unsigned char searchRES[16];
NewSoftSerial mySerial(2, 3); //pin2 Rx, pin3 Tx
void setup()
{
Serial.begin(19200);
pinMode(13, OUTPUT);
mySerial.begin(19200);
mySerial.print("\ncomecou...\n");
}
int searchCard(){
Serial.write(searchCMD, 30);
delay(100);
status = 0;
while(true) {
if (Serial.available() > 0) {
val = Serial.read();
switch (status) {
case 0: // parse 0xAA
if (val == 0xAA) status = 1;
break;
case 1: // parse 0xBB
if (val == 0xBB) status = 2;
else return -1;
break;
case 2:
if (val == 0x06) status = 3;
else return -1;
break;
case 3:
if (val == 0x20) status = 4;
else return -1;
break;
case 4:
case 5:
case 6:
case 7:
searchRES[status - 4] = val;
status ++;
break;
case 8:
return 0; // read successfully
break;
default:
return -1;
break;
}
}
}
}
void loop()
{
if (searchCard() != -1) {
for(i=0; i<5; i++){
mySerial.print(searchRES[i],HEX);
}
mySerial.print("\n");
}
}
Vejam o video do teste: