You are on page 1of 10

SISTEMA DE CONTROLE DE ACESSO AO LABORATORIO DE SISTEMAS

CIBERNETICOS UTILIZANDO RFID E APLICATIVO PARA CELULAR

Gabriel Hugo Alvares, Pedro Henrique Galdino Silva, Eduardo Bento Pereira

GCOM - Grupo de Controle e Modelagem
Departamento de Engenharia Eletrica
UFSJ - Universidade Federal de Sao Joao del-Rei
Pca. Frei Orlando, 170 - Centro - 36307-352 - Sao Joao del-Rei, MG, Brasil

Emails: gabrielhugo0701@gmail.com, pedrogaldino88@yahoo.com, ebento@ufsj.edu.br

Abstract In this paper, the concept of Internet of Things is applied in the development of a system to
control the access of students to a universitys laboratory through radio frequency card transmiters. The system
can be managed in real time through a cellphone application, which communicates with the physical system
through a cloud database. Details on the development of the project and the results are presented.

Keywords RFID, Access control, Internet of Things, Automation

Resumo Neste trabalho, o conceito de Internet das Coisas e aplicado no desenvolvimento de um sistema
de controle de acessos de alunos a um laboratorio da universidade atraves de cartoes transmissores de radio
frequencia. O sistema desenvolvido pode ser gerenciado em tempo real atraves de aplicativo para celular, que se
comunica com o sistema fsico atraves de um banco de dados na nuvem. Detalhes do desenvolvimento do projeto
e os resultados obtidos sao apresentados.

Palavras-chave RFID, Controle de Acesso, Internet das Coisas, Automacao

1 Introducao cancados, bem como as respectivas analises e dis-


cussoes. Finalmente, as consideracoes finais sobre
De maneira geral, ambientes restritos necessitam o trabalho e perspectivas de trabalhos futuros sao
de um sistema que controle e gerencie os aces- abordadas na Secao 5.
sos. Tal controle pode ser feito de varias formas,
desde as simples e tradicionais chaves ate sistemas 2 Conceitos Preliminares
computadorizados que utilizam as mais diferen-
tes tecnicas e linguagens de programacao, e ainda O conceito de Internet das Coisas e relativamente
uma gama imensa de dispositivos de identificacao novo e tem grande potencial de crescimento nos
e hardwares que fazem a interface entre estes dis- proximos anos, devido aos avancos tecnologicos
positivos e o sistema de gerenciamento. Alem de significativos que a humanidade vem experienci-
tornar mais rapido e pratico o acesso ao ambiente, ando recentemente. O conceito em si trata da pos-
tais sistemas contribuem para aperfeicoamento da sibilidade de conexao dos mais variados objetos a
seguranca. Internet, afim de compartilhar informacoes e co-
Neste trabalho, o problema proposto foi de- ordenar tarefas, trabalhando como um grande sis-
senvolver um sistema de controle de acesso para o tema inteligente. Sistemas como estes estao sendo
Laboratorio de Sistemas Ciberneticos, utilizando aplicados em domotica, na industria, agricultura,
a tecnologia RFID como identificacao do usuario e pecuaria, no comercio e em diversos outros seto-
a placa Raspberry Pi B+ para o gerenciamento de res.
permissoes e conexao com um banco de dados na Um sistema de controle de acesso deve ser ca-
nuvem contendo as informacoes de acesso. Para paz de aceitar ou nao o acesso de determinado
complementar o sistema, foi desenvolvido um apli- usuario ao ambiente, e de forma segura guardar
cativo para celular para uso do responsavel pelo as informacoes desse usuario, alem de ser capaz
laboratorio. Tal aplicativo possibilita a liberacao de gerar dados com os historicos de acesso.
e bloqueio de usuarios autorizados a utilizar o la- Para efetuar sua funcao de forma constante e
boratorio em tempo real, alem de gerar, tambem segura e necessario que o sistema conte com uma
em tempo real, um historico de acessos, contendo central de controle. Esta central pode ser, por
o nome do usuario, a data e a hora que ele acessou exemplo, um microcontrolador, ou um computa-
o laboratorio. dor. A escolha desta central vai de acordo com
O presente artigo esta organizado da seguinte o volume de dados a ser processados, os recursos
maneira. Na Secao 2, os conceitos basicos para financeiros disponveis para o projeto e ao espaco
entendimento do tema abortado sao apresentados. fsico disponvel para implantacao. No projeto dis-
A seguir, todo o procedimento adotado para o de- cutido foi escolhida a placa Raspberry Pi model B
senvolvimento do trabalho e detalhado na Secao devido a sua capacidade de processamento, baixo
3. Na Secao 4, sao apresentados os resultados al- custo e pequeno tamanho. Alem disso, a placa ofe-
rece outras funcionalidades, como conexao ether-
net nativa, cartao de memoria SD e GPIOs.
O dispositivo utilizado para identificacao do
usuario e conhecido como cartao RFID (do ingles,
Radio Frequency Identification) e consiste em um
cartao transmissor que emite uma identificacao
por radio frequencia. Cada cartao possui um
codigo unico.
Ainda e importante definir o conceito de
banco de dados em nuvem, que nada mais e do
que um conjunto de informacoes salvas em uma
pagina na internet, que podem ser acessadas re-
motamente atraves de dispositivos que possuam
conexao a rede mundial de computadores. Neste Figura 1: Diagrama de blocos.
projeto, o Raspberry Pi e o aplicativo desen-
volvido para Android irao enviar e receber in-
formacoes do bando de dados.
Por fim, e necessario apresentar o conceito do
bloco TinyWebDB, que e um bloco disponvel den-
tro da plataforma App Inventor, utilizada para de-
senvolver o aplicativo. Este bloco e o responsavel
por se comunicar com o banco de dados. Para
isso, utiliza o link do banco de dados e identifi-
cadores (tags) para identificar as informacoes que
deve acessar.

