You are on page 1of 5

http://www.arduinoecia.com.

br/2014/12/control
e-de-acesso-modulo-rfid-rc522.html
Controle de acesso com mdulo RFID RC522
RFID (Radio Frequency IDentification ou Identificao por radiofrequncia) uma tecnologia
que utiliza sinais de rdio e uma etiqueta (tag) RFID para leitura e gravao de dados.
A forma mais comum de utilizao do RFID na identificao de produtos, onde uma tag pode
conter informaes como cdigo do produto, procedncia, data de validade, fabricante, etc.
Mas a sua utilizao no se restringe a isso. Podemos usar etiquetas RFID em animais para
fins de rastreamento, em veculos no conhecido sistema Sem Parar, em passaportes,
rastreamento de cargas, controle de acesso e em vrias outras aplicaes.

O mdulo RFID RC522 para Arduino capaz de ler tags que operam na frequncia de 13,56
Mhz, e suporta cartes do tipo Mifare1 S50, Mifare1 S70 Mifare Ultralight, Mifare Pro e Mifare
DESFire.
Ligao do mdulo RFID ao Arduino

O mdulo RFID RC522 utiliza a interface SPI para comunicao com o Arduino por meio dos
pinos digitais de 10 13, alm do pino 9 ligado ao RST do mdulo. Veja na imagem abaixo a
disposio dos pinos e a ligao ao Arduino, com os pinos suportados pela biblioteca
MFRC522, que utilizaremos no nosso programa de controle de acesso :

Ateno alimentao do mdulo, que feita por meio do pino 3.3V do Arduino.
Controle de acesso com RFID

Vamos testar o mdulo RFID montando um controle de acesso utilizando o Arduino Uno e que
verifica o nmero da tag e libera (ou no), a passagem por uma cancela controlada por um
servo motor (microservo 9G) :

Esse controle de acesso utiliza o circuito abaixo, lembrando mais uma vez que a alimentao
do mdulo RFID feita por meio do pino 3.3V, e o servo motor alimentado por 5V, por isso
ateno na montagem para no inverter as ligaes :

Reconhecendo as tags e controlando o servo motor

No programa utilizamos a biblioteca Servo, j presente na IDE do Arduino, e tambm a


biblioteca MFRC522, que voc encontra nesse link.
Adicionamos dois leds para mostrar se o acesso foi liberado (led verde, ligado porta 5), ou
negado (led vermelho piscante, ligado porta 6).
Para adaptar o programa sua tag, verifique no serial monitor o nmero (UID) da tag lida pelo
sensor, e ento coloque esse nmero nessa linha, no lugar do "D8 4B 12 22" :
if (conteudo.substring(1) == "D8 4B 12 22")
Como temos dois cartes, adicionamos duas entradas idnticas e mudamos apenas o nmero
do UID em cada uma delas, com um dos cartes com acesso liberado e que aciona o servo
motor, movimentando o mesmo em 90 graus, e outro com acesso negado, que pisca o led
vermelho.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

// Programa : RFID - Controle de acesso / cancela


// Autor : Arduino e Cia
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
Servo microservo9g;
#define SS_PIN 10
#define RST_PIN 9
// Definicoes pino modulo RC522
MFRC522 mfrc522(SS_PIN, RST_PIN);
// Leds indicadores acesso liberado ou negado
int led_liberado = 5;
int led_negado = 6;
char st[20];
void setup()
{
pinMode(led_liberado, OUTPUT);
pinMode(led_negado, OUTPUT);
// Define que o servo esta ligado a porta digital 3
microservo9g.attach(3);
// Move o servo para a posicao inicial (cancela fechada)
microservo9g.write(90);
// Inicia a serial
Serial.begin(9600);
// Inicia SPI bus
SPI.begin();
// Inicia MFRC522
mfrc522.PCD_Init();
// Mensagens iniciais no serial monitor

36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

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


Serial.println();
}
void loop()
{
// Aguarda a aproximacao do cartao
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Seleciona um dos cartoes
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
// Mostra UID na serial
Serial.print("UID da tag :");
String conteudo= "";
byte letra;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" :
" "));
conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Mensagem : ");
conteudo.toUpperCase();
// Testa se o cartao1 foi lido
if (conteudo.substring(1) == "D8 4B 12 22")
{
// Levanta a cancela e acende o led verde
microservo9g.write(-90);
digitalWrite(led_liberado, HIGH);
Serial.println("Cartao1 - Acesso liberado !");
Serial.println();
delay(3000);
microservo9g.write(90);
digitalWrite(led_liberado, LOW);
}
// Testa se o cartao2 foi lido
if (conteudo.substring(1) == "87 4B DC 8A")
{
Serial.println("Cartao2 - Acesso negado !!!");

85
86
87
88
89
90
91
92
93
94
95

Serial.println();
// Pisca o led vermelho
for (int i= 1; i<5 ; i++)
{
digitalWrite(led_negado, HIGH);
delay(200);
digitalWrite(led_negado, LOW);
delay(200);
}
}
delay(1000);
}

Abaixo, o serial monitor mostrando os dados referentes s tags que foram liberadas ou
negadas :

Esse projeto pode ser melhorado adicionando-se um sensor infravermelho para detectar a
passagem de veculos/pessoas/objetos pela cancela, ou um display para contagem de
acessos. Abaixo, circuito em

You might also like