Controle de acesso com Leitor RFID 125kHz e Raspberry Pi 4

Controle de acesso com Leitor RFID 125kHz e Raspberry Pi 4 Deixe um comentário

A tecnologia de identificação por radiofrequência (RFID) tem se destacado cada vez mais em diversas áreas, desde controle de acesso e rastreamento de inventário até pagamento sem contato. Neste tutorial, vamos explorar uma aplicação prática dessa tecnologia ao integrar um leitor RFID 125kHz USB com um Raspberry Pi 4 Model B Anatel. Ao combinarmos esses dispositivos, abrimos portas para uma ampla gama de projetos, desde sistemas de segurança residencial até aplicações industriais avançadas.

Leitor RFID 125Khz e RTC com Raspberry Pi 4

O leitor RFID 125kHz USB é um dispositivo versátil que utiliza sinais de radiofrequência para interagir com tags RFID passivas. Essas tags, por sua vez, são pequenos dispositivos eletrônicos capazes de armazenar e transmitir dados sem fio. A combinação do leitor com o Raspberry Pi permite não apenas a leitura das tags, mas também a integração desses dados em aplicações práticas, como controle de acesso em ambientes controlados ou sistemas de rastreamento de ativos. Ao entendermos o funcionamento desses dispositivos em conjunto, podemos explorar todo o potencial da tecnologia RFID para a criação de soluções inovadoras e eficientes.

Objetivos

O principal objetivo deste tutorial é fornecer um guia abrangente para integrar um leitor RFID 125kHz USB e um Real Time Clock (RTC) DS3231 com um Raspberry Pi 4 Model B. Ao final deste tutorial, os leitores serão capazes de compreender o funcionamento desses dispositivos em conjunto, configurá-los para operação com o Raspberry Pi e desenvolver um sistema de controle de acesso utilizando tags RFID:

  • Compreender o funcionamento do leitor RFID 125kHz USB e suas capacidades de leitura e gravação em tags RFID.
  • Explorar as funcionalidades do Real Time Clock (RTC) DS3231 e entender como ele mantém a precisão do tempo no Raspberry Pi mesmo quando desligado.
  • Integrar o leitor RFID e o RTC ao Raspberry Pi, garantindo uma conexão estável e confiável.
  • Configurar o sistema operacional do Raspberry Pi para reconhecer e utilizar o RTC como fonte de tempo principal.
  • Desenvolver um código de controle de acesso utilizando tags RFID, aproveitando as funcionalidades do leitor e do RTC integrados ao Raspberry Pi.
  • Demonstração prática do funcionamento do sistema, incluindo o cadastro de novas tags RFID e a verificação de acesso utilizando as tags cadastradas.

Materiais Necessários

Para seguir com este tutorial, você irá precisar dos seguintes componentes:

Leitor RFID 125Khz, RTC e Raspberry Pi 4

Além dos itens mencionados acima, você também precisará ter o Raspberry Pi OS instalado no cartão de memória da sua Raspberry Pi. Para isso, siga o tutorial Primeiros Passos com a Raspberry Pi.

Como funciona o Leitor RFID 125KHz USB?

O leitor RFID (Radio-Frequency Identification) de 125kHz USB é um dispositivo que utiliza tecnologia de radiofrequência para ler e, em alguns casos, escrever em tags RFID. Aqui está uma breve explicação de como funciona:

