Ajuda com programação de leitura de cartão do rfid RC522

Olá ,

Preciso de ajuda na programação de um Arduino uno para um leitor de rfid rc522 . Preciso acionar um relê somente quando o cartão estiver no campo de leitura da leitora e ao retirar o cartão da leitora o relê deve ser desligado . 

Com o código abaixo, ele está acionando o relê ao encostar o cartão na leitora, mas ao retirar o cartão o relê continua acionado .

Código :

#include <SPI.h>
#include <MFRC522.h>


#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
int relepin = 5;



char st[20];

void setup() 
{
SPI.begin(); // Inicia SPI bus
mfrc522.PCD_Init(); // Inicia MFRC522
pinMode (relepin , OUTPUT) ;

}

void loop() 
{
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) 
{
return ;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) 
{
return;
}

String conteudo= "";
byte letra;
for (byte i = 0; i < mfrc522.uid.size; i++) 
{

conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}

conteudo.toUpperCase();

if (conteudo.substring(1) == "ED 78 03 CA") //UID 1 - Chaveiro
{
digitalWrite (relepin , HIGH);
}

else 
{
digitalWrite (relepin , LOW);
}


Alguém pode me ajudar ?

Exibições: 4008

Responder esta

Respostas a este tópico

O leitor rfid apenas lê o código do cartão quando ele se APROXIMA e não quando se afasta, certo?!

Então não dá pra saber quando ele se afastou para tomar alguma decisão.

Uma ideia seria aproximar o cartão uma vez -> ligar relé, afasta e aproxima novamente -> desliga relé.


Ou ainda, aproxima -> liga relé, conta um tempo -> desliga relé.

Outra opção seria, aproxima cartão -> guarda o código lido -> tenta ler cartao novamente -> o cartão ainda é o mesmo? -> se sim, mantem rele ligado; senão desliga relé.

A última ideia é basicamente ficar lendo o cartão o tempo todo para saber se tem ou não a presença do mesmo e se é o mesmo cartão.

Abraço!

Boa tarde ,

O que eu estou precisando é a última opção ficar lendo o cartão o tempo todo para saber se tem ou não a presença dele e se é o mesmo, porém para escrever esse código é que estou com dificuldades, pois sou iniciante em arduino e linguagem C++ .

Vou tentar mudar alguma coisa no código, se der certo posto o resultado.

Obrigado

Fernando,

tem que ser rfid mesmo?

Pq senão vc poderia usar um rele tipo reed que ao aproximar um pequeno ima, ele fecha, ao afastar ele abre.

O que acha?

Valeu!

Gelci ,

Eu já tentei com o reed , mas não gostei do resultado . Achei que fica um pouco instável e qualquer que descobrir o acionamento, com um pedaço de imã vai ativar o rele .

Preciso tentar funcionar com o rfid mesmo , mesmo assim obrigado pela dica .

Valeu .

Entendi...

Apesar de aparentemente ser um projeto de segurança, se puder, fale um pouco mais sobre o que vc está desenvolvendo. Talvez nos ajude a encontrar alguma solução viável.

Boa noite ,

Ainda continuo tentando com o rfid , mas sem sucesso . Percebi que essa leitora RC522, ao ler a TAG pela primeira vez dentro do loop carrega o valor lido até o fim do loop do arduino e mesmo que peça para ler novamente o String "ED 78 03 CA" , mesmo não tendo TAG na leitora, informa ao arduino que existe a String ED 78 03 CA e não existe a possibilidade de fazer um if/else . Pensei se existe uma forma de limpar a String depois que é lida pela primeira vez dentro do loop ?

Alguem pode ajudar ?

Valew 

existe duas possibilidades 

usar a funçao While http://arduino.cc/en/Reference/While

ou colocar um delay pra se fazer varias leituras mas com um intervalo de tempo entre elas 

ja usei esse tipo de rfid mas nao me lembro se ele so envia sinal se tirar e colocar denovo o cartao enfrente a leitora ou se colocar ele direto ele fica enviando de tempo em tempo mas se for o segundo caso colocando o delay respeitando esse tempo pode ser q funcione

Boa tarde ,

Já havia tentado com While , mas acontece que quando a leitora lê a String ela leva esse número até o fim do loop , eu preciso fazer com que ao encostar a TAG na leitora , ela informa o numero da TAG , reseta a leitora , informa se tem alguma TAG na leitora novamente e qual o numero , tudo isso sem terminar o loop .

Obrigado

ola boa noite cara estou com este mesmo problema também gostaria que ao enconstar o tag na leitora acionaria o rele e ao voltar a encostar a mesma tag desligaria o rele  porem ta difícil também estou começando no arduino já fiz varias pesquisas na net e não encontrei nada  caso vc tenha conseguido me ajuda também ok meu e-mail é este linosilva1975@hotmail.com  ok desse já agradeço

Ola Marcelo.

Voce conseguiu uma solução para esta questão. 

Estou com a mesma necessidade.

Fico no aguardo 

Abs.

Ola Fernando. 

Estou procurando a mesma solução.

Voce conseguiu alguma coisa para resolver esta questão.

Fico no aguardo

Abs

Veja se pode ser útil para seu proposito;

   if (conteudo.substring(1) == "ED 78 03 CA") //UID 1 - Chaveiro
 
   {
      //Altera estado da rele
      if(!(digitalRead(rele))) //Se rele estiver desacionado
   

      digitalWrite(rele, HIGH); //Liga rele
    
    }

    else
    {
      digitalWrite (rele , LOW); //Desliga o rele
     
    }
    //============================

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

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço