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

Você está em » Home : Módulos :: Comunicação

[Voltar]

[Avançar]

Módulo de comunicação RFID RC522 

Descrição

O Módulo de comunicação que utiliza a tecnologia RFID (Identificador de rádio frequência) na frequência de 13,56Mhz. Indicado para projetos de controle de acesso ou sistemas de segurança. Utiliza cartão RFID 13,56Mhz (Etiqueta RFID) que armazena 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, etc. O cartão possui um número de identificação (UID) pré-gravado e memória de 1KB para armazenar dados. Também utiliza chaveiro RFID 13,56Mhz programável. Este ultimo é usado para controle de acesso, sensor de presença, sistemas de segurança e outras aplicações. O cartão possui um número de identificação (UID) pré-gravado e memória de 1KB para armazenar dados.

Caracteristicas

  • Corrente: 13-26mA / DC 3.3V
  • Corrente ociosa: 10-13mA / 3.3V
  • Freqüência de operação: 13,56MHz
  • Tipos de cartões aceitos: Mifare1 S50, S70 Mifare1, Mifare UltraLight, Mifare Pro, Mifare Desfire
  • Temperatura de operação: -20 a 80 graus Celsius
  • Temperatura ambiente: -40 a 85 graus Celsius
  • Umidade relativa: 5% – 95%
  • Comunicação: SPI (Serial Peripheral Interface)
  • Taxa de transferência: 10 Mbit/s
  • Dimensões: 8,5 x 5,5 x 1,0cm
  • Peso: 21gm

Pinagem

  • VCC: 3.3V
  • RST: Reset
  • GND: 0V
  • NC ou IRQ: interruptor de hardware
  • MISO (Master IN Slave OUT): Dados do Slave para Master
  • MOSI (Master OUT Slave IN): Dados do Master para Slave
  • SCK (Serial Clock): Clock de sincronização para transmissão de dados entre o Master e Slave
  • SDA (Slave_Data): I2C Serial Data (SDA)

Entenda o funcionamento

O sistema é composto por:

  • Um transceptor com decodificador e uma antena.
  • Um transponder (chamado também de TAG) que é eletronicamente programado com informações.

O transceptor emite, através de uma antena, sinais de rádio para ativar o TAG, que por sua vez, reponde uma mensagem ao receptor com a informações armazenadas em seu chip. Uma TAG é composta, basicamente, por um chip, que armazena informações, e uma antena.

Biblioteca

Para programar o sensor utilize a biblioteca abaixo:


Projeto(s) relacionado(s)


Lê identificador da TAG RFID

O projeto utiliza Arduino Uno R3 e Modulo de comunicação RFID para ler o identificador da TAG RFID e após imprime na Serial do IDE Arduino.

Para este projeto utiliza biblioteca: MFRC522 e SPI

// Projeto: Lê informações armazenadas em TAG RFID 
// Autor: André Silveira
// Data: 12/09/2019

/*
* -------------------------------------------------------------------------------
* MFRC522 Uno/101 Mega Nano v3 Leonardo/Micro ESP8266
* Sinal Pinos Pinos Pinos Pinos Wemos D1
* -------------------------------------------------------------------------------
* SDA(SS) 10 53 D10 10 D2
* SCK(Clock) 13 52 D13 ICSP-3 D5 * MOSI 11 51 D11 ICSP-4 D7
* MISO 12 50 D12 ICSP-1 D6
* NC NC NC NC NC NC * GND GND GND GND GND GND * RST 9 49 D9 RESET/ICSP-5 D1
* 3.3 3.3v 3.3v 3.3v 3.3v 3.3v
* -------------------------------------------------------------------------------
*/ #include "SPI.h" // Biblioteca comunicação SPI #include "MFRC522.h" // Biblioteca RFID RC522 #define SDA_PIN 10 // Pino SDA #define RST_PIN 9 // Pino RESET int a=1; MFRC522 rfid(SDA_PIN, RST_PIN); // Define pinos para Módulo RFID void setup(){ Serial.begin(9600); Serial.println("Efetua a leitura de informações armazenadas na TAG"); Serial.println(); Serial.print(a); Serial.print(") Aproxime sua TAG do leitor"); SPI.begin(); // Inicializa comunicação SPI rfid.PCD_Init(); // Inicializa RFID MFRC522 } void loop() { /* ----- Efetua leitura da TAG RFID ----- */ if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial()) { return; } /* ----- 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(); Serial.print(", identificador é: '"); Serial.print(strID); // Imprime na serial o ID da TAG RFID Serial.println("'"); a++; Serial.print(a); Serial.print(") Aproxime sua TAG do leitor"); delay(1000); }


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]