No Projeto Esp32 Fechadura com RFID de hoje iremos controlar uma tranca elétrica utilizando um módulo leitor de RFID (identificação por rádio frequência) e um NodeMCU ESP32, que irá possibilitar que você possa incluir várias funcionalidades extras ao projeto relacionadas à automação residencial.
Ele pode ser facilmente integrado em sistemas de segurança residenciais, onde por meio de um cartão com código único libera a passagem de um usuário, lembrando que a tecnologia RFID é amplamente utilizada para essa finalidade devido ao modo seguro de uso e a alta confiabilidade.
Esse tópico mostra-se ideal para makers que buscam inovar seus processos, podendo utilizar em projetos IoT (internet das coisas) de forma a controlar e visualizar o funcionamento do sistema pela internet, por exemplo, ampliando as possibilidades de uso, e tudo isso, deve-se à tecnologia do ESP32.
Vídeo do Projeto Esp32 Fechadura com RFID
Lista de Materiais Necessários:
• 1 x Fechadura Elétrica Solenóide 12V NF para Projetos;
• 1 x NodeMCU ESP32 Iot com WiFi e Bluetooth – 38 Pinos;
• 1 x Módulo Relé 5V 10A 1 Canal com Optoacoplador;
• 1 x Kit RC522 Leitor RFID;
• 1 x Protoboard e alguns jumpers;
• 2 x LEDs.
Esquema do Projeto ESP32
O esquema do nosso projeto de Controle da Fechadura Elétrica com RFID exige várias conexões entre os módulos e placas utilizadas, então se atente a todas as ligações do nosso circuito, entre elas, preste atenção na alimentação do modulo rfid que é com uma tensão de 3.3V.
Veja a seguir o diagrama:
Explicando o código
Iremos usar 2 bibliotecas que não são originárias da IDE do Arduino, que podem ser baixadas abaixo:
https://github.com/gustavors1608/Biblioteca-para-lcd-I2C
https://github.com/gustavors1608/biblioteca-para-modulos-rfid-mfrc522
Nosso código irá basicamente ficar sempre aguardando a leitura de uma tag RFID, caso ache, ira verificar se o id da tag é o mesmo do que nós havíamos registrado no código antes, caso for, irá abrir a tranca por 5 segundos, caso contrário, ira avisar para o usuário que ela não tem acesso e irá aguardar por 5 segundos enquanto o buzzer gera um alerta sonoro.
Obs: Após carregar o código, note que você deve fazer uma alteração no código, veja no trecho do artigo “Como Usar”.
Segue os trechos do código abaixo todo comentado, explicando cada parte do mesmo:
Faça Download do Código de Programação Completo AQUI!
Cabeçalho
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//inclusão de algumas bibliotecas #include <SPI.h> #include <MFRC522.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> // Definiremos o id que será liberado o acesso #define ID "09 F7 30 31" //define alguns pinos do esp32 que serao conectados aos modulos e componentes #define LedVerde 26 #define LedVermelho 12 #define tranca 2 #define buzzer 15 #define SS_PIN 14 #define RST_PIN 27 MFRC522 mfrc522(SS_PIN, RST_PIN); // define os pinos de controle do modulo de leitura de cartoes RFID LiquidCrystal_I2C lcd(0x27, 16, 2); // define informacoes do lcd como o endereço I2C (0x27) e tamanho do mesmo |
Void setup()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
void setup() { SPI.begin(); // inicia a comunicacao SPI que sera usada para comunicacao com o mudulo RFID lcd.begin(); // inicia o lcd mfrc522.PCD_Init(); //inicia o modulo RFID Serial.begin(115200); // inicia a comunicacao serial com o computador na velocidade de 115200 baud rate Serial.println("RFID + ESP32"); Serial.println("Aguardando tag RFID para verificar o id da mesma."); // define alguns pinos como saida pinMode(LedVerde, OUTPUT); pinMode(LedVermelho, OUTPUT); pinMode(tranca, OUTPUT); pinMode(buzzer, OUTPUT); } |
Void loop()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
void loop() { lcd.home(); // bota o cursor do lcd na posicao inicial lcd.print("Aguardando"); // imprime na primeira linha a string "Aguardando" lcd.setCursor(0,1); // seta o cursor para a segunda linha lcd.print("Leitura RFID"); // mostra na tela a string "Leitura RFID" if ( ! mfrc522.PICC_IsNewCardPresent()) { return; // se nao tiver um cartao para ser lido recomeça o void loop } if ( ! mfrc522.PICC_ReadCardSerial()) { return; //se nao conseguir ler o cartao recomeça o void loop tambem } String conteudo = ""; // cria uma string Serial.print("id da tag :"); //imprime na serial o id do cartao for (byte i = 0; i < mfrc522.uid.size; i++){ // faz uma verificacao dos bits da memoria do cartao //ambos comandos abaixo vão concatenar as informacoes do cartao... //porem os 2 primeiros irao mostrar na serial e os 2 ultimos guardarao os valores na string de conteudo para fazer as verificacoes 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(); conteudo.toUpperCase(); // deixa as letras da string todas maiusculas if (conteudo.substring(1) == ID){ // verifica se o ID do cartao lido tem o mesmo ID do cartao que queremos liberar o acesso digitalWrite(LedVerde, HIGH); // ligamos o led verde lcd.clear(); // limpamos oque havia sido escrito no lcd lcd.print("Acesso Liberado"); // informamos pelo lcd que a tranca foi aberta digitalWrite(tranca, HIGH); //abrimos a tranca por 5 segundos for(byte s = 5; s > 0; s--){ //vai informando ao usuario quantos segundos faltao para a tranca ser fechada lcd.setCursor(8,1); lcd.print(s); delay(1000); } digitalWrite(tranca, LOW); // fecha a tranca digitalWrite(LedVerde, LOW); // e desliga o led lcd.clear(); // limpa os caracteres q estao escritos no lcd }else{ // caso o cartao lido nao foi registrado digitalWrite(LedVermelho, HIGH); // vamos ligar o led vermelho for(byte s = 5; s > 0; s--){ // uma contagem / espera para poder fazer uma nova leitura lcd.clear(); // limpa as informacoes que estao na tela lcd.home(); // nota na posicao inicial lcd.print("Acesso negado"); // infoma ao usuario que ele nao tem acesso lcd.setCursor(8,1); // coloca o cursor na coluna 8 da linha 2 lcd.print(s); // informa quantos segundos faltam para pode fazer uma nova leitura // faz o buzzer emitir um bip por segundo delay(800); digitalWrite(buzzer, HIGH); delay(200); digitalWrite(buzzer, LOW); } digitalWrite(LedVermelho, LOW); // desliga o led vermelho lcd.clear(); // limpa as informacoes do lcd } |
Como usar
Para podermos verificar se a nossa tag RFID é a que está registrada no código, primeiro iremos carregar o programa acima para o Esp32 , feito isto, iremos abrir o monitor serial na velocidade de 115200 baud rate, e passaremos por cima do modulo leitor RFID a tag. Abaixo podemos verificar no monitor serial a informações de duas tags e os IDs das mesmas:
Feito isto, iremos copiar o id da tag que desejamos permitir abrir a tranca e colar entre as aspas a seguir (este trecho está logo no começo do nosso código):
1 2 |
// Definiremos o id que sera liberado o acesso #define ID "09 F7 30 31" |
Após nos trocarmos este trecho do código podemos carregar o código novamente para o ESP32.
E pronto quando nos passarmos a nossa tag cadastrada, a tranca ira abrir, o led verde acender e o display lcd irá indicar o tempo que a tranca ainda ficará aberta.
Conclusão
Neste projeto com Esp32 aprendemos como utilizar o leitor de tags RFID e implementamos também uma tranca e um display para informar ao usuário o status sobre a abertura da tranca. Tudo foi desenvolvido para que o projeto seja útil e seguro na prática, tornando possível implementa-lo em sua casa ou cômodo que desejar de forma simples, adicionando mais praticidade ao dia a dia.
Em breve iremos ter mais tutoriais desenvolvidos com o Esp32 NodeMCU. Enfim, agradecemos sua leitura e fique atento as novidades no blog.
Conheça toda Linha ESP32 no Site da UsinaInfo.
Olá. Como vocês usaram esse rele se o sinal lógico que o esp32 envia é de 3.3v?
Bom Dia Andrey! O Optoacoplador e vários outros circuitos lógicos digitais como sensores, atuadores digitais e Arduinos podem operar com uma tensão mais baixa que 5V através do pino de sinal uma vez que identificam como high, true ou ligado geralmente tensões a partir dos 3 volts. Porém vale lembrar que a alimentação do módulo, esta deve ser de 5V assim como as especificações.
Entendi. Bem interessante. Parabéns pelo excelente trabalho!
Qual a função do optoacoplador do relé? fiz o circuito com um módulo relé comum, aquele preto de 1 canal, e o RFID identificou a tag uma vez, depois parou. Isso acontece quando eu conecto o relé aos 12v.
Será que é por causa que o meu relé está sem optoacoplador?
Boa tarde Daniel.
A função principal dele é funcionar com a lógica 3,3V do ESP32, isolando o sinal do ESP32 e a alimentação do Relé. Assim evita queimar e funciona de maneira adequada sem gambiarras.
Ao usar um relé sem optoacoplador diretamente ao ESP32, você pode queimar ele ou fazer o circuito parar de funcionar, já que a bobina dele é como um curto-circuito na visão das portas do ESP32, que não foram feitas para trabalhar com cargas, seria necessário no mínimo um transistor ou mosfet.
Olá gostaria de saber se o relé se conecta com alguma bateria ou pilha para fazer a tranca funcionar? e se sim como é feita exatamente essa conexão.
Bom Dia Felix! O controle de produtos via relé pode ser utilizado de acordo com o seguinte link: https://www.usinainfo.com.br/blog/wp-content/uploads/2019/07/esquema-de-liga%C3%A7%C3%A3o-bomba-de-agua.jpg – Na imagem você pode observar o controle de uma mini bomba d’água, porém o sistema de instalação pode ser desenvolvido desta mesma maneira.
boa noite, gostaria de saber porque quando a chave abre, aparecem na LCD caracteres estranhos e aleatórios, ai reseto o Arduino e volta ao normal
Olá, Boa noite, esse problema geralmente esta relacionado a conexão do modulo I2C da tela com o Arduino ou seu esp32, podendo ser interferência causada pela fechadura (pois ela gera um campo magnético o qual pode gerar interferência na comunicação dos mesmos) nesse caso, um simples afastamento da fechadura do restante do projeto já vai resolver.
Caso o problema persista, você pode tentar trocar de Jumper e/ou protoboard ou soldar os fios em casos de montagem fixa, pois também tem a possibilidade de ser mal contato entre a tela e o arduino.
Qualquer duvida estou a disposição!
Posso usar um arduino uno, no lugar do módulo que
Wi-fi?
Boa Tarde Walmir! Este mesmo projeto desenvolvido através do Arduino pode ser encontrado através do seguinte link: https://www.usinainfo.com.br/blog/projeto-arduino-controle-de-acesso-rfid/
Consigo fazer este mesmo projeto com Módulo Esp8266?
Bom Dia Ale! Até o momento, infelizmente nunca trabalhei com o ESP8266, porém acredito que seja possível sim, claro que com algumas alterações tanto no esquema elétrico quando no código base.
Boa Tarde tudo bom ?
e possível colocar algum nome ao aproximar com o chaveiro ?
Bom Dia Cleberson! É possível incluir na programação um comando que imprima um nome diferente para cada código de chaveiro, basta realizar as devidas alterações no mesmo para isto.
Olá, boa tarde! Seguindo na questão anterior, ao incluir e identificar a pessoa que acessa usando um tag (por exemplo), pode ser registrado em uma “planilha” o nome da pessoa? Para ter o controle de quem acessou uma sala por exemplo. Caso positivo, essa planilha pode ser extraída por cabo ou enviada por e-mail?
Olá Fabricio! É possível desenvolver um código capaz de cadastrar as informações em um cartão de memória, neste caso seria necessário incluir o respectivo módulo e realizar as devidas adaptações ao código, mas é uma opção.
Hola, alguna idea de porque al presionar el botón boot al cargar el código, no lo detecta ? se queda esperando y el buzzer suena intermitentemente.
Olá Hector! Verificou se selecionou o microcontrolador e porta COM corretos? é possível que o aplicativo não esteja conseguindo se conectar com o seu ESP.