terça-feira, 22 de julho de 2025

2EL - B - Projeto 12 - Cancela Controlada por RFID

P12 - Cancela Controlada por RFID e ARDUINO: HILLARI GABRIELI RAMOS DA SILVA, ISABELLY CONCEIÇÃO MARTINS, JOÃO PEDRO GOMES SILVA e RYAN PITANGA DE SOUZA
Cancela Controlada por RFID
O projeto utiliza Arduino Uno R3, Micro Servo Motor SG90 ou Servo Motor Digital Mg996R, LED, Display Oled 0,96 128x64 e Modulo de comunicação RFID para controlar a abertura e fechamento de uma cancela.
Para este projeto utiliza bibliotecas: Adafruit GFX, Adafruit SSD1306, MFRC522, Servo e SPI

A função de uma cancela está relacionada a um obstáculo móvel, seja ela de pedestres, atletas, hipismo, pedágios, veículos ou animais. Normalmente são feitas de madeira, canos metálicos ou plásticos, mas, podem ser feitas com materiais alternativos como por exemplo o bambu. O acionamento, seja manual ou mecânico, ergue a cancela até a posição vertical para permitir a passagem e baixada paralelamente ao nível do chão, a uma distância média de 80cm de altura para impedir a passagem.
O controle da cancela é feioto pelo Arduíno Uno. O datasheet da placa Arduino UNO R3 está disponível em: Manual Arduino® UNO R3.
 Já a cancela é acionada pelo Micro Servo Motor SG90
O Micro Servo Motor SG90 9g é um item essencial para este e outros projetos de robótica, mecatrônica e diversos outros projetos. Na robótica, o servo motor é responsável por movimentar braços, pernas e mãos dos robôs. No automodelismo o servo motor é utilizado para virar as rodas dianteiras dos carrinhos e no aeromodelismo é utilizado para controlar os flaps das asas dos aviões.
O manual do Micro Servo Motor 9g SG90 está disponível em: Micro Servo Motor 9g SG90 .

Tag e leitor RFID (Radio Frequency Identification, ou Identificação por Radiofrequência) costumam ser utilizados para controle de acesso e identificação de pessoas e equipamentos, seja por meio de crachás ou etiquetas aplicadas à produtos. 
Circuito Módulo RFID com Arduino: As etiquetas (ou tags) RFID, podem conter vários dados sobre o proprietário do cartão, como nome e endereço e, no caso de produtos, informações sobre procedência e data de validade, apenas para citar alguns exemplos.
Como são compostas apenas por um pequeno circuito, as tags RFID podem ser embutidas facilmente em vários objetos, nos mais variados tamanhos e formatos. 
Modulo RFID Mfrc522: Cada etiqueta/tag do leitor RFID tem a sua própria identificação (UID), e é com essa identificação que vamos montar um controle de acesso que irá ler o UID do cartão e exibir as informações de acesso num display LCD 16×2. Com pequenas alterações no programa é possível acionar as outras portas do Arduino e ligar motores, sensores, luzes e outros dispositivos.
O manual do Módulo e tags RFID está disponível em: Modulo RFID Mfrc52.

O código fonte de referência: Cancela Controlada por RFID 
// Projeto: Cancela Controlada por RFID 
// Autor: André Silveira
// Data: 03/09/2019

#include "Wire.h" 							// Biblioteca para Comunicação I2C
#include "Adafruit_GFX.h"                   			// Biblioteca para processamento gráfica
#include "Adafruit_SSD1306.h"              			// Biblioteca do controlador SSD1306 (128x64 e 128x32)
#include "SPI.h" 							// Biblioteca comunicação SPI
#include "MFRC522.h" 						// Biblioteca RFID RC522
#include "Servo.h" 							// Biblioteca Servo Motor
 
Adafruit_SSD1306 display = Adafruit_SSD1306(); 
 
#define SDA_PIN 10 							// Pino SDA
#define RST_PIN 9 							// Pino RESET
 
MFRC522 rfid(SDA_PIN, RST_PIN); 				// Define pinos para Módulo RFID
 
Servo servo1;								// Cria objeto Servo
int pos; 									// Variável posição Servo
 
const int PinoLedVerde = 2; 					// Pino digital do LED Verde
const int PinoLedVermelho = 3; 					// Pino digital do LED Vermelho
const int PinoServo = 6; 						// Pino digital do Servo Motor
 
byte CancelaFechada = 74; 					// Ângulo para cancela fechada
byte CancelaAberta = 174; 					// Ângulo para cancela aberta
 
void setup(){ 

      Serial.begin(9600);
      Serial.println("Aproxime o seu cartao do leitor...");
      Serial.println();

      Wire.begin(); 							// INICIALIZA A BIBLIOTECA WIRE
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);    // Inicializa a tela com endereço I2C 0x3C
      display.setTextColor(WHITE);                  		// Define cor do texto
      display.setRotation(0);                       			// Configura orientação 0      
      display.setTextSize(1); 					// Tamanho do texto
      display.clearDisplay();                  			// Limpa a tela 
      display.setCursor(14,10); 					// Posição cursor
      display.print("Supermercado"); 				// Escreve
      display.display(); 						// Efetiva escrita
     
      SPI.begin(); 							// Inicializa barramento de comunicação SPI
      rfid.PCD_Init(); 							// Inicializa RFID MFRC522
     
      servo1.attach(PinoServo); 					// Associa pino digital ao Servo
      servo1.write(74); 						// Inicializa Servo na posição Cancela Fechada
      
      pinMode(PinoLedVerde, OUTPUT); 			// Pino LED Verde como saída 
      pinMode(PinoLedVermelho, OUTPUT); 			// Pino LED Vermelho como saída
      
      digitalWrite(PinoLedVerde, LOW); 				// LED deslidado
      digitalWrite(PinoLedVermelho, LOW); 			// LED deslidado
}
 
