Olá Garagistas! No tutorial de hoje mostraremos como você pode ler uma TAG de RFID (125KHz), utilizando os módulos ID-12 e/ou ID-20. E como demonstração faremos a leitura de dois tipos de TAGs, com o Cartão Branco faremos o controle de uma lâmpada, ligando e desligando a mesma. E com a Cápsula faremos o controle da posição do cursor do servo motor.

 

Materiais Utilizados:

Arduino UNO

Breakout Leitor de RFID

Leitor RFID - ID-12LA ou ID-20LA

Cartão RFID Branco (125KHz)

Cápsula de Vidro RFID (125kHz)

Módulo Relé

Lâmpada 110V

Servomotor Pequeno

Protoboard

Alguns Jumpers

1. Leitor RFID ID-12 / ID-20

Imagem 1 - Leitores RFID ID-12 e ID-20

A identificação por rádio freqüência (RFID) surgiu em 1960 com a finalidade de resolver os problemas de monitoramento e acesso em sistemas que não permitiam o contato direto e em ambientes hostis onde o código de barra não podia ser aplicado.

Os leitores RFID ID-12 e ID-20 são utilizados para fazer a leitura das TAGs RFID que operam na frequência de 125KHz. Com esses módulos, você pode fazer diversos tipos de aplicações, como por exemplo controle de acesso, acionamento de dispositivo, identificação de carga entre outras.

2. Breakout Leitor RFID ID-12 / ID-20

Imagem 2 - Breakout para leitor RFID

Como o pad dos leitores RFID ID-12 / ID-20 tem um espaçamento de 2mm, utilizamos o Breakout para conseguirmos conectar o leitor a protoboard.

3. Leitura de uma TAG RFID (125KHz) com o módulo ID-12/ID-20

Com esse passo, você consegue efetuar a leitura de qualquer tipo de TAG RFID que opere em 125KHz. Existem vários tipo de TAG RFID, veja abaixo alguma exemplos:

3.1) Cartão

Este tipo de TAG é a mais utilizada por moradores das grandes cidades do Brasil. Um exemplo de utilização desse tipo de TAG, esta no bilhete único para transporte público.

Imagem 3 - Cartão com TAG RFID

3.2) Chaveiro

O Chaveiro, é um outro tipo de TAG. Geralmente possui diversas cores, e com o ID já impresso na mesma, eles podem ser facilmente carregados.

Imagem 4 - Chaveiros com TAG RFID

3.3) Cápsula

A Cápsula é um outro tipo de TAG, seu tamanho é muito reduzido em comparação a outros tipo de TAG. Ela é tão pequena que você poderia criar um sistema de posicionamento de peças de Xadrez, colocando dentro de cada peça uma cápsula dessa.

Imagem 5 - Cápsula com TAG RFID

3.4) Montagem do Circuito

Figura 1 - Circuito para a leitura das TAGs

3.5) Sketch para a leitura da TAG (125KHz)

char ID ; //Variável para armazenar o caractere que foi recebido da ID que

 

void setup()
{

  Serial.begin(9600); //Inicia a serial com um baud rate de 9600

}

 

void loop ()
{

  if(Serial.available() > 0) //Se a serial receber algum caractere
  {
    ID = Serial.read(); //Armazena na variável ID o caractere recebido
    Serial.print(ID); //Imprime na serial o caaractere recebido
  }

 

}

4. Acionamentos com TAGs RFID (125KHz)

Nesse passo, não só é feita a leitura da TAG RFID, como também dois tipos de acionamento. No primeiro fazemos o acionamento de um Servomotor, representando uma cancela, quando a TAG do Cartão for reconhecida. No segundo acionamento, é ligada e desligada a lâmpada quando a ID da TAG Cápsula é reconhecida pelo sistema.

4.1) Montagem do Circuito

Figura 2 - Circuito para acionamento do Servomotor e da Lâmpada

4.2) Sketch para os acionamentos

#include <Servo.h> //Inclui a biblioteca Servo.h

 

#define resetRFID 13 //Define resetRFID como 13
#define cancela 8 //Define cancela como 8
#define lampada 7 //Define lampada como 7

 

String tag_lida = "0000000000000"; //Cria a variável tag_lida e "limpa" as posições da ID
String tag_CARTAO = "66006C3D4770"; //Cria a variável tag_CARTAO com a ID do Cartão Branco
String tag_CAPSULA = "0041DEF32E42"; //Cria a variável tag_CAPSULA com a ID da Cápsula

 

int i; //Variável para contagem
int posicao=90; //Inicia o valor inicial da posição do servo motor (90 graus, cancela fechada)

 

Servo servo; //Instância a biblioteca Servo.h

 

void setup()
{

 

  Serial.begin(9600); //Inicia a serial com um baud rate de 9600

 

  pinMode(resetRFID, OUTPUT); //Configura o pino D13 como saída
  pinMode(lampada,OUTPUT); //Configura o pino D7 como saída
  servo.attach(cancela); //Configura o pino D8 para ser utilizado com o servo motor
  servo.write(posicao); //Posiciona o cursor do servo motor para a primeira posição (90 graus);

 

  digitalWrite(resetRFID, LOW); //Coloca o pino de reset do módulo ID12/20 em nível baixo(resetRFID, LOW);
  delay(5); //Aguarda 5 milissegundos
  digitalWrite(resetRFID, HIGH); //Coloca o pino de reset do módulo ID12/20 em nível alto(resetRFID, HIGH);
  delay(5); //Aguarda 5 milissegundos

 

}

 

 