3 Metodologia

O primeiro passo para a realizacao do projeto, an-


terior a execucao, consiste no planejamento do sis-
tema. Portanto, foram tracados o diagrama de
blocos, que apresenta uma ligacao simplificada de
todos os componentes utilizados, e o fluxograma
do codigo, qu apresenta uma sequencia logica da
programacao utilizada, mostrados nas Figuras 1
e 2, respectivamente. Esta primeira etapa foi de
suma importancia para o bom andamento do pro-
jeto, uma vez que proporcionou uma boa visao do
que seria feito e ajudou a definir um cronograma
de atividades e listar quais componentes seriam
necessarios para a execucao.
Definidos os componentes a serem utilizados,
foi possvel tracar o modo de funcionamento de
cada um deles, as especificacoes mais relevantes
foram levadas em consideracao, como por exem-
plo:

Tensao de entrada;

Corrente de trabalho;

Protocolo de comunicacao.

A criacao do fluxograma foi importante


tambem para definir a estrategia de programacao
que seria utilizada, assim, depois de configurar
corretamente a placa Raspberry de acordo com Figura 2: Fluxograma.
instrucoes retiradas de (Upton, 2016), foi possvel
iniciar o trabalho de aprender os conceitos basicos
da linguagem de programacao Python, que e a lin- Para o aprendizado da linguagem Python foram
guagem mais utilizada em conjunto com a placa. utilizadas as instrucoes de (Menezes, 2014). A
placa Raspberry Pi tem como sistema operacional O circuito eletronico foi necessario pelo fato
uma distribuicao Linux, para o projeto a versao de as portas de entrada e sada (GPIOs) do Rasp-
escolhida foi a Raspbian, disponibilizada pela fa- berry nao fornecerem corrente suficiente para aci-
bricante da placa. onar o rele, que por sua vez permite a passagem
Paralelamente a criacao dos algoritmos para de corrente para a fechadura eletrica quando um
controle dos acessos no Raspberry, foi sendo feito cartao autorizado e detectado pelo sensor RFID.
o aplicativo na plataforma MIT AppInventor, que O circuito utilizado pode ser visualizado na Figura
e um ambiente online caracterizado pela facilidade 3.
de uso. Para o desenvolvimento do aplicativo, foi
utilizado como referencia e fonte de informacoes o
trabalho de(Wolber, 2014).
No que diz respeito ao banco de dados, foi uti-
lizado um tutorial (disponvel no Anexo C), afim
de criar um servidor web que pudesse se comunicar
facilmente com o aplicativo desenvolvido atraves
do bloco TinyWebDB disponvel no App Inventor.
Com o banco de dados funcionando, foi implemen-
tado no codigo python uma rotina para acessa-lo
e enviar e receber informacoes.
O banco de dados e formado basicamente por
Figura 3: Circuito de acionamento do rele.
cinco identificadores (tags), cada um contendo
uma lista com as seguintes informacoes: nome dos
usuarios cadastrados, codigo do cartao RFID de Todos os componentes fsicos do projeto fo-
cada usuario, data de acesso, hora do acesso e ram devidamente acondicionados dentro de uma
nome do usuario que acessou o laboratorio. De caixa acrlica refrigerada, tambem confeccionada
posse dos identificados, tanto o aplicativo quanto pelos alunos, como mostrado na figura 9. A refri-
o Raspberry podem acessar o banco de dados e geracao foi feita atraves de um pequeno ventilador
enviar e receber as listas. de 12V proveniente de material reciclavel.
O aplicativo e responsavel por salvar no banco
de dados a lista de usuarios e seus respectivos
codigos RFID, alem de ler os nomes dos usuarios 4 Analise dos Resultados
que acessaram o laboratorio, com as respectivas
datas e horas. Ja o Raspberry deve realizar o pro- O prototipo desenvolvido pode ser observado na
cesso inverso, lendo a lista de usuarios e codigos Figura 8. Trata-se uma janela de madeira, com
RFID e salvando data, hora e nome de usuario a fechadura eletrica instalada e de uma caixa
quando o acesso ao laboratorio for autorizado. de acrlico contendo os componentes eletronicos.
No Raspberry, foi necessario desenvolver um Quatro exemplos de telas do aplicativo podem ser
algoritmo em Python capaz de ler a informacao do vistos nas Figuras 4, 7, 5 e 6. Elas mostram, res-
leitor RFID, e verificar no banco dados se o codigo pectivamente, a tela de opcoes do aplicativo, a tela
recebido e autorizado, acionando ou nao o rele que de cadastro de novo usuario do sistema, a tela que
ativa a fechadura eletrica, e gravando o acesso no apresenta o historico de acessos dos usuarios, com
banco de dados. Por questoes de seguranca, para as datas e horas e a tela de usuarios cadastrados.
o caso de nao haver conexao Ethernet as listas Durante os testes realizados, foi observado
contidas no banco de dados tambem foram salvas que, ao se aproximar um cartao cadastrado do
na memoria da placa, sendo sincronizadas com a sensor RFID, o sistema era capaz de reconhece-
nuvem periodicamente. lo e acionar a fechadura eletrica por cerca de 1
A medida que o aplicativo e o algoritmo fo- segundo. No mesmo instante, os dados eram en-
ram evoluindo, foi sendo construdo o prototipo viados ao servidor e podiam ser visualizados no
do projeto. O objetivo do prototipo e simular as aplicativo. Quando um novo usuario e cadastrado,
condicoes de uma porta com fechadura eletrica. deve-se esperar cerca de 10 segundos para que o
Os componentes presentes sao: mesmo seja reconhecido pelo sistema, uma vez que
essa e a periodicidade com que o Raspberry acessa
Raspberry Pi; o banco de dados.
Ao ser conectado a fonte de energia, deve-se
Receptor RFID;
esperar 30 segundos apos a completa inicializacao
Circuito eletronico para acionar a fechadura; da placa (indicada pelos LEDs presentes) para que
o sistema esteja ativo e funcionando. Este tempo
Rele; foi configurado para que o Raspberry tenha tempo
suficiente para iniciar todos os modulos, inclusive
Fechadura eletrica. a conexao Ethernet.
Figura 4: Tela de opcoes do aplicativo. Figura 6: Lista de usuarios cadastrados.