void loop() {
  	leituraRfid(); 							// Chama função para validar TAG RFID
}
 
/* --- Função para validar TAG RFID --- */

void leituraRfid(){
  
/* --- Verifica se cartão é diferente do último lido --- */ 
  
      if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) {
      	  return;
      }
      
      Serial.println("");
      Serial.println("Aguarde um momento");        
      
      display.clearDisplay(); 						// Limpa display
      display.setCursor(40,0); 					// Posiciona cursor
      display.print("Aguarde"); 					// Escreve texto
      display.setCursor(50,10); 					// Posiciona cursor
      display.print("por"); 						// Escreve texto
      display.setCursor(30,20); 					// Posiciona cursor
      display.print("favor..."); 					// Escreve texto
      display.display(); 						// Efetiva escrita
      delay(40); 							
     
/* --- Monta TAG RFID lida --- */ 
      
      String strID = ""; 
      for (byte i = 0; i < 4; i++) {
           strID += (rfid.uid.uidByte[i] < 0x10 ? "0" : "") + String(rfid.uid.uidByte[i], HEX) + (i!=3 ? ":" : "");
      }
      strID.toUpperCase();
  
/* --- Valida endereço da TAG lida comparando com o valor "D0:64:BB:4F" --- */ 
/* --- O endereço "D0:64:BB:4F" deve ser substituído pelo endereço da sua TAG RFID --- */ 

      Serial.println("");
      Serial.print("Identificador (UID) da tag: "); 		
      Serial.println(strID); 						// Imprime na serial o ID da TAG RFID
  
      if (strID.indexOf("CB:F0:03:C5") >= 0 || strID.indexOf("A6:50:22:7E") >= 0) { 
           Serial.println("");
           Serial.println("Acesso autorizado, cancela abrindo");           
           
           digitalWrite(PinoLedVerde, HIGH); 			// Liga LED Verde
           display.clearDisplay(); 					// Limpa display
           display.setCursor(45,5); 					// Posiciona cursor
           display.print("Acesso"); 					// Escreve texto
           display.setCursor(35,15); 				// Posiciona cursor
           display.print("Autorizado"); 				// Escreve texto
           display.display(); 						// Efetiva escrita
           delay(4000); 							// Aguarda 4 segundos
           
           abrirCancela(); 						// Abre cancela
           delay(10000); 						// Aguarda 10 segundos
           fecharCancela(); 						// Fecha cancela
           digitalWrite(PinoLedVerde, LOW); 			// Desliga LED Verde
      }else{ 
           Serial.println("Acesso negado"); 
           
           digitalWrite(PinoLedVermelho, HIGH); 		// Liga LED Vermelho
           display.clearDisplay(); 					// Limpa display
           display.setCursor(45,5);					// Posiciona cursor
           display.print("Acesso");					// Escreve texto
           display.setCursor(45,15);				// Posiciona cursor
           display.print("Negado");					// Escreve texto
           display.display();						// Efetiva escrita
           delay(10000);						// Aguarda 10 segundos
           digitalWrite(PinoLedVermelho, LOW);		// Desliga LED Verde
           display.clearDisplay();					// Limpa display
           display.setCursor(14,10);				// Posiciona cursor
           display.print("MasterWalker Shop");			// Escreve texto
           display.display();						// Efetiva escrita
          }
     
      rfid.PICC_HaltA(); 						// Para leitura do cartão
      rfid.PCD_StopCrypto1(); 					// Para criptografia 

}
 
/* --- Função para abrir Cancela --- */

void abrirCancela(){

      for (pos = CancelaFechada; pos < CancelaAberta; pos++){ 
            servo1.write(pos); 					// Posição que o servo deve girar
            delay(15); 							// Intervalo de 15 Milisegundos
      }
}
 

/* --- Função para fechar Cancela --- */

void fecharCancela(){  

      Serial.println(""); 
      Serial.println("Fechando cancela");        // Escreve

      for (pos = CancelaAberta; pos >= CancelaFechada; pos--) { 
           servo1.write(pos); 						// Posição que o servo deve girar
           delay(15); 
      }
      
      display.clearDisplay(); 						// Limpa informações do display
      display.setCursor(14,10); 					// Posiciona cursor para escrever
      display.print("Supermercado"); 				// Escreve
      display.display(); 						// Efetiva escrita
      
}
O desenho técnico da base do projeto está disponível em: 25_08_12 Cancela Controlada por RFID.

Referência: Arduino, Internet das Coisas e Computação vestível - André Luis Marques da Silveira

© Direitos de autor. 2025: Gomes; Sinésio Raimundo. Última atualização: 20/06/2025

Nenhum comentário:

Postar um comentário