Acionando uma trava elétrica com RFID 65

RFID (Radio Frequency Identification) é uma tecnologia que permite a leitura e gravação de dados entre uma etiqueta (tag) RFID e leitor RFID usando sinais de radiofrequência. Podemos ver o uso de RFID em diversas áreas como por exemplo, identificação de produtos em armazéns, rastreamento de cargas, identificação de animais e até mesmo para armazenamento de dados pessoais.

Nesse post iremos explorar mais uma aplicação de RFID  montando um sistema de abertura de caixa usando uma mini trava elétrica solenoide.

Trava elétrica com RFID

O mais legal é que você poderá aplicar esse projeto na gaveta da estante, porta do armário ou em qualquer compartimento onde você queira fazer o controle de acesso usando uma trava elétrica e um cartão RFID.

Material Utilizado

Para o circuito da trava elétrica com RFID vamos utilizar o seguinte material:

Trava Elétrica Solenoide

Como o Arduino trabalha em seus pinos apenas com 5V e uma corrente relativamente baixa (20mA) para acionamento de dispositivos, um relé pode ser usado para acionar dispositivos que requerem mais de 5V e correntes maiores como é o caso da trava elétrica solenoide. A trava elétrica solenóide precisa de 12V e 600mA para funcionar corretamente.

Veja também como controlar lâmpadas utilizando um relé e Arduino.

A trava elétrica solenoide funciona aplicando uma tensão de 12V em seus terminais. Então o pino da trava é recolhido, mantendo-se na posição enquanto a tensão estiver sendo aplicada. Quando não há tensão, o pino volta ao seu estado normal. A trava foi testada também com uma fonte de 9V e notou-se apenas que a força de recolhimento foi reduzida, mas não impediu o funcionamento.

Mini trava elétrica solenóide

Conexão do leitor RFID no Arduino

O módulo RFID utiliza o protocolo de comunicação SPI e pode ser facilmente conectado ao Arduino da forma indicada na tabela abaixo:

Conexão módulo RFID

Montagem do Circuito trava elétrica com RFID

O relé possui dois contatos, um normalmente aberto (Normal Open – NO) e outro normalmente fechado (Normal Closed – NC). Na montagem do circuito utilizamos o contato NO, assim, quando colocamos a porta digital do Arduino conectada ao pino S(Signal) do relé em HIGH(nível alto), o contato NO se fecha ativando a trava solenoide. Também foi colocado na proto-board um LED vermelho e outro verde para indicar o estado da trava.

Pinagem Relé

Realize as conexões conforme o circuito a seguir:

Circuito trava elétrica com RFID

Programando Arduino com leitor RFID e trava elétrica

Para que o Arduino comunique com o módulo RFID é necessário instalar a biblioteca MFRC522 pelo Gerenciador de Bibliotecas. Para isso clique em Sketch -> Incluir Biblioteca -> Gerenciador de Bibliotecas…

IDE - Biblioteca

No campo de pesquisa procure por mfrc, selecione a biblioteca MFRC522 by GithubCommunity e clique em Instalar.

IDE - RFID

O código funciona da seguinte maneira: quando o Arduino reconhece a tag do leitor RFID correto, ele aciona o relé por 3 segundos. O relé por sua vez, fecha o contato entre a fonte de 12V e a trava elétrica recolhendo o pino da trava. Após 3 segundos o relé abre contato e a trava volta ao seu estado normal. A mesma saída do Arduino que aciona o relé, é usada para acionar um LED verde e outro vermelho.

//Programa: Sistema de trava eletrica com RFID
#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.

void setup() 
{
  Serial.begin(9600);   // Inicia a serial
  SPI.begin();      // Inicia  SPI bus
  mfrc522.PCD_Init();   // Inicia MFRC522
  Serial.println("Aproxime o seu cartao do leitor...");
  Serial.println();
  pinMode(2, OUTPUT);
}