Figura 5: Historico de acessos. Figura 7: Gerenciamento de usuarios.


O aplicativo tambem atendeu as expectati- forma, no caso hipotetico em que um usuario
vas, possibilitando o cadastro de novos usuarios e perca seu cartao, o sistema nao ficaria vulneravel
tambem a exclusao e/ou modificacao de usuarios ate que o administrador seja avisado para blo-
existentes como mostrado na figura 7. quear o acesso do cartao.
Conclui-se ainda que o trabalho possibilitou
grande aprendizado aos alunos em conceitos im-
portantes na evolucao tecnologica que se vive atu-
almente, como a manipulacao de determinados
componentes eletronicos, como a placa de proto-
tipagem Raspberry Pi, alem de conhecimentos de
software, como o sistema operacional Linux, utili-
zado no Raspberry, a linguagem de programacao
Python, questoes relacionadas a transmissao de
dados e gerenciamento de banco de dados, alem do
desenvolvimento de aplicativo para celular. Pode-
se ainda citar o aprendizado, na pratica, das ha-
bilidades necessarias para conectar todos os ele-
mentos citados, que envolvem varias areas do co-
nhecimento.

Agradecimentos
Figura 8: Prototipo.
Os autores agradecem ao grupo Cyros e ao pro-
fessor Eduardo pelo suporte e por disponibilizar
os componentes necessarios para realizacao deste
trabalho.