void loop ()
{

 

  if(Serial.available() > 0) //Se a serial receber dados (ID)
  { 

le_tag(); //Executa a função de leitura da TAG
    identifica_tag(); //Identifica ao o que essa ID pertence (Cartão ou Cápsula)
    limpa_tag(); //Executa a função para limpar a ID e resetar o módulo ID12/20
  }

 

delay(100); //Aguarda 100 milissegundos

 

}

 

 

void le_tag() //Função que lê a TAG e armazena a ID da TAG na variável tag_lida
{

 

i=0; //Zera a variável para leitura
  while(Serial.available() > 0) //Enquanto a Serial receber dados (ID)
  {
    tag_lida[i] = Serial.read(); //Armazena o caractere que entrou na serial na posição da tag_lida
    i++; //Incrementa a variável de contagem

}

 

  Serial.print("\n\nTAG Lida:"); //Pula 2 linhas e imprime na serial a frase "TAG Lida:"

for(i=0;i<13;i++) Serial.print(tag_lida[i]); //Pega cada posição da ID e imprime a mesma na serial
  Serial.println(); //Pula linha na serial

 

}

 

 

void limpa_tag() //Função que limpa a variável tag_lida e reseta o módulo ID12/20 para nova leitura
{

 

  digitalWrite(resetRFID, LOW); //Coloca o pino de reset do módulo ID12/20 em nível baixo
  delay(5); //Aguarda 5 milissegundos
  digitalWrite(resetRFID, HIGH); //Coloca o pino de reset do módulo ID12/20 em nível alto
  delay(5); //Aguarda 5 milissegundos

 

  for(i=0;i<13;i++) tag_lida[i] = '0'; //Laço para limpar todas as posições da variável tag_lida

 

}

 

 

void identifica_tag() //Função que identifica a TAG
{

 

boolean validar = true; //Cria uma variável booleana para validar a TAG

 

  //Laço para comparar o ID da tag_lida com o ID da tag_CARTAO
  for(i=0 ; i<13 ; i++)
  {    

  if(tag_lida[i+1] != tag_CARTAO[i]) //Se ID da tag_lida for diferente da ID da tag_cartao
    {
      validar = false; //Desvalida a tag_CARTAO
    }   

}
  //===========================================================

 

  if(validar == true)//Se a tag_CARTAO nao for desvalidada
  {

    //Altera estado da Cancela
    if(posicao != 90) //Se a variável posicao for diferente de 90
    {
      posicao = 90;  //Armazena o valor 90 na variável posicao
      servo.write(posicao); //Posiciona o curso do servomotor em 90 graus
      Serial.println("CARTAO >> Abre Cancela"); //Imprime na serial a frase "CARTAO >> Abre Cancela"
    }

 

    else if(posicao != 175) //Se a variável posicao for diferente de 175
    {
      posicao = 175;  //Armazena o valor 175 na variável posicao
      servo.write(posicao); //Posiciona o curso do servomotor em 175 graus
      Serial.println("CARTAO >> Fecha Cancela"); //Imprime na serial a frase "CARTAO >> Fecha Cancela"
    }
    //========================

    delay(2000); //Aguarda 2 segundos para efetuar uma nova leitura;

}

 

validar = true; //Valida a variável validar para nova comparação de IDs

 

  //Laço para comparar o ID da tag_lida com o ID da tag_CAPSULA
  for(i=0 ; i<13 ; i++)
  {

  if(tag_lida[i+1] != tag_CAPSULA[i]) //Se ID da tag_lida for diferente da ID da tag_CAPSULA
    {
      validar=false; //Desvalida a tag_CAPSULA
    }

}
  //===========================================================

 

if(validar == true) //Se a tag_CAPSULA nao for desvalidada
  {
    //Altera estado da Lâmpada
    if(!(digitalRead(lampada))) //Se a lâmpada estiver desacionada
    {
      digitalWrite(lampada, HIGH); //Liga a lâmpada
      Serial.println("CAPSULA >> Liga LAMPADA"); //Imprime na serial a frase "CAPSULA >> Liga LAMPADA"
    }

else
    {
      digitalWrite(lampada, LOW); //Desliga a lâmpada
      Serial.println("CAPSULA >> Desliga LAMPADA"); //Imprime na serial a frase "CAPSULA >> Desliga LAMPADA"
    }
    //============================

delay(2000); //Aguarda 2 segundos para efetuar uma nova leitura;
  }

 

}

Referências:

http://bildr.org/2011/02/rfid-arduino/

http://www.newtoncbraga.com.br/

http://www.interactiondesign.se/wiki/arduino:rfid_reader_id-12

 

 

Exibições: 14259

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de ivan em 18 outubro 2018 às 21:06
Parabéns pelo projeto, lembrando que junto com o hexa da tag rfid na comunicação serial vem o start bit que é 2 e o checksum
mais o stop bit no final , o checksum é usado para saber se os dados lidos estão corretos basta executar uma operação xOR entre os hex
da tag se o resultado final coincidir com o valor do checksum, esta correto, a documentação do rdm6300 informa isso http://cdn.boxtec.ch/pub/iteadstudio/DS_IM120618002_RDM6300.pdf.
Comentário de Jeremias Gomes em 18 janeiro 2016 às 17:59

Olá tenho um módulo rfid rc522 esta funcionando normalmente com aquela tag azul que vem nele, aí comprei umas tag´s coloridas iguais estas que estão ai na figura, mais o modulo não lê estas tag´s. Já tentei varios codigos mais até agora nada. Alguém pode me ajudar?

Comentário de marcelo lino silva em 17 julho 2015 às 22:58

boa noite este code serve para o modulo rfid rc522

Comentário de Rúbi Porsch em 9 junho 2015 às 12:43

tem como ler vários cartões simultâneos? com a mesma antena, tipo se eu por dois ou tres um em cima do outro

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço