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:
Leitor RFID - ID-12LA ou ID-20LA
Cápsula de Vidro RFID (125kHz)
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
Comentar
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?
boa noite este code serve para o modulo rfid rc522
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)