Leitor RFID 125KHz USB

  • Tag RFID: As tags RFID são pequenos dispositivos eletrônicos que armazenam e transmitem dados sem fio por meio de sinais de radiofrequência. Existem diferentes tipos de tags RFID, como passivas, semi-passivas e ativas. As tags passivas são as mais comuns e não requerem uma fonte de energia interna; elas são ativadas pela energia transmitida pelo leitor RFID.
  • Leitor RFID: O leitor RFID 125kHz USB é um dispositivo que emite sinais de radiofrequência para ativar tags RFID e ler suas informações. Ele também pode ser capaz de escrever dados em tags RFID que suportam essa funcionalidade.
  • Comunicação com o computador: O leitor RFID 125kHz USB se conecta ao computador através da porta USB. Ele geralmente vem com um software que permite que o computador reconheça e interaja com o leitor. Este software pode fornecer uma interface gráfica para facilitar a leitura e gravação de dados nas tags RFID.
  • Processo de leitura/gravação: Quando uma tag RFID está dentro do alcance do leitor RFID, o leitor emite um sinal de radiofrequência que ativa a tag. A tag responde ao sinal de volta, transmitindo seus dados de identificação ao leitor. O leitor então envia esses dados para o computador, onde podem ser processados pelo software para realizar várias operações, como controle de acesso, rastreamento de inventário, pagamento sem contato, entre outros.
  • Alcance e ambiente: O alcance de um leitor RFID 125kHz USB pode variar dependendo do ambiente e do tipo de tag RFID usado. Em geral, o alcance é limitado a alguns centímetros a alguns metros. O ambiente também pode afetar o desempenho do sistema RFID, com obstáculos físicos e interferências eletromagnéticas podendo reduzir o alcance e a confiabilidade da leitura.

Como funciona o Real Time Clock RTC DS3231 para Raspberry Pi?

O Real Time Clock (RTC) DS3231 é um dispositivo que permite ao Raspberry Pi manter a noção do tempo mesmo quando desligado, funcionando como um relógio de tempo real de alta precisão. Aqui está uma explicação de como ele funciona em conjunto com o Raspberry Pi:

Real Time Clock RTC DS3231 para Raspberry Pi

 

  • Hardware: O DS3231 é um chip de RTC que possui um oscilador de cristal de alta precisão embutido, capaz de manter o tempo com uma margem de erro muito baixa. Ele se conecta ao Raspberry Pi através de uma interface de comunicação serial, geralmente utilizando os pinos SDA (Serial Data) e SCL (Serial Clock) no barramento I2C.
  • Configuração: Antes de usar o DS3231 com o Raspberry Pi, você precisa habilitar a interface I2C no Raspberry Pi. Isso pode ser feito através do utilitário raspi-config ou editando o arquivo /boot/config.txt. Além disso, você pode precisar instalar drivers ou bibliotecas específicas para o DS3231, dependendo do sistema operacional e da linguagem de programação que você está utilizando.
  • Leitura e configuração de tempo: Uma vez que o DS3231 está configurado e conectado ao Raspberry Pi, você pode ler a hora atual do chip e configurar a hora conforme necessário. Isso geralmente é feito através de comandos ou funções disponíveis em bibliotecas específicas para o DS3231.
  • Backup de bateria: O DS3231 possui uma entrada para uma bateria de backup, que permite manter o relógio em funcionamento mesmo quando o Raspberry Pi está desligado. Isso garante que o relógio de tempo real continue funcionando e mantendo a hora correta mesmo após interrupções de energia.
  • Utilização em projetos: O RTC DS3231 é comumente usado em projetos que requerem registros de tempo precisos, como sistemas de monitoramento de dados, controle de acesso, sistemas de alarme, entre outros. Ele pode ser integrado ao Raspberry Pi para adicionar funcionalidade de tempo real a esses projetos.

Circuito Eletrônico com Leitor RFID 125Khz

Segue o esquema de conexões do RTC DS3231 e o Leitor RFID 125KHz USB com a Raspberry Pi 4B+:

Circuito Eletrônico com Leitor RFID 125Khz

 

Configuração da Raspberry Pi para usar o RTC DS3231

Para manter a hora certa em uma Raspberry Pi utilizando um Real Time Clock DS3231, você pode seguir os seguintes passos:

1. Certifique-se de que o RTC DS3231 esteja corretamente conectado à Raspberry Pi, conforme mostrado no circuito acima.
2. Verifique se a interface I2C está habilitada na sua Raspberry Pi. Você pode fazer isso usando o utilitário raspi-config. Execute o seguinte comando no terminal:

sudo raspi-config

3. Em seguida, vá para “Interface Options” > “I2C” e habilite-o.
4. Você precisará de algumas bibliotecas Python para interagir com o RTC DS3231. Instale-os usando o pip:

sudo pip install adafruit-circuitpython-ds3231

