Skip to main content

🖲️ Hardwares Periféricos

🔍 O que é?

  Hardware periférico é um dispositivo que se conecta ao hardware principal de um computador ou dispositivo móvel para fornecer funcionalidades adicionais. No nosso projeto, vamos utilizar o leitor de Qr code e o sensor infravermelho usando um Raspberry Pi 5 (micro computador) para fazer a integração no nosso sistema.

🏷️ Leitor de QR code

  No nosso projeto, o leitor de QR code é utilizado para registrar as informações dos medicamentos que estão sendo separados para a produção das fitas. Esses dados incluem nome do medicamento, quantidade, validade e lote. Durante a operação, o braço robótico se posiciona acima do bin, realiza a leitura do QR code e, em seguida, continua o processo, pegando o medicamento e depositando-o na caixa para o embalo da fita.

🔗 Integração com o Sistema

 O leitor de QR code, MH-ET Live Scanner V3.0, está fisicamente conectado a uma Raspberry Pi, que atua como intermediária no envio dos dados para o sistema. Após a leitura de um QR code, a Raspberry envia os dados via requisição HTTP (POST) para um servidor local, onde o robô Dobot realiza o consumo dessa informação.

Figura 1 - Leitor de QR Code utilizado no projeto
Fonte: Usinainfoo

 No lado do robô, a CLI realiza uma requisição GET para consumir a informação escaneada:

rota_qrcode = "http://127.0.0.1:5000/qrcode-response"

def request_bip(timeout: int = 10):
print("🕐 Solicitando bipagem via HTTP...")

try:
response = requests.get(rota_qrcode, timeout=timeout)
response.raise_for_status()
scanned_medicine = response.json()
print(f"📡 Medicamento bipado recebido: {scanned_medicine}")
return scanned_medicine

except requests.exceptions.RequestException as e:
print(f"⏳ Falha ao obter bipagem: {e}")
return None

 Após a leitura do QR code, o sistema realiza uma validação comparando o medicamento bipado com o esperado, conforme o mapeamento da prescrição. Se a validação for bem-sucedida, o Dobot realiza a descida no eixo Z para coletar o medicamento. E depois prosseguir para a entrega na fita.

  A respeito de banco de dados, os dados dos medicamentos bipados são armazenados em um banco de dados relacional criado com SQLite, permitindo a realização das operações de CRUD (Create, Read, Update, Delete). A API que recebe os dados escaneados realiza a criação de novos registros no banco, os quais podem ser:

  • Visualizados diretamente pela interface de logs e histórico.

  • Atualizados em caso de correções manuais por parte do farmacêutico.

  • Removidos se identificada uma leitura incorreta.

 Com essa estrutura, o sistema de leitura de QR code atende plenamente aos critérios do projeto, ao garantir a rastreabilidade dos medicamentos por meio do armazenamento em banco de dados, possibilitar operações completas de CRUD sobre os dados registrados e expor essas informações de forma clara na interface de logs, permitindo o monitoramento e a verificação das leituras em tempo real.

 Dessa forma, o processo de separação automatizada se torna seguro, validado e totalmente integrado ao fluxo da farmácia hospitalar, contribuindo para maior precisão e confiabilidade nas operações.

❗ Sensor infravermelho

  O sensor infravermelho utilizado é um Tcrt5000 e sua leitura pode ser tanto digital (informando se existe algo na frente dele ou não) ou analógica (informando a distância que o objeto está do sensor). Sua utilização no projeto está voltada para as leituras digitais, onde utilizamos ele para verificar se houve ou não a coleta dos medicamentos após a descida do braço robótico.

Figura 2 - Tcrt5000
Fonte: institutodigital

  Caso o sensor identifique que após a descida do dobot o medicamento não foi coletado ele repete a ação no intuito de coletar definitivamente aquele medicamento. Caso a segunda tentativa seja falha o código passa para o próximo medicamento da lista e tenta realizar sua coleta.

def ir_sensor(timeout: int=10):
print("\U0001F551 Verificando coleta")
try:
response = requests.get("http://localhost:5000/api/sensores", timeout=timeout)
response.raise_for_status()
status_coleta = response.json().get("caught")

print(f"\U0001F4E1 Estado sensor IR: {status_coleta}")
if status_coleta == "ALTO":
return False
elif status_coleta == "BAIXO":
return True
except requests.exceptions.RequestException as e:
print(f"⏳ Falha ao obter leitura: {e}")
return None

  O código apresentado acima está presente em nossa CLI e é ele que recebe os POST's feitos pela raspberry na rota "api/sensores", sendo que o código presente no micro computador envia "ALTO" quando o valor de leitura do sensor está alto (representando que ele não coletou nada) e "BAIXO" quando a leitura está baixa (representando que houve a coleta do medicamento).