void loop() 
{
  // Procura por cartao RFID
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // Seleciona o cartao RFID
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  //Mostra UID na serial
  Serial.print("UID da tag :");
  String conteudo= "";
  byte letra;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Mensagem : ");
  conteudo.toUpperCase();

  if (conteudo.substring(1) == "F3 DE 90 55") //UID 1 - Cartao
  {
    Serial.println("Ola FILIPEFLOP !");
    Serial.println();
    digitalWrite(2, HIGH); // ativa rele, abre a trava solenoide
    delay(3000);           // espera 3 segundos
    digitalWrite(2, LOW);  // desativa rele, fecha a trava solenoide
  }  
}

Esse projeto pode ser facilmente modificado de acordo com suas necessidades. Você pode trocar o leitor RFID por um teclado matricial de 16 teclas e programar uma senha para abrir a trava. E indo além, você pode implementar um display LCD que mostra a identificação da pessoa dona do cartão. Veja como utilizar um display LCD no post Controle de Acesso Utilizando RFID com Arduino.

Sistema de trava elétrica com RFID

Gostou da Trava elétrica com RFID? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

65 Comentários

  1. Bem bacana mesmo , mas como farei para usar mais de um cartão, como faria para programar os Tags dos cartões.

    parabéns

    1. Olá Nelson,
      Obrigado pela leitura.

      Basicamente você tem que ler os cartões e ir anotando as Tags de cada um.
      Então você vai adicionando mais “if” com cada nova Tag que você deseja usar.
      if (conteudo.substring(1) == “nova_tag1”)
      {
      faz_alguma_coisa();
      }
      if (conteudo.substring(1) == “nova_tag2”)
      {
      faz_outra_coisa();
      }

      Outra forma é criar um “banco de tags” em um char mais ou menos assim:
      char* allowedTags[] = {
      “[INSERT IDENTIFIER HERE]”, // Tag 1
      “2900940E95”, // Tag 2
      “ABC123DE45”, // Tag 3
      };
      Veja nesse link mais onformações sobre esse banco de tags:
      https://www.instructables.com/id/Reading-RFID-Tags-with-an-Arduino/

      Veja nossos outros posts sobre RFID
      http://blog.filipeflop.com/wireless/como-gravar-dados-no-cartao-rfid.html
      http://blog.filipeflop.com/wireless/controle-acesso-leitor-rfid-arduino.html
      http://blog.filipeflop.com/embarcados/controle-de-acesso-rfid-com-raspberry-pi.html

  2. GIOVANNI
    OBRIGADO PELA RESPOSTA SOBRE OS TAGS

  3. Muito legal, você sabe se é possível colocar uma trava elétrica AC, ou usar uma fonte AC no relé, acarretaria em algum problema?

    1. Olá Lucas,

      Sim, você pode usar tranquilamente uma trava elétrica AC.
      Basta apenas checar as tensões e correntes máximas suportadas pelo relé.

      Giovanni Bauermeister
  4. BOM DIA! VOCES TRABALHAM COM ENCODER ROTATIVO, NECESSITO DE 4 PARA COLOCAR NO MEU PAINEL DE SIMULADOR DE VOO, PARA AJUSTAR FREQUENCIAS DOS RADIOS, SEI QUE É DIFICIL, MAS SE TIVEREM DE DOIS EIXOS , SERIA ÓTIMO, ASSIM AJUSTO AS FREQUENCIAS KILOHERTZ E MEGAHERTZ NUM MESMO POTENCIOMETRO.
    ABRAÇOS

  5. Isso poderia controlar um portão de entrada de uma casa?

  6. O meu não quer fazer a leitura, ja verifiquei tudo. a unica diferença é que estu usando 2560, pode alterar alguma coisa? Obrigado

  7. Muito bom o projeto.

  8. Quastaria de saber se ha como alterar o progama para ativar o rele quando passar o cartao e so desativar quanso passar dinovo

  9. Olá boa noite. É possível conectar mais travas, e libera-las com a leituras de seus respectivos tags?

  10. Bom dia,

    voce sabe como fazer a ligação do rfid com o modulo nodemcu?

  11. BOM DIA, GOSTARIA DE SABER QUAL A FUNÇÃO DO PEQUENO CIRCUITO COM RESISTORES E LEDs E SEU FUNCIONAMENTO.

  12. Dá pra usar Arduino nano?

  13. Olá Boa Tarde, estou com um projeto para usar um Rfid e um Teclado de membrana para abrir uma trava, e um LCD.
    Você pode me ajudar criando um projeto e postar no Blog

    Att Felipe

  14. Olá. Gostaria de saber se essa trava solenoide consegue operar com o uso de pilha 12V. Eu pretendo fazer uma trava para porta, e em vez de fazer uma alimentação com fonte (e ter fio atravessando a porta até chegar na rede elétrica). Pretendo usar duas pilhas em paralelo, em todo caso. Aguardo resposta! Grande abraço!

  15. Como faço para usar a tag apenas uma vez e para usala novamente terei que cadastrala ?

  16. Olá. Parabéns pelas publicações. Sou nova no assunto arduino… Se puder tirar um dúvida…Tem como manter o acesso tanto pelo botão original do interfone quanto pelo RFID? Ou tem que ser por um ou por outro?
    Se tiver, como faço a conexão?
    Agradeço desde já.

  17. Posso alterar usar esse código com RFID Uart de 6300 de 125KHZ? Alterando a linha onde aparece o outro modelo de RFID?
    Muito obrigada.

    1. Olá Marlene. Creio que você terá que realizar modificações. Mas a lógica deve ser a mesma.
      O leitor usado neste tutorial é de 13,56MHz.

  18. tentei tirar a função de delay para poder ligar e desligar com a mesma tag só com outra tag seria posivel com a mesma tag ligar e deligar o rele?

  19. Muito bom.
    Agora, como faz para eu acionar uma fechadura elétrica via Bluetooth utilizando um iPhone?

  20. tenho uma duvida. estou usar uma resistencia de 10k e o seugundo led e rele nao estao funcionar aque se deve?

  21. Oi amigo parabéns adorei…. Fiquei pensando se eu poderia usar esse sistema com quatro travas em pontos diferentes… Seria possivel?

  22. ola Giovanni tudo bem!
    comprei um quite de Arduino unoR3 co uma placa de RFID .
    estou tentando compilar mais da erro de compilação

    Ocorreu um erro enquanto o sketch era carregado
    using port :com9
    using programmar :arduino
    Overriding Baud rete :115200
    avrdude: der open(): can’t open devesse “\\.\com9\”: o sistema não podeencotrar o arquivo especificado.

    avrdude done. thank you.

    José Vilamar Nogueira
    1. Olá José!

      Só para entendermos melhor. Erro de compilação é diferente de erro de gravação.
      Seu erro parece ser de gravação pois diz: “ocorreu um erro enquanto o sketch era carregado”

      Deixe de lado por enquanto o exemplo da trava elétrica RFID. Desconecte qualquer dispositivo, jumpers, módulos, sensores do Arduino.

      Então abra o exemplo blink LED e tente primeiramente compilar. Se ocorrer tudo certo tente carregar.

      Certifique-se de escolher a porta COM correta nas configurações.

      Caso não funcione, testar com outro cabo USB, e outros computadores.

      Em último caso pode entrar em contato com vendas@filipeflop.com e relatar o ocorrido.

  23. Gostaria de saber se consigo ligar essa trava direto na alimentação do arduino, alimentando o arduino com 12V e alimentando a trava direto do pino VIN.
    Grato.

    1. Até consegue Thiago. Mas aí não faz muito sentido porque a trava ficará sempre recolhida. Não é possível controlar, ligar/desligar o pino Vin. A ideia é utilizar um pino digital que você possa ligar e desligar a trava.

      Outra opção além do relé para controle da trava é utilizar um transistor como chave.
      Estude o seguinte tutorial de como usar um transistor como chave: https://teachmetomake.wordpress.com/how-to-use-a-transistor-as-a-switch/

      Abraço!

  24. Bom dia ,

    Nesse projeto eu poderia utilizar o arduíno mega? Se sim como ficaria o esquema de ligação?

    1. Olá Heloísa!

      Ficaria como indicado nesse tutorial que encontrei no Google:
      http://www.instructables.com/id/Interfacing-RFID-RC522-With-Arduino-MEGA-a-Simple-/

      O relé e os LEDs podem ser ligados em qualquer outra porta digital.

  25. Gostei achei muito interessante e gostaria de saber, se trocando a trava solenoide por um fechadura elétrica de 12V ( daquelas usadas em portões) esse circuito funcionaria da mesma forma?

    Paulo Jansen Duarte de Medeiros
    1. Creio que funcionaria sim Paulo!

  26. Giovanni boa noite,
    no caso de ligar dois leitores RFID como ficaria o código?
    Agradeço desde já

    THIAGO DE BRITO LEITE
    1. Olá Thiago!

      Infelizmente nunca escrevi código para 2 leitores RFID.

      Teria que estudar a biblioteca do leitor ou até mesmo contactar o criador da mesma e verificar se ela suporta múltiplos leitores RFID.

      O código fonte da biblioteca se encontra aqui: https://github.com/miguelbalboa/rfid
      Pelo github você também pode contactar o criador da mesma.

      Encontrei algumas discussões com a mesma dúvida que você tem. Talvez alguém tenha encontrado a resposta.
      https://forum.arduino.cc/index.php?topic=485731.0
      https://forum.arduino.cc/index.php?topic=405261.0
      https://forum.arduino.cc/index.php?topic=477085.0
      https://forum.arduino.cc/index.php?topic=347571.0

  27. Olá, baixei o fritzing recentemente e estava brincando com os componentes, e ao tentar replicar esse layout não pude encontrar o módulo relé que foi utilizado nem nas bibliotecas nem nas partes submetidas por usuários, gostaria de saber se você poderia me indicar onde encontrá-lo e, se foi criado por você, se poderia me enviar o arquivo .fzpz

    O site está muito bom! Abs.

    1. Olá Douglas!

      Creio que o desenho de relé já é nativo do fritzing.

      Mas caso não encontre pode baixar qualquer projeto do link abaixo
      http://fritzing.org/projects/by-tag/relay/

      Vários deles usam relé. Aí é só modificar.

  28. c aro Amigo
    Gostaria de saber se vc tem um esquema que possa ser usado em portão eletrônico, com controle remotos de condomínio, acionado por EFID, mas quero colocar duas trava elétrica, quando o portão fechar, ele trava, ou seja em repouso na trava esta fechada. quando for acionado o portão, este deve abrir a trava ligar o motor e o portão abrira. ficara aperto por 30 segundos, e retorna ao ponto inicial ou seja fecha e a trava e acionada. o portao e de correr, o motor e da marca rossi,e a trava e louk, se nao tem, vc tem condiçoes de fazer? e quanto me custaria isso?

    1. Olá Edison!

      Infelizmente a filipeflop não possui esquemas elétricos customizados para clientes e nem programação Arduino customizada. Também não fazemos projetos customizados para clientes.

      Tudo o que temos está disponível gratuitamente no Blog. Assim você pode se basear e fazer seu próprio projeto DIY customizado de acordo com suas necessidades específicas.

      Abraço!

  29. seria possível substituir a fonte? por outra peça, como talvez até uma bateria 9v?

    henrique mota costa
    1. Olá Henrique!

      Veja no post o seguinte trecho:

      “A trava foi testada também com uma fonte de 9V e notou-se apenas que a força de recolhimento foi reduzida, mas não impediu o funcionamento.”

      É apenas necessário verificar se essa redução de força não impacta na sua aplicação.

      Abraço!

  30. eu repliquei exatamente como mostrado(com exceção a os leds que não foram colocados), porem por alguma razão a trava solenoide não esta sendo ativada, existe alguma razão do porque isso pode acontecer?

    1. Olá Larissa!

      Minha sugestão é fazer alguns testes isolados e individuais.

      1 – Verificar o monitor serial para obter o UUID da sua Tag e fazer a mudança no código na linha 46 onde se faz um if tag igual UUID

      2 – Testar o módulo relé ligando ele em 5V e colocando o pino de sinal em nível alto e baixo e verificar se o relé ativa. Verificar se o relé fecha contato medindo continuidade com um multímetro.

      3 – Testar a válvula solenóide individualmente ligando ela em 12V e verificar se ativa.

  31. Olá, parabéns pelo projeto.

    Como ficaria o programa com o teclado matricial ? Teria que incluir biblioteca ?

    Obrigado desde já.

    1. Olá Renan!

      O programa ficaria muito legal com teclado matricial!

      Não precisa incluir biblioteca.

      Veja nesse post como o teclado matricial funciona: https://www.filipeflop.com/blog/teclado-matricial-4×4-arduino/

      Quando fizer seu projeto não se esqueça de postar em nosso fórum!

      Bons projetos!

  32. Olá.. liguei tudo conforme foi pedido. Meu leitor Rfid não le. Mas ele funciona se ligado sozinho, sem mais nada no protoboard. O que pode estar acontecendo?

    1. Olá Sarah!

      Começe apenas conectando o leitor RFID. COmo vc disse ele funciona certo?

      Então vá adicionando jumper por jumper, componente por componente e sempre testando o leitor RFID. Quando o leitor RFID parar de funcionar aí vc vai saber qual componente ou jumper está causando o mal funcionamento.

      1. Muito obrigada. Mas acredito que eu tenha resolvido o problema.. O relé que eu tinha era só a bobina, agora estou tentando com o módulo, retorno para dizer se deu certo.

      2. Quando ligo o arduino a trava ja fica acionada.. é normal?

        1. O relé tem contato normal aberto e normal fechado. Verifique em qual contato está ligando a trava.

          1. A trava está no normalmente aberto . Está assim: negativo da trava no normalmente aberto, negativo da fonte no comum , positivo da trava no positivo da fonte. A trava já fica acionada, assim que ligo o arduino, antes mesmo de rodar o código. Na primeira vez que eu passo uma tag liberada o bug se desfaz. E depois funciona normal. Se eu não desligar o arduino novamente.

          2. Então tente colocar na função setup() uma linha para desativar o relé logo que o programa iniciar.

            
            pinMode(2, OUTPUT);
            digitalWrite(2, LOW); // ou HIGH, faça o teste
            
            
  33. Olá, gostaria de montar um projeto usando esse como base, algo simples mas gostaria de que o mesmo cartão tivesse comportamento diferente algo como:
    Ao passar o cartão brevemente ele liga um habilita a energia no circuito usando um relé.
    Ao segurar o cartão sobre o leitor ele aciona um segundo relé por 2 segundos ou mais.
    Ao passar o novamente cartão brevemente ele desliga o circuito.

    Pode me ajudar com isso? tenho procurado resposta para esse problema sem sucesso até o momento.

    Grato!

    1. Olá Jośe! Que bom que gostou do post.

      Talvez você consiga contar o tempo da passagem do cartão usando millis()
      Veja algumas discussões que encontrei no Google:
      http://labdegaragem.com/forum/topics/contador-de-tempo-no-arduino
      https://www.robocore.net/modules.php?name=Forums&file=viewtopic&t=5351
      http://forum.arduino.cc/index.php?topic=181245.0

      Outra dica é usar nosso fórum. Talvez vocẽ encontre alguém por lá que tenha feito algo parecido com sua ideia. https://www.filipeflop.com/forum/

      Sucesso e boa sorte nos projetos!

  34. Olá, boa tarde!!

    Comprei os componentes e montei esse código. Tudo funcionou como normal até eu adicionar a trava 12V. O programa lê a primeira tag mas depois disso não lê mais nada. Isso só ocorre quando adiciono a trava 12V no relé. Estou alimentando o circuito com uma fonte 5V e uma 12V separada só para a trava. Não acho que deva ser uma falha no código, e sim uma interferência no sinal do RFID (seria possível?)

    Se tiver alguma sugestão estarei grato!

    1. Olá Lucas!

      Montando exatamente conforme mostrado no tutorial deve funcionar sem problemas.
      Favor verificar novamente as suas conexões.

      Já experimentou montar um circuito sem leitor RFID? Acionando o relé e a trava direto via software?

      Faça o teste e descreva como montou o circuito exatamente sem o leitor RFID.
      Poste aqui também seu código para acionar o relé sem leitor RFID.

      Aguardo!

      1. Montei exatamente conforme mostrado no tutorial. Sem o RFID funciona perfeitamente, pois o problema acontece depois da primeira leitura do RFID. O problema acontece quando os 12V entram na jogada. O RFID lê a primeira vez mas depois para de ler totalmente. Eu consigo ativar a trava através de um botão adicionado em uma porta lógica, então tanto a trava quanto o relé estão funcionando perfeitamente. É o leitor RFID que por algum motivo para de ler quando a trava entra no circuito.

        A trava que estou usando é essa: (https://http2.mlstatic.com/fecho-fechadura-eletromagnetico-eletrico-reversivel-agl-12v-D_NQ_NP_603209-MLB27356697566_052018-O.webp).

        1. Olá Lucas!

          Difícil dizer o que pode estar acontecendo.

          Já tentou também sem a trava conectada mas com os 12V ligados no relé?

          Essa sua trava é diferente da que utilizamos no tutorial, a sua é mais “parruda”. Talvez esteja excedendo o consumo de corrente?

          Quão perto está o relé e trava do leitor RFID? Talvez esteja dando alguma interferência magnética?

          1. Acho difícil estar excedendo o consumo de corrente já que tem uma fonte de 2A só para a trava.

            Montei o circuito agora com a trava bem isolada e o problema persiste.
            Montei com outro leitor RFID de um amigo e o problema persiste.

            To ficando sem idéias do que que pode estar acontecendo :/

          2. Testei agora com um LED no lugar da trava e funcionou!!
            Realmente parece que a trava requer um consumo de corrente maior.

            Vou tentar achar uma fonte mais poderosa e relatar aqui se funcionou!

          3. É, mesmo com uma fonte (12V 1.5A) exclusiva para a trava não está funcionando.

          4. Estou com o mesmo problema!
            Após o sensor rfid ler a primeira tag, ele para.
            Já fiz os teste com todos os outros componentes e tudo está funcionando, inclusive o sensor.
            Quando tirei a fonte da tomada, tudo funciona perfeitamente, inclusive o relé, mas quando ligo a fechadura, o sensor lê uma tag e para.
            Alguém sabe o que fazer?
            Preciso muito de ajuda!!!!

  35. Boa tarde a todos.

    Tentei reproduzir o projeto, porém no arduino nano funcionou, mas no arduino leonardo não.
    Sabe me informar o porque?

    1. Olá amigo!

      Dê uma olhadina na pinagem do Leonardo na figura abaixo:
      https://i0.wp.com/www.dobitaobyte.com.br/wp-content/uploads/2016/12/leonardo.png

      Os pinos SPI estão em uma posição diferente do Arduino Uno então o esquemático deste tutorial não serve para o Leonardo.

      Bons projetos!