Arduino, Internet das Coisas e Computação vestível |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Módulo de comunicação RFID RC522Descrição
Caracteristicas
Pinagem
Entenda o funcionamento
Biblioteca
|
// Projeto: Lê informações armazenadas em TAG RFID // Autor: André Silveira // Data: 12/09/2019 /* * ------------------------------------------------------------------------------- |
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
// 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] |