5. Uma vez que o RTC está conectado e as bibliotecas estão instaladas, você precisa atualizar a hora no RTC DS3231. Isso pode ser feito usando um script Python. Aqui está o script para configurar a hora no RTC. Você pode modificar as informações de data e hora conforme necessário no script abaixo.

import time
import board
import busio
import adafruit_ds3231

# Cria uma interface I2C
i2c = busio.I2C(board.SCL, board.SDA)

# Cria um objeto para o RTC
rtc = adafruit_ds3231.DS3231(i2c)

# Ajusta a hora e a data do RTC
rtc.datetime = time.struct_time((2024, 3, 16, 10, 30, 0, 0, -1, -1))

print("Hora ajustada com sucesso no RTC.")

6. Por padrão, a Raspberry Pi usa a hora do sistema operacional. Para usar o RTC DS3231 como fonte de hora, você precisa configurar o sistema operacional para inicializar com o RTC. Isso geralmente envolve modificar o arquivo de configuração do sistema operacional. Para Raspberry Pi OS, você precisa editar o arquivo /boot/config.txt. Adicione a seguinte linha ao final do arquivo:

dtoverlay=i2c-rtc,ds3231

7. Após reiniciar, você pode verificar se o RTC está sendo usado corretamente pela Raspberry Pi. Execute o seguinte comando no terminal:

sudo hwclock -r

Código de Controle de Acesso com Raspberry Pi

Este código é uma aplicação de interface gráfica usando Tkinter em Python. Ele oferece funcionalidades de cadastro de usuários e verificação de acesso usando tags RFID.

A função abrir_tela_cadastro() cria uma nova janela para o cadastro de usuários, onde o usuário pode inserir seu nome, CPF e uma tag RFID. Os dados são validados e, se estiverem completos, são salvos em um arquivo de texto e exibida uma mensagem de sucesso. Se algum campo estiver vazio, uma mensagem de erro é exibida.

A função verificar_acesso() cria uma janela para verificar o acesso com base na tag RFID inserida. Se a tag estiver presente no arquivo de usuários cadastrados, as informações do usuário são exibidas em uma mensagem de acesso liberado; caso contrário, é exibida uma mensagem de acesso negado.

A interface principal é inicializada com dois botões: um para abrir a tela de cadastro e outro para abrir a tela de verificação de acesso.

Os dados dos usuários são armazenados em um dicionário chamado usuarios, onde as chaves são as tags RFID e os valores são dicionários contendo nome e CPF dos usuários.

A função carregar_usuarios() carrega os usuários previamente cadastrados a partir de um arquivo de texto chamado “usuarios_cadastrados.txt”.

Importante! É necessário criar um arquivo chamado usuarios_cadastrados.txt na mesma pasta onde estará salvo o arquivo Python. 

import tkinter as tk
from tkinter import messagebox

# Funções relacionadas ao cadastro de usuários
def abrir_tela_cadastro():
    janela_cadastro = tk.Toplevel(root)
    janela_cadastro.title("Cadastro de Usuários")

    def cadastrar_usuario():
        nome = entrada_nome.get()
        cpf = entrada_cpf.get()
        tag = entrada_tag.get()

        if nome and cpf and tag:
            usuarios[tag] = {"Nome": nome, "CPF": cpf}
            salvar_usuarios()
            messagebox.showinfo("Sucesso", "Usuário cadastrado com sucesso!")
            limpar_campos()
        else:
            messagebox.showerror("Erro", "Por favor, preencha todos os campos.")

    def limpar_campos():
        entrada_nome.delete(0, tk.END)
        entrada_cpf.delete(0, tk.END)
        entrada_tag.delete(0, tk.END)

    def salvar_usuarios():
        with open("usuarios_cadastrados.txt", "w") as file:
            for tag, info in usuarios.items():
                file.write(f"{tag},{info['Nome']},{info['CPF']}\n")

    frame_cadastro = tk.Frame(janela_cadastro)
    frame_cadastro.pack(padx=10, pady=10)

    tk.Label(frame_cadastro, text="Nome:").grid(row=0, column=0, padx=5, pady=5)
    entrada_nome = tk.Entry(frame_cadastro, width=30)
    entrada_nome.grid(row=0, column=1, padx=5, pady=5)

    tk.Label(frame_cadastro, text="CPF:").grid(row=1, column=0, padx=5, pady=5)
    entrada_cpf = tk.Entry(frame_cadastro, width=30)
    entrada_cpf.grid(row=1, column=1, padx=5, pady=5)

    tk.Label(frame_cadastro, text="Tag RFID:").grid(row=2, column=0, padx=5, pady=5)
    entrada_tag = tk.Entry(frame_cadastro, width=30)
    entrada_tag.grid(row=2, column=1, padx=5, pady=5)

    botao_cadastrar = tk.Button(frame_cadastro, text="Cadastrar", command=cadastrar_usuario)
    botao_cadastrar.grid(row=3, column=0, columnspan=2, padx=5, pady=5)

