Postagem em destaque

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Este post é o primeiro de uma série de seis que escrevi tratando de controle de potência e PID (controle proporcional, integral e derivativo...

segunda-feira, 24 de setembro de 2012

RFID com Arduino

Dia desses alunos me pediram ajuda com um projeto de TCC: uma ferramentaria com acesso e empréstimo de ferramentas controlada por RFID.

Eles compraram o RFID Starter Kit da SparkFun, e eu me pus a testá-lo. Muito, muito simples.
O kit tem uma saída USB para ligação no PC. Funciona nos moldes da conexão USB do Arduino, ou seja, na verdade a comunicação é feita com o protocolo serial. Para testá-la nesse modo basta vc baixar algum programa gratuito desses de terminal TTY. As versões mais antigas do Windows (antes do Vista) vinham com o HyperTerminal, mas agora ele é vendido separadamente pela Hilgraeve.

Tem alternativa free? Claro, várias. Uma delas, a que usei, é o TeraTerm. É só baixar e instalar. Em seguida, conecte o kit RFID na porta USB do seu micro. Abra o TeraTerm,configurando o acesso serial e a porta correta:


No meu caso, COM4.

Depois do Ok, basta aproximar as tags do kit e o ID é exibido no terminal:


Agora, vamos ao Arduino.
Para usar o kit é necessário soldar pinos ou fios à plaquinha. No mínimo os terminais Vcc, Gnd e TX são utilizados. Olhando-se a plaquinha "por baixo" (do lado oposto ao sensor, o cubo escuro escrito ID-12 Innovations) pode-se ver a legenda da pinagem.

Soldados os pinos, conecte-os aos respectivos pinos no Arduino. Eu usei como pino de dados o pino 9 do Arduino, conforme figura:


Abaixo, vídeo da bagaça funcionando. Mais abaixo ainda, o código fonte. O interessante do fonte é o trabalho com duas portas seriais, uma para comunicação com o kit e outra para comunicação com o PC. Nesse caso, temos que usar a lib SoftSerial.h e criar uma outra porta, mySerialPort no meu caso. Eu usei o mesmo Tera Term para ler a saída do Arduino, mas claro que poderia ter usado o Serial Monitor do Arduino.

Moleza, não?



#include <SoftwareSerial.h>

const int SerInToArdu=9; 
const int SerOutFrmArdu=3;

SoftwareSerial mySerialPort(SerInToArdu,SerOutFrmArdu);

String tagID = "";

void setup()
{
  Serial.begin(9600);
  Serial.println("Aproxime uma tag RFID do leitor...");
  mySerialPort.begin(9600);
}

void loop()
{
  char incomingByte=char(0);

  if (mySerialPort.available() > 0) 
    for (;;)
    {
incomingByte = mySerialPort.read();
        if (((incomingByte > 47) && (incomingByte < 91)) || (incomingByte == 3))
        {
           if (incomingByte==3) // fim da transmissão
           {
             Serial.println(tagID); 
             tagID="";
             break;
           }  
           else                 
             tagID+=char(incomingByte);
        }
     }
}