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