# Funções relacionadas à verificação de acesso
def verificar_acesso():
    def verificar():
        tag = entrada_tag.get()

        if tag in usuarios:
            info_usuario = usuarios[tag]
            nome = info_usuario["Nome"]
            cpf = info_usuario["CPF"]
            mensagem = f"Acesso liberado!\n\nNome: {nome}\nCPF: {cpf}"
            messagebox.showinfo("Acesso Liberado", mensagem)
        else:
            messagebox.showwarning("Acesso Negado", "Acesso negado")

    janela_verificar = tk.Toplevel(root)
    janela_verificar.title("Verificar Acesso")

    frame_verificar = tk.Frame(janela_verificar)
    frame_verificar.pack(padx=10, pady=10)

    tk.Label(frame_verificar, text="Tag RFID:").grid(row=0, column=0, padx=5, pady=5)
    entrada_tag = tk.Entry(frame_verificar, width=30)
    entrada_tag.grid(row=0, column=1, padx=5, pady=5)

    botao_verificar = tk.Button(frame_verificar, text="Verificar", command=verificar)
    botao_verificar.grid(row=1, column=0, columnspan=2, padx=5, pady=5)

# Inicialização da interface gráfica
root = tk.Tk()
root.title("Verificação de Tag RFID")

frame = tk.Frame(root)
frame.pack(padx=50, pady=20)

botao_cadastrar = tk.Button(frame, text="Cadastrar", command=abrir_tela_cadastro)
botao_cadastrar.grid(row=0, column=0, padx=10, pady=10)

botao_verificar = tk.Button(frame, text="Verificar", command=verificar_acesso)
botao_verificar.grid(row=0, column=1, padx=10, pady=10)

# Armazenamento e carregamento de usuários
usuarios = {}

def carregar_usuarios():
    try:
        with open("usuarios_cadastrados.txt", "r") as file:
            for line in file:
                tag, nome, cpf = line.strip().split(",")
                usuarios[tag] = {"Nome": nome, "CPF": cpf}
    except FileNotFoundError:
        pass

carregar_usuarios()

root.mainloop()

Funcionamento: integração Leitor RFID 125Khz, RTC e Pi 4

Ao executar o código Python acima, você terá a tela abaixo. Nela existem dois botões: um para cadastrar novas tags RFID e outro para verificar as tags RFID. 

código Python para Leitor RFID 125kHZ

Ao clicar em Cadastrar, você terá a tela abaixo, onde é possível inserir o nome do usuário, o seu CPF e fazer a leitura da tag que será cadastrada.

Funcionamento passo 2

Funcionamento passo 3

Na tela inicial, ao clicar em Verificar, você terá a tela abaixo, onde será feita a verificação se a tag aproximada está cadastrada. 

Funcionamento passo 4

Se a tag estiver cadastrada, a mensagem “Acesso liberado!” será apresentada, assim como o nome e o CPF cadastrados.

Funcionamento passo 5

Caso contrário, a mensagem “Acesso negado” será apresentada.

Funcionamento passo 6


Se você tiver dúvidas, sugestões ou experiências para compartilhar, fique a vontade para deixar um comentário abaixo. E para não perder nenhum conteúdo como este, não deixe de nos seguir no Instagram.

Faça seu comentário

Acesse sua conta e participe