Arduino, Internet das Coisas e Computação vestível

[Voltar]

[Avançar]

11.2. Cancela Controlada por RFID


Cancela Controlada por RFID

O projeto utiliza Arduino Uno R3Micro Servo Motor SG90 ou Servo Motor Digital Mg996R, LED, Display Oled 0,96 128x64Modulo 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

// 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
      
}

 

[Voltar]

[Avançar]