Referencias

Menezes, N. N. C. (2014). Introducao a Pro-


gramacao com Python, Novatec. 2a edition.
Upton, E. (2016). Raspberry Pi User Guide, John
Wiley Sons. 4a edition.
Wolber, David, E. a. (2014). App Inventor 2: Cre-
ate Your Own Android Apps, OReilly Media.
Figura 9: Caixa contendo a Raspberry e o leitor. 2a edition.

5 Conclusao

Ao final deste trabalho, pode-se concluir que


o projeto atingiu os objetivos propostos, con-
seguindo fazer a identificacao de cada usuario
atraves de seu cartao RFID e interagir com o
banco de dados e o aplicativo. Foi possvel de-
senvolver um sistema pratico e funcional, ca-
paz gerenciar e monitorar os acessos, de forma
economica e simples.
Vale ressaltar que o sistema pode ser apli-
cado em outros ambientes alem do abordado neste
texto, como, por exemplo, industrias, comercios
e ate mesmo residencias e condomnios residen-
ciais. Outras melhorias e aprimoramento ainda
podem ser feitas ao projeto, como a elevacao do
nvel de seguranca do acesso acrescentando outro
metodo de identificacao, como por exemplo senhas
numericas ou alfanumericas atraves de teclados
ou membranas conectadas ao Raspberry. Dessa
[

Anexo A - Algoritmo em Python

% Rotina Computacional Desenvolvida.


% Autores: Gabriel Hugo Alvares
% Pedro Henrique Galdino Silva
% Data: 13/07/2017
% Vers~
ao: 1.0

#Importando bibliotecas necessarias


import serial # biblioteca para usar a porta serial
import difflib # biblioteca para comparar duas strings
import RPi.GPIO as GPIO # biblioteca utilizada para os pinos
import time #biblioteca para contagem do tempo de acionamento do rele
import requests #biblioteca para acessar o banco de dados
import json #manipular arquivos no formato json (banco de dados)
import threading # biblioteca usada com o time para funcao
import ast #biblioteca para converter string to list
import datetime #biblioteca de data

#Acessando o banco de dados

def server():

#Lendo o banco de dados RFID


data_rfid={"tag":"rfid"}
url_rfid=requests.post(http://iot-lab-access.appspot.com/getvalue, data_rfid)

x_rfid = json.loads(url_rfid.text)
y_rfid = json.loads(x_rfid[2])
lista = str(y_rfid)

#Salvando o banco de dados RFID no raspberry


arquivo_rfid="arquivo_rfid.text"
file = open(arquivo_rfid,"w")
file.write(lista)
file.close()

file = open(arquivo_rfid,"r")
global rfid
rfid=file.readline()
file.close()
global rfid1
rfid1=ast.literal_eval(rfid)

#Lendo o banco de dados USUARIO


data_usuario={"tag":"usuario"}
url_usuario=requests.post(http://iot-lab-access.appspot.com/getvalue, data_usuario)
print url_usuario.text

x_usuario = str(url_usuario.text)
y_usuario = ast.literal_eval(x_usuario)
lista = ast.literal_eval(y_usuario[2])

lista1=str(lista)
#Salvando o banco de dados USUARIO no raspberry
arquivo_usuario="arquivo_usuario.text"
file = open(arquivo_usuario,"w")
file.write(lista1)
file.close()

file = open(arquivo_usuario,"r")
usuario=file.readline()
file.close()

global usuario1
usuario1=ast.literal_eval(usuario)
#print usuario1
#print usuario1[2]

threading.Timer(10, server).start()

server()
#Definindo as configuracoes das GPIOs
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)

#Iniciando a comunicacaoo serial


serial = serial.Serial("/dev/ttyUSB0", baudrate=9600)

#Mesangem inicial
print(Aproxime a tag do leitor RFID)
code =

#Contador utilziado para comparas os codigos das TAGs


counter=0

#O while faz a leitura da porta serial quando ha presenca da TAG no sensor


while True:
data = serial.read()
if data == \r:

counter = counter + 1

if counter == 1:
code = code[:0] + code[(1):]
else:
code = code[:0] + code[(1):]
code = code[:0] + code[(1):]
code = code[:0] + code[(1):]

print(code)

#Parte do codigo utilizada para comparar strings ---------------------------

# cases=[(rfid,code)]

# for a,b in cases:


# print({} => {}.format(a,b))
# for i,s in enumerate(difflib.ndiff(a, b)):
# if s[0]== : continue
# elif s[0]==-:
# print(uDelete "{}" from position {}.format(s[-1],i))
# elif s[0]==+:
# print(uAdd "{}" to position {}.format(s[-1],i))
# print()

#Fim da parte utilizada para comparar strings ------------------------------

if code in rfid1:
print(Cartao liberado)

#Abre a fechadura
GPIO.output(12,GPIO.HIGH)
time.sleep(1)
GPIO.output(12,GPIO.LOW)

#Enviando Usuario, Data e Hora para o servidor


#Salvando o usuario que acessou a porta
posicao_usuario=rfid1.index(code)

arquivo_hist_usuario="arquivo_hist_usuario.text"
file_hist_usuario = open(arquivo_hist_usuario,"r")
hist_usuario = file_hist_usuario.readline()
file_hist_usuario.close()

if hist_usuario == :
hist_usuario1=[usuario1[posicao_usuario]]
hist_usuario=str(hist_usuario1)

else:

hist_usuario1 = ast.literal_eval(hist_usuario)
hist_usuario1.append(usuario1[posicao_usuario])
hist_usuario=str(hist_usuario1)

file_hist_usuario = open(arquivo_hist_usuario,"w")
file_hist_usuario.write(hist_usuario)
file_hist_usuario.close()

data_hist={"tag":"hist_usuario","value":hist_usuario}
r = requests.post(http://iot-lab-access.appspot.com/storeavalue,data_hist)

#Salvando a hora de acesso no banco de dados

arquivo_hora="arquivo_hora.text"
file_hora= open(arquivo_hora,"r")
hora = file_hora.readline()
file_hora.close()

hour=datetime.datetime.now().strftime("%H:%M")
if hora == :
hora1=[hour]
horas=str(hora1)

else:

hora1 = ast.literal_eval(hora)
hora1.append(hour)
horas=str(hora1)

file_hora = open(arquivo_hora,"w")
file_hora.write(horas)
file_hora.close()

data_hora={"tag":"hora","value":horas}
r = requests.post(http://iot-lab-access.appspot.com/storeavalue,data_hora)

#Salvando a data de acesso no banco de dados

arquivo_data="arquivo_data.text"
file_data= open(arquivo_data,"r")
data = file_data.readline()
file_data.close()

date=datetime.datetime.now().strftime("%d-%m-%y")
if data == :
data1=[date]
datas=str(data1)

else:

data1 = ast.literal_eval(data)
data1.append(date)
datas=str(data1)

file_data = open(arquivo_data,"w")
file_data.write(datas)
file_data.close()

data_data={"tag":"data","value":datas}
r = requests.post(http://iot-lab-access.appspot.com/storeavalue,data_data)

else:
print(Acesso negado)

code =
else:
code = code + data

#Fim do algoritmo

]
6 Anexo B - Lista de materiais

Tabela 1: Lista de Materiais

Item Quantidade Preco


Raspberry Pi B+ 01 R$ 140,00
Cartao SD de 32G 01 R$ 89,00
Rele 5V 01 R$ 3,90
Fechadura eletronica 01 R$ 139,00
Kit RFID ID-12LA 01 R$ 357,00
Resistor 1/8 W 03 R$ 0,24
Transistor bipolar BC337 02 R$ 0,22
Opto acoplador PC817B 01 R$ 0,30
Diodo 1N4148 01 R$ 0,07
Cooler 12 V 01 R$ 20,00
Fonte 5V 01 R$ 34,00
Fonte 12V 01 R$ 20,00
Total R$ 800,00

Anexo C - Tutorias utilizados e nao citados no artigo

https://www.raspberrypi.org/learning/getting-started-with-node-red/worksheet/

https://www.raspberrypi.org/learning/physical-computing-with-python/analogue/

https://www.raspberrypi.org/learning/python-web-server-with-flask/

https://www.raspberrypi.org/learning/networking-lessons/lesson-3/plan/

https://www.raspberrypi.org/learning/lamp-web-server-with-wordpress/worksheet/

https://www.raspberrypi.org/learning/demo-programs/worksheet/

https://www.youtube.com/watch?v=tZPWXnMdIRU

https://raspberrypi.stackexchange.com/questions/37920/how-do-i-set-up-networking-wifi-static-ip-address/37921#37921

http://wiringpi.com/the-gpio-utility/pin-test/

https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=147291

https://www.raspberrypi.org/documentation/remote-access/ssh/windows.md

https://raspberrypi.stackexchange.com/questions/1303/do-ssh-failing-in-initial-setup

http://ask.xmodulo.com/disable-desktop-gui-raspberry-pi.html

http://cadernodelaboratorio.com.br/2015/06/10/inicializando-um-programa-automaticamente-no-raspberrypi/

http://wiki.sunfounder.cc/index.php?title=How_to_Use_an_RFID_RC522_on_Raspberry_Pi

http://raspmer.blogspot.com.br/2015/07/how-to-use-rfid-rc522-on-raspbian.html

https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=147291

https://www.tutorialspoint.com/python/python_quick_guide.htm

http://bradsrpi.blogspot.com.br/2013/01/rfid-with-innovations-id12-rfid-reader.html

http://makezine.com/projects/tutorial-raspberry-pi-gpio-pins-and-python/

http://elinux.org/RPi_GPIO_Interface_Circuits

https://sourceforge.net/p/raspberry-gpio-python/wiki/Outputs/

https://pypi.python.org/pypi/RPi.GPIO
https://www.youtube.com/watch?v=b6ZagKRnRdM

https://www.youtube.com/watch?v=qawFgeJldAQ

http://appinventor.mit.edu/explore/content/custom-tinywebdb-service.html

https://www.raspberrypi.org/forums/viewtopic.php?f=32&t=24121&p=234826

http://www.instructables.com/id/Reading-JSON-With-Raspberry-Pi/

http://kio4.com/appinventori/8file_database.htm

http://appinventor.pevest.com/?p=914

https://stackoverflow.com/questions/17309288/importerror-no-module-named-requests

http://www.thegeekstuff.com/2013/06/python-list/?utm_source=feedly

http://www.pythonforbeginners.com/basics/python-datetime-time-examples

https://stackoverflow.com/questions/8600161/executing-periodic-actions-in-python

https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=122220&p=824154

http://www.pythonforbeginners.com/requests/using-requests-in-python

https://iot-lab-access.appspot.com/getvalue

http://blog.evaldojunior.com.br/aulas/python/2009/02/08/curso-de-python-aula-12.html